一、環境準備
- 一臺裝有 CentOS 7.9 的虛擬機(IP: 192.168.40.81)
- nginx-1.21.6.tar.gz 安裝包一個(版本隨意)
二、安裝
?1)解壓?nginx-1.21.6.tar.gz
tar -xzvf nginx-1.21.6.tar.gz
- -tar:這是一個在 Linux 系統中常用的歸檔工具,能夠對多個文件或目錄進行打包操作。
- -xzvf:此為命令的選項參數,是由多個選項組合而成的。
- -x:代表 extract,也就是解包的意思,表明要對歸檔文件進行解壓操作。?
- -z:意味著使用 gzip 算法對歸檔文件進行壓縮或解壓。?
- -v:即 verbose,它的作用是在操作過程中顯示詳細的進度信息。?
- -f:表示 file,此選項后面需要緊跟要操作的歸檔文件名稱。
這條命令的主要功能是對名為 nginx-1.21.6.tar.gz 的壓縮包進行解壓操作。具體來講,它會先運用 gzip 算法對壓縮包進行解壓縮,得到一個 tar 包,接著再對這個 tar 包進行解包處理,最終將其中包含的 Nginx 1.21.6 版本的源代碼文件釋放出來。解壓操作會在當前目錄下生成一個名為 nginx-1.21.6 的目錄,解壓出來的所有文件都存放在這個目錄中。
?2)配置編譯選項
cd nginx-1.21.6
./configure --prefix=/usr/local/nginx
- ./configure:
- 這是源碼編譯軟件時的標準第一步,其作用是檢查系統環境是否滿足編譯要求,像依賴庫、編譯器等是否齊全。 該命令會依據系統環境生成 Makefile 文件,而這個文件正是后續 make 和 make install 命令執行的依據。
- --prefix=/usr/local/nginx:
- 此為 configure 命令的一個參數,用于指定軟件的安裝路徑。在這個例子中,Nginx 會被安裝到 /usr/local/nginx 目錄下。
- 安裝完成后,Nginx 的二進制文件會存放在 /usr/local/nginx/sbin/ 目錄,配置文件則位于 /usr/local/nginx/conf/ 目錄。
?出現下面的提示就是配置成功。
- 中途如果有報錯,根據報錯提示,yum install -y 安裝依賴的軟件即可。?
?3)編譯安裝
make && make install
?最終會在 /usr/local 下安裝了 nginx:
?
?4)安裝成服務
- ?創建服務腳本
vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
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 stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true[Install]
WantedBy=multi-user.target
- 重新加載系統服務
systemctl daemon-reload
- ?啟動服務并設置為開機啟動
systemctl enable nginx.service --now
- ?重啟虛擬機
reboot
- 查看 nginx 服務狀態
systemctl status nginx
?5)手工啟動
nginx 也可以手工啟動。安裝成服務以后就不需要手工啟動。服務啟動跟手工啟動二選一。
# 進入安裝好的目錄 /usr/local/nginx/sbin
./nginx 啟動
./nginx -s stop 快速停止
./nginx -s quit 優雅關閉,在退出前完成已經接受的連接請求
./nginx -s reload 重新加載配置
在 Nginx 命令中,-s
?是一個選項(option),用于向正在運行的 Nginx 主進程發送信號(signal),從而控制 Nginx 的行為(如停止、重啟、重新加載配置等)。-s
?后面需要跟具體的信號指令,常見的有:
信號指令 作用 stop
快速停止 Nginx(強制終止,不等待現有連接處理完畢) quit
優雅停止 Nginx(等待所有請求處理完畢后再停止) reload
重新加載配置文件(無需重啟服務,平滑應用新配置) reopen
重新打開日志文件(常用于日志切割,避免日志文件過大)
?6)訪問 Nginx
- 在瀏覽器輸入虛擬機IP
- 如果虛擬機防火墻關閉的話,應該能看到如下:

三、工作原理
Nginx 采用主進程 + 工作進程的多進程模型:
/sbin/nginx 啟動主進程。
- 主進程啟動時讀取并解析配置文件(如?/etc/nginx/nginx.conf)。
- 配置信息被解析為內存中的數據結構(如結構體、哈希表等)。
- 主進程會創建監聽套接字(如監聽 80/443 端口)。
主進程通過 fork() 系統調用創建多個工作進程。
- fork() 會復制主進程的內存空間,包括已解析的配置數據結構。因此,每個工作進程都獲得了主進程配置信息的副本。
- 每個工作進程都會繼承主進程監聽套接字。
- 所有工作進程并行監聽相同的端口,客戶端連接到達時,由操作系統內核決定哪個工作進程接收連接(通常采用負載均衡算法)。
客戶端請求 inde.html。
- 工作進程通過事件循環(Event Loop)監聽多個連接的讀寫事件。
- 當某個連接有數據可讀時,工作進程讀取請求、解析 HTTP 頭,并根據配置文件決定如何處理請求(如轉發到后端服務器、返回靜態文件等)。