[TOC] #### 1. 前言 --- 本文使用的操作系統: | 名稱 | 描述 | 文章 | | ------------ | ------------ | ------------ | | Oracle VM VirtualBox | 虛擬機軟件 | [VirtualBox 使用介紹](http://www.financialfreedom4us.com/index/627.html) | | CentOS-7-x86_64-Minimal-2009.iso | CentOS 7.9 最小化安裝鏡像文件 | [VirtualBox 安裝 CentOS 7](http://www.financialfreedom4us.com/index/628.html) | 操作系統信息如下所示 ``` cat /etc/redhat-release ``` ![](https://img.itqaq.com/art/content/a1e50328f72c5041c51c3d9298563824.png) #### 2. 源碼包 --- 進入 nginx 官網:<https://nginx.org>,查看最新穩定版,復制鏈接地址,本文使用的是當前最新穩定版本 v1.24.0 ``` https://nginx.org/download/nginx-1.24.0.tar.gz ``` ![](https://img.itqaq.com/art/content/b74d89ad545a72979c44660201cd22e8.png) #### 3. 編譯安裝 --- 本文將 nginx 源碼包存放在 `/usr/local/src` 目錄 ```bash # 進入目錄 cd /usr/local/src # 下載 nginx 源碼包 wget https://nginx.org/download/nginx-1.24.0.tar.gz ``` 當使用 wget 下載 nginx 源碼包時,提示命令不存在。使用 yum 安裝即可,然后重新使用 wget 下載 nginx 源碼包 ```bash yum install wget -y ``` ![](https://img.itqaq.com/art/content/ce41ba28a253b7cf6c8fb745115c145b.png) 解壓 nginx 源碼包,進入源碼包目錄,執行預編譯命令 nginx 的安裝目錄默認是 `/usr/local/nginx`,`--prefix` 配置項缺省時默認就是該目錄,但不建議省略該參數選項 ```bash tar -zxf nginx-1.24.0.tar.gz cd nginx-1.24.0 ./configure --prefix=/usr/local/nginx ``` 當預編譯出現以下報錯時,表示沒有 gcc 編譯器,使用 yum 安裝即可 nginx 是使用 c 語言編寫的程序,因此想要運行 nginx 就需要安裝一個編譯工具。gcc 就是一個開源的編譯器集合,用于處理各種各樣的語言,其中就包含了 c 語言,運行以下命令安裝即可 ```bash # 安裝 gcc 編譯器 yum install gcc -y # 可通過以下命令來查看 gcc 是否安裝成功 gcc --version ``` ![](https://img.itqaq.com/art/content/7b58630488d15df0ca06e98e07a378ca.png) 當預編譯出現以下報錯時,表示缺少 pcre(兼容正則表達式庫),使用 yum 安裝即可 nginx 在編譯過程中需要使用到 pcre 庫,因為在 nginx 的 Rewrite 模塊和 http 核心模塊都會使用到 pcre 正則表達式語法 ```bash # 安裝 pcre 庫 yum install pcre pcre-devel -y # 可以通過以下命令來查看是否安裝成功 rpm -qa pcre pcre-devel ``` ![](https://img.itqaq.com/art/content/ffc5b95965594f6699dd3e19166d316f.png) 當預編譯出現以下報錯時,表示缺少 zlib,使用 yum 安裝即可 zlib 庫提供了開發人員的壓縮算法,在 nginx 的各個模塊中需要使用 gzip 壓縮,所以我們也需要安裝其庫及源代碼 ```bash # 安裝 zlib 庫 yum install zlib zlib-devel -y # 可以通過以下命令來查看是否安裝成功 rpm -qa zlib zlib-devel ``` ![](https://img.itqaq.com/art/content/e6629c7353d9671807475a3aa7b1d886.png) 當看到以下內容,表示預編譯成功,目前最小化安裝成功了,也就是使用最少的參數 ![](https://img.itqaq.com/art/content/3a19469626ba572128e7113af29eb321.png) 當我們配置 SSL 證書,實現 HTTPS 訪問時,會將監聽的端口改為 `443 ssl`,重載配置發現報錯了 ``` server { listen 443 ssl; server_name www.financialfreedom4us.com; } ``` ``` nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:36 ``` 這是因為沒有安裝 SSL 模塊,不支持配置 SSL,運行以下命令安裝即可 ```bash # 安裝 openssl 庫 yum install openssl openssl-devel -y # 可以通過以下命令來查看是否安裝成功 rpm -qa openssl openssl-devel ``` ```bash ./configure --prefix=/usr/local/nginx --with-http_ssl_module ``` ![](https://img.itqaq.com/art/content/924fe3f626addae625a461d327589e2e.png) #### 4. 安裝總結 --- 環境準備:安裝 wget 和 編譯 nginx 所需要的依賴包 ```bash yum install wget -y yum install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel -y ``` 下載 nginx 源碼包 ```bash # 源碼包存放目錄 cd /usr/local/src # 下載 nginx 源碼包 wget https://nginx.org/download/nginx-1.24.0.tar.gz # 解壓縮 nginx 源碼包 tar -zxf nginx-1.24.0.tar.gz # 進入源碼包目錄 cd nginx-1.24.0 ``` 執行編譯安裝 ```bash # 預編譯 ./configure --prefix=/usr/local/nginx \ --with-http_stub_status_module \ --with-http_ssl_module # 編譯并安裝 make && make install ``` 當 nginx 安裝成功后,`/usr/local/nginx` 目錄內容如下所示 ![](https://img.itqaq.com/art/content/31c72b36010f7979fbfdd62e9f205b55.png) 關閉防火墻 ```bash # 關閉防火墻狀態 systemctl stop firewalld # 關閉防火墻開機自啟 systemctl disable firewalld ``` #### 5. 啟動 nginx --- 進入 `/usr/local/nginx/sbin` 目錄,運行以下命令啟動 nginx 服務 ```bash # 進入 nginx 安裝目錄下的 sbin 目錄 cd /usr/local/nginx/sbin # 啟動 nginx 服務,相對路徑寫法,./ 不能省略,表示執行 nginx 文件 ./nginx ``` 也可以使用絕對路徑寫法 ```bash /usr/local/nginx/sbin/nginx ``` ![](https://img.itqaq.com/art/content/f481c9cda915429bb240c06eea9350af.png) 絕對路徑命令比較長,可以定義命令的別名簡化命令 ```bash # 定義命令別名 alias nginx=/usr/local/nginx/sbin/nginx # 使用別名控制 nginx 服務啟停 nginx # 啟動 nginx -s stop # 停止 nginx -s reload # 重啟 ``` 命令補充: ```bash ./nginx -s stop # 快速停止 ./nginx -s quit # 優雅關閉,在關閉前完成已經接受的連接請求 ./nginx -s reload # 重新加載配置 ``` 使用 curl 命令測試訪問,看到以下內容說明啟動成功 ```bash curl 127.0.0.1 ``` ![](https://img.itqaq.com/art/content/dca4d2b74b239e8951195eb0f487e075.png) #### 6. 關閉防火墻 --- 通過以下命令查看虛擬主機的局域網 IP ```bash ip addr | grep 192.168 ``` ![](https://img.itqaq.com/art/content/b4e6e37e26b83cea5ca6d0e7d8983a54.png) 目前局域網內其他電腦無法訪問虛擬主機,如下所示,這是因為防火墻是開啟狀態 ![](https://img.itqaq.com/art/content/fc7e23dbb3713532cd32816bbee0cf7b.png) 運行以下命令,即可關閉防火墻,如果只是使用虛擬機進行測試,可以直接關閉防火墻 在正式環境中,可以開啟防火墻,只需要開放相應端口即可,[點擊查看防火墻命令更多用法](http://www.financialfreedom4us.com/index/126.html) ```bash # 查看防火墻狀態(running|not running) firewall-cmd --state # 關閉防火墻狀態 systemctl stop firewalld # 關閉防火墻開機自啟 systemctl disable firewalld ``` ![](https://img.itqaq.com/art/content/86deffaf83dd76d8e5307451cac3a7e9.png) 此時,就可以發現能訪問了 ![](https://img.itqaq.com/art/content/78efa11a74f7f8d7fb9a73896b7e4ae3.png) #### 7. 設置系統服務 --- 創建服務腳本 ```bash vi /usr/lib/systemd/system/nginx.service ``` 服務腳本內容 ``` [Unit] Description=nginx - web server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target ``` 運行以下命令,創建的 nginx 系統服務生效 ```bash # 重新加載系統服務 systemctl daemon-reload ``` nginx 系統服務相關命令,可以更加方便的管理 nginx 服務 ```bash # 查看 nginx 服務狀態 systemctl status nginx # 啟動 nginx 服務 systemctl start nginx # 關閉 nginx 服務 systemctl stop nginx # 重載 nginx 配置 systemctl reload nginx # 啟用 nginx 服務開機自啟 systemctl enable nginx # 關閉 nginx 服務開機自啟 systemctl disable nginx ``` #### 8. 卸載 nginx --- 步驟一:停止 nginx 服務 ```bash /usr/local/nginx/sbin/nginx -s stop ``` 步驟二:將安裝的 nginx 刪除 ```bash rm -rf /usr/local/nginx ``` 步驟三:將安裝包之前編譯的環境清除掉 ```bash cd /usr/local/src/nginx-1.24.0 make clean ```