Nginx 編譯安裝【CentOS 7】

作者:辰風(fēng)沐陽 閱讀:2543 發(fā)布時間:2024-01-05 上次更新:2024-02-21

1. 前言


本文使用的操作系統(tǒng):

名稱 描述 文章
Oracle VM VirtualBox 虛擬機(jī)軟件 VirtualBox 使用介紹
CentOS-7-x86_64-Minimal-2009.iso CentOS 7.9 最小化安裝鏡像文件 VirtualBox 安裝 CentOS 7

操作系統(tǒng)信息如下所示

  1. cat /etc/redhat-release

2. 源碼包


進(jìn)入 nginx 官網(wǎng):https://nginx.org,查看最新穩(wěn)定版,復(fù)制鏈接地址,本文使用的是當(dāng)前最新穩(wěn)定版本 v1.24.0

  1. https://nginx.org/download/nginx-1.24.0.tar.gz

3. 編譯安裝


本文將 nginx 源碼包存放在 /usr/local/src 目錄

  1. # 進(jìn)入目錄
  2. cd /usr/local/src
  3. # 下載 nginx 源碼包
  4. wget https://nginx.org/download/nginx-1.24.0.tar.gz

當(dāng)使用 wget 下載 nginx 源碼包時,提示命令不存在。使用 yum 安裝即可,然后重新使用 wget 下載 nginx 源碼包

  1. yum install wget -y

解壓 nginx 源碼包,進(jìn)入源碼包目錄,執(zhí)行預(yù)編譯命令

nginx 的安裝目錄默認(rèn)是 /usr/local/nginx,--prefix 配置項缺省時默認(rèn)就是該目錄,但不建議省略該參數(shù)選項

  1. tar -zxf nginx-1.24.0.tar.gz
  2. cd nginx-1.24.0
  3. ./configure --prefix=/usr/local/nginx

當(dāng)預(yù)編譯出現(xiàn)以下報錯時,表示沒有 gcc 編譯器,使用 yum 安裝即可

nginx 是使用 c 語言編寫的程序,因此想要運(yùn)行 nginx 就需要安裝一個編譯工具。gcc 就是一個開源的編譯器集合,用于處理各種各樣的語言,其中就包含了 c 語言,運(yùn)行以下命令安裝即可

  1. # 安裝 gcc 編譯器
  2. yum install gcc -y
  3. # 可通過以下命令來查看 gcc 是否安裝成功
  4. gcc --version

當(dāng)預(yù)編譯出現(xiàn)以下報錯時,表示缺少 pcre(兼容正則表達(dá)式庫),使用 yum 安裝即可

nginx 在編譯過程中需要使用到 pcre 庫,因為在 nginx 的 Rewrite 模塊和 http 核心模塊都會使用到 pcre 正則表達(dá)式語法

  1. # 安裝 pcre 庫
  2. yum install pcre pcre-devel -y
  3. # 可以通過以下命令來查看是否安裝成功
  4. rpm -qa pcre pcre-devel

當(dāng)預(yù)編譯出現(xiàn)以下報錯時,表示缺少 zlib,使用 yum 安裝即可

zlib 庫提供了開發(fā)人員的壓縮算法,在 nginx 的各個模塊中需要使用 gzip 壓縮,所以我們也需要安裝其庫及源代碼

  1. # 安裝 zlib 庫
  2. yum install zlib zlib-devel -y
  3. # 可以通過以下命令來查看是否安裝成功
  4. rpm -qa zlib zlib-devel

當(dāng)看到以下內(nèi)容,表示預(yù)編譯成功,目前最小化安裝成功了,也就是使用最少的參數(shù)

當(dāng)我們配置 SSL 證書,實現(xiàn) HTTPS 訪問時,會將監(jiān)聽的端口改為 443 ssl,重載配置發(fā)現(xiàn)報錯了

  1. server {
  2. listen 443 ssl;
  3. server_name www.waterflosserreview.com;
  4. }
  1. nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:36

這是因為沒有安裝 SSL 模塊,不支持配置 SSL,運(yùn)行以下命令安裝即可

  1. # 安裝 openssl 庫
  2. yum install openssl openssl-devel -y
  3. # 可以通過以下命令來查看是否安裝成功
  4. rpm -qa openssl openssl-devel
  1. ./configure --prefix=/usr/local/nginx --with-http_ssl_module

4. 安裝總結(jié)


環(huán)境準(zhǔn)備:安裝 wget 和 編譯 nginx 所需要的依賴包

  1. yum install wget -y
  2. yum install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel -y

下載 nginx 源碼包

  1. # 源碼包存放目錄
  2. cd /usr/local/src
  3. # 下載 nginx 源碼包
  4. wget https://nginx.org/download/nginx-1.24.0.tar.gz
  5. # 解壓縮 nginx 源碼包
  6. tar -zxf nginx-1.24.0.tar.gz
  7. # 進(jìn)入源碼包目錄
  8. cd nginx-1.24.0

執(zhí)行編譯安裝

  1. # 預(yù)編譯
  2. ./configure --prefix=/usr/local/nginx \
  3. --with-http_stub_status_module \
  4. --with-http_ssl_module
  5. # 編譯并安裝
  6. make && make install

當(dāng) nginx 安裝成功后,/usr/local/nginx 目錄內(nèi)容如下所示

關(guān)閉防火墻

  1. # 關(guān)閉防火墻狀態(tài)
  2. systemctl stop firewalld
  3. # 關(guān)閉防火墻開機(jī)自啟
  4. systemctl disable firewalld

5. 啟動 nginx


進(jìn)入 /usr/local/nginx/sbin 目錄,運(yùn)行以下命令啟動 nginx 服務(wù)

  1. # 進(jìn)入 nginx 安裝目錄下的 sbin 目錄
  2. cd /usr/local/nginx/sbin
  3. # 啟動 nginx 服務(wù),相對路徑寫法,./ 不能省略,表示執(zhí)行 nginx 文件
  4. ./nginx

也可以使用絕對路徑寫法

  1. /usr/local/nginx/sbin/nginx

絕對路徑命令比較長,可以定義命令的別名簡化命令

  1. # 定義命令別名
  2. alias nginx=/usr/local/nginx/sbin/nginx
  3. # 使用別名控制 nginx 服務(wù)啟停
  4. nginx # 啟動
  5. nginx -s stop # 停止
  6. nginx -s reload # 重啟

命令補(bǔ)充:

  1. ./nginx -s stop # 快速停止
  2. ./nginx -s quit # 優(yōu)雅關(guān)閉,在關(guān)閉前完成已經(jīng)接受的連接請求
  3. ./nginx -s reload # 重新加載配置

使用 curl 命令測試訪問,看到以下內(nèi)容說明啟動成功

  1. curl 127.0.0.1

6. 關(guān)閉防火墻


通過以下命令查看虛擬主機(jī)的局域網(wǎng) IP

  1. ip addr | grep 192.168

目前局域網(wǎng)內(nèi)其他電腦無法訪問虛擬主機(jī),如下所示,這是因為防火墻是開啟狀態(tài)

運(yùn)行以下命令,即可關(guān)閉防火墻,如果只是使用虛擬機(jī)進(jìn)行測試,可以直接關(guān)閉防火墻

在正式環(huán)境中,可以開啟防火墻,只需要開放相應(yīng)端口即可,點擊查看防火墻命令更多用法

  1. # 查看防火墻狀態(tài)(running|not running)
  2. firewall-cmd --state
  3. # 關(guān)閉防火墻狀態(tài)
  4. systemctl stop firewalld
  5. # 關(guān)閉防火墻開機(jī)自啟
  6. systemctl disable firewalld

此時,就可以發(fā)現(xiàn)能訪問了

7. 設(shè)置系統(tǒng)服務(wù)


創(chuàng)建服務(wù)腳本

  1. vi /usr/lib/systemd/system/nginx.service

服務(wù)腳本內(nèi)容

  1. [Unit]
  2. Description=nginx - web server
  3. After=network.target remote-fs.target nss-lookup.target
  4. [Service]
  5. Type=forking
  6. ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
  7. ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
  8. ExecReload=/usr/local/nginx/sbin/nginx -s reload
  9. ExecStop=/usr/local/nginx/sbin/nginx -s quit
  10. PrivateTmp=true
  11. [Install]
  12. WantedBy=multi-user.target

運(yùn)行以下命令,創(chuàng)建的 nginx 系統(tǒng)服務(wù)生效

  1. # 重新加載系統(tǒng)服務(wù)
  2. systemctl daemon-reload

nginx 系統(tǒng)服務(wù)相關(guān)命令,可以更加方便的管理 nginx 服務(wù)

  1. # 查看 nginx 服務(wù)狀態(tài)
  2. systemctl status nginx
  3. # 啟動 nginx 服務(wù)
  4. systemctl start nginx
  5. # 關(guān)閉 nginx 服務(wù)
  6. systemctl stop nginx
  7. # 重載 nginx 配置
  8. systemctl reload nginx
  9. # 啟用 nginx 服務(wù)開機(jī)自啟
  10. systemctl enable nginx
  11. # 關(guān)閉 nginx 服務(wù)開機(jī)自啟
  12. systemctl disable nginx

8. 卸載 nginx


步驟一:停止 nginx 服務(wù)

  1. /usr/local/nginx/sbin/nginx -s stop

步驟二:將安裝的 nginx 刪除

  1. rm -rf /usr/local/nginx

步驟三:將安裝包之前編譯的環(huán)境清除掉

  1. cd /usr/local/src/nginx-1.24.0
  2. make clean

標(biāo)簽: nginx