linux下安裝nginx
1. 上傳安裝包
比如放到/home/software下。

2.進入到/home/software下,進行解壓
tar -zxvf nginx-1.24.0.tar.gz
3. 進入解壓后的目錄:
cd nginx-1.24.0
4. 配置編譯參數
./configure --prefix=/usr/local/nginx --with-stream --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre
4.1. --prefix=/usr/local/nginx
這個參數指定了 Nginx 的安裝目錄。在這里,Nginx 將被安裝到 /usr/local/nginx 目錄下。
4.2. --with-http_stub_status_module
這個參數啟用了 Nginx 的 stub_status 模塊。該模塊提供了一個簡單的狀態頁面,顯示當前 Nginx 工作進程的活動狀態、連接數等信息。如果你不需要這個模塊,可以不加這個參數。
4.3. --with-http_ssl_module
這個參數啟用了 Nginx 的 SSL/TLS 支持。如果你的網站需要使用 HTTPS,那么必須加上這個參數。否則,可以不加。
4.4. --user=nginx 和 --group=nginx
這兩個參數分別指定了 Nginx 運行時的用戶和組。如果你不指定,Nginx 將使用默認的用戶和組(通常是 nobody)。如果你不關心用戶和組,可以不加這兩個參數。
5. 編譯并安裝 Nginx
make && make install
6. 修改文件夾歸屬
(如果沒有創建nginx用戶的打算,可以跳過): 修改 Nginx 文件夾的歸屬,確保它屬于 nginx 用戶和組:
chown -R nginx:nginx /usr/local/nginx
7. 啟動 Nginx
/usr/local/nginx/sbin/nginx
7.1. 檢查進程
執行以下命令,查看是否有 Nginx 進程在運行:
ps aux | grep nginx
如果看到類似于以下的輸出,說明 Nginx 正在運行:
root 1234 0.0 0.1 12345 6789 ? Ss 09:00 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 5678 0.0 0.2 23456 9876 ? S 09:01 0:00 nginx: worker process
7.2. 訪問 Nginx 默認頁面
打開瀏覽器并訪問你的服務器 IP 地址或域名,應該能夠看到 Nginx 的啟動頁面。如果能夠訪問,說明 Nginx 正在運行。
8. 設置開機啟動
8.1. 創建服務文件
echo -e "[Unit]\nDescription=nginx\nAfter=network.target\n\n[Service]\nType=forking\nExecStart=/usr/local/nginx/sbin/nginx\nExecReload=/usr/local/nginx/sbin/nginx reload\nExecStop=/usr/local/nginx/sbin/nginx quit\nPrivateTmp=true\n\n[Install]\nWantedBy=multi-user.target" > /lib/systemd/system/nginx.service
創建一個 systemd 服務文件,該文件定義了 Nginx 服務的啟動、重啟和停止行為,以及其他相關配置。讓我解釋一下這段內容: [Unit] 部分: Description=nginx:描述了該服務的名稱,這里是 “nginx”。 After=network.target:指定了服務在網絡已啟動后才啟動。 [Service] 部分: Type=forking:指定了服務的啟動類型為 fork 模式,即在后臺運行。 ExecStart=/usr/local/nginx/sbin/nginx:定義了啟動 Nginx 服務的命令。 ExecReload=/usr/local/nginx/sbin/nginx reload:定義了重新加載配置的命令。 ExecStop=/usr/local/nginx/sbin/nginx quit:定義了停止 Nginx 服務的命令。 PrivateTmp=true:啟用了私有臨時目錄。 [Install] 部分: WantedBy=multi-user.target:指定了服務在多用戶模式下啟動。 這個文件將被保存到 /lib/systemd/system/nginx.service,并且在系統啟動時會自動加載。
8.2. 啟用服務
systemctl enable nginx.service
8.3. 停止當前的nginx服務
避免因為端口占用無法啟動
/usr/local/nginx/sbin/nginx -s stop
8.4. 重啟 Nginx 服務
systemctl restart nginx
8.5. 查看 Nginx 服務狀態
systemctl status nginx
8.6. 查看是否開機自啟
systemctl is-enabled nginx
此命令將返回以下之一:
enabled:服務已啟用,將在啟動時自動啟動。
disabled:服務已禁用,不會在啟動時啟動。
static:服務已啟用,但不會自行啟動。
9. 疑難解答
9.1. 啟動時,提示“nginx: [emerg] getpwnam("nginx") failed”
這個錯誤是因為在編譯配置中配置了用戶與組為nginx,但是 Nginx 無法找到名為 “nginx” 的用戶。
解決方案一:
可以嘗試創建一個nginx的用戶
useradd nginx
然后,重新啟動 Nginx:
/usr/local/nginx/sbin/nginx
解決方案二:
修改 Nginx 運行用戶: 編輯 Nginx 配置文件(通常是 /usr/local/nginx/conf/nginx.conf),找到 user 配置項,將其設置為你當前登錄用戶或其他已有用戶。
此處可能會發現Nginx 配置文件中的 #user nobody; 行被注釋掉了。這意味著 Nginx 將使用默認的用戶和組來運行。可以考慮直接將此行注釋放開,Nginx 將使用默認的 nobody 用戶來運行。這意味著所有用戶都可以訪問 Nginx 服務。
然而,請注意以下幾點:
默認情況下,nobody 用戶通常沒有權限訪問其他用戶的文件或目錄。如果你的網站需要讀取或寫入某些文件,你需要確保這些文件的權限允許 nobody 用戶進行操作。
以 nobody 用戶運行 Nginx 可能存在一些安全風險,因為它是一個通用的、低權限的用戶。如果你關心安全性,你可以考慮創建一個專門的用戶來運行 Nginx,然后在配置文件中指定該用戶。
9.2. stub_status 模塊的使用
9.2.1. 編輯 Nginx 配置文件: 打開 Nginx 的配置文件(通常是 /usr/local/nginx/conf/nginx.conf),在 server 部分添加以下配置:
location /nginx_status {
stub_status;
allow 127.0.0.1; # 允許訪問的 IP 地址,可以根據需要修改
deny all; # 禁止其他 IP 訪問
}
9.2.2. 重啟 Nginx: 執行以下命令重啟 Nginx:
/usr/local/nginx/sbin/nginx -s reload
9.2.3. 訪問狀態頁面: 在瀏覽器中訪問 http://your_server_ip/nginx_status,你將看到類似以下的狀態信息:
Active connections:當前活躍的連接數。
server accepts handled requests:總連接數、成功處理的連接數、總請求數。
Reading、Writing、Waiting:Nginx 工作進程的狀態。
9.2.4. 控制訪問權限(可選): 如果你想限制訪問狀態頁面的 IP 地址,可以在配置中調整 allow 和 deny 部分。
9.2.4.1. allow 配置
allow 指定了允許訪問 stub_status 頁面的 IP 地址。你可以指定一個或多個 IP 地址,用空格分隔。
如果你只想允許特定的 IP 地址訪問狀態頁面,可以這樣配置:
location /nginx_status {
stub_status;
allow 192.168.1.10; # 允許訪問的 IP 地址
deny all; # 禁止其他 IP 訪問
}
如果你想允許多個 IP 地址訪問,可以這樣配置:
location /nginx_status {
stub_status;
allow 192.168.1.10 192.168.1.20; # 允許訪問的多個 IP 地址
deny all; # 禁止其他 IP 訪問
}
9.2.4.2. deny 配置
deny 指定了禁止訪問 stub_status 頁面的 IP 地址。如果某個 IP 地址在 allow 和 deny 中都有配置,deny 優先級更高。
如果你不想限制 IP 地址,可以只配置 allow all; 或者省略 allow 和 deny 部分:
location /nginx_status {
stub_status;
allow all; # 允許所有 IP 訪問
}
9.2.4.3. 默認值
如果你不配置 allow 和 deny,默認情況下,所有 IP 地址都可以訪問 stub_status 頁面。
浙公網安備 33010602011771號