柚子快報激活碼778899分享:運維 Nginx 安裝配置
柚子快報激活碼778899分享:運維 Nginx 安裝配置
1.1 Nginx 概述
1.1.1 Nginx 介紹
Nginx(engine X)由Igor Sysoev于2002年開發(fā),分為社區(qū)版和商業(yè)版(nginx plus)。2019年3月11日,F(xiàn)5 Networks以6.7億美元的價格收購了Nginx。Nginx是一款免費的、開源的、高性能HTTP和反向代理服務(wù)器,同時支持郵件代理服務(wù)器以及TCP/UDP代理服務(wù)器。它被設(shè)計用于解決C10K問題(10,000個并發(fā)連接),并且廣泛應(yīng)用于高流量網(wǎng)站中。
Nginx 官網(wǎng):http://nginx.org
Nginx的其他二次發(fā)行版包括:
Tengine:由淘寶網(wǎng)發(fā)起的Web服務(wù)器項目,基于Nginx進(jìn)行優(yōu)化,添加了許多高級功能和特性,特別適合高訪問量的網(wǎng)站。Tengine已經(jīng)在大型網(wǎng)站如淘寶網(wǎng)、天貓商城中得到了充分檢驗。官網(wǎng):http://tengine.taobao.org/ OpenResty:由章亦春團(tuán)隊開發(fā)的基于Nginx與Lua語言的高性能Web平臺,官網(wǎng):http://openresty.org/cn/
1.1.2 Nginx 功能介紹
靜態(tài)資源服務(wù)器:如html、圖片、js、css、txt等。反向代理:支持HTTP/HTTPS協(xié)議。動態(tài)資源請求反向代理:結(jié)合FastCGI/uWSGI/SCGI等協(xié)議。TCP/UDP協(xié)議轉(zhuǎn)發(fā):支持tcp/udp協(xié)議的請求轉(zhuǎn)發(fā)。郵件代理:支持IMAP4/POP3協(xié)議的反向代理。
1.1.3 Nginx 基礎(chǔ)特性
模塊化設(shè)計:具備良好的擴(kuò)展性。高可靠性:支持熱部署,不停機(jī)更新配置文件、升級版本和更換日志文件。低內(nèi)存消耗:在10,000個keep-alive連接下,僅需2.5MB內(nèi)存。事件驅(qū)動:支持AIO、mmap、sendfile等機(jī)制。
1.2 Nginx 架構(gòu)和進(jìn)程
1.2.1 Nginx 進(jìn)程結(jié)構(gòu)
Nginx采用多進(jìn)程架構(gòu),由一個Master主進(jìn)程和多個Worker工作進(jìn)程組成。
主進(jìn)程(Master Process):負(fù)責(zé)接收外部操作信號,轉(zhuǎn)發(fā)給Worker進(jìn)程,并監(jiān)控Worker進(jìn)程的運行狀態(tài)。它還負(fù)責(zé)讀取Nginx配置文件,建立、綁定和關(guān)閉socket連接,管理和生成工作進(jìn)程,并實現(xiàn)不中斷服務(wù)的平滑升級和重啟。 工作進(jìn)程(Worker Process):負(fù)責(zé)處理所有網(wǎng)絡(luò)請求。每個Worker進(jìn)程都是獨立且平等的,通常設(shè)置為CPU核心數(shù),以充分利用資源并減少上下文切換的損耗。Worker進(jìn)程處理客戶請求,將其送入各個功能模塊,執(zhí)行I/O調(diào)用,與后端服務(wù)器通信,并響應(yīng)客戶請求。
1.2.2 Nginx 進(jìn)程間通信
Nginx的主進(jìn)程與工作進(jìn)程之間通過管道通信。主進(jìn)程生成工作進(jìn)程,并在啟動時為每個進(jìn)程建立單向管道,用于發(fā)送指令。Worker進(jìn)程之間也可以通過共享內(nèi)存或管道通信,但由于它們是隔離的,因此需要通過主進(jìn)程來實現(xiàn)狀態(tài)信息的共享。
1.2.3 Nginx 啟動和 HTTP 連接建立
Nginx啟動時,Master進(jìn)程加載配置文件并初始化監(jiān)聽的socket。然后,Master進(jìn)程通過fork出多個Worker進(jìn)程,Worker進(jìn)程之間競爭新的連接,成功的Worker進(jìn)程通過三次握手建立Socket連接并處理請求。
1.3 Nginx 模塊介紹
Nginx支持多種模塊,模塊化設(shè)計使其功能可以靈活擴(kuò)展。
核心模塊:提供Nginx的基本運行功能,如錯誤日志記錄、配置文件解析、事件驅(qū)動機(jī)制和進(jìn)程管理。標(biāo)準(zhǔn)HTTP模塊:處理HTTP協(xié)議的解析和管理??蛇xHTTP模塊:擴(kuò)展HTTP功能,如多媒體傳輸、GeoIP請求解析、網(wǎng)絡(luò)傳輸壓縮和SSL支持。郵件服務(wù)模塊:支持POP3、IMAP和SMTP協(xié)議的郵件服務(wù)。Stream服務(wù)模塊:用于TCP協(xié)議代理的實現(xiàn)。第三方模塊:用于擴(kuò)展Nginx功能,如Json支持和Lua支持。
1.4 Nginx 安裝
1.4.1 Nginx 版本和安裝方式
Nginx主要有三個版本:
Mainline version:主要開發(fā)版本,一般為奇數(shù)版本號,如1.19。Stable version:最新的穩(wěn)定版本,一般為偶數(shù)版本號,如1.20。Legacy versions:舊的穩(wěn)定版本,如1.18。
Nginx可以通過yum或源碼編譯安裝,推薦使用源碼編譯方式安裝。雖然yum安裝較為方便,但版本通常較舊,而源碼編譯可以更靈活地自定義安裝路徑和功能,以滿足特定業(yè)務(wù)需求。
Nginx 編譯安裝
1. 安裝所需依賴包
dnf install gcc pcre-devel zlib-devel openssl-devel -y
首先,通過 dnf 包管理器安裝 Nginx 編譯所需的依賴庫。這些依賴包括 gcc 編譯器、pcre-devel(Perl Compatible Regular Expressions 開發(fā)庫)、zlib-devel(壓縮庫開發(fā)文件)和 openssl-devel(OpenSSL 開發(fā)文件)。
2. 創(chuàng)建目錄并解壓 Nginx 源碼包
mkdir /nginx
創(chuàng)建一個名為 /nginx 的目錄,用于存放 Nginx 源碼包。將 nginx-1.24.0.tar.gz 文件放置在該目錄中,并執(zhí)行解壓命令:
tar zxf nginx-1.24.0.tar.gz
3. 創(chuàng)建 Nginx 運行用戶
useradd -s /sbin/nologin -M nginx
通過 useradd 命令創(chuàng)建一個名為 nginx 的系統(tǒng)用戶。該用戶將用于運行 Nginx,并且不允許登錄系統(tǒng)(-s /sbin/nologin)且不創(chuàng)建家目錄(-M)。
4. 進(jìn)入 Nginx 源碼目錄
cd nginx-1.24.0/
進(jìn)入解壓后的 nginx-1.24.0 目錄,準(zhǔn)備進(jìn)行配置和編譯。
5. 配置 Nginx
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
使用 ./configure 腳本配置 Nginx 安裝路徑和功能模塊:
--prefix=/usr/local/nginx:指定 Nginx 安裝路徑。--user=nginx 和 --group=nginx:指定 Nginx 運行的用戶和用戶組。--with-http_ssl_module:啟用 HTTPS 支持。--with-http_v2_module:啟用 HTTP/2 支持。--with-http_realip_module:啟用 IP 透傳功能。--with-http_stub_status_module:啟用狀態(tài)監(jiān)控頁面。--with-http_gzip_static_module:啟用靜態(tài)文件 Gzip 壓縮支持。--with-pcre:啟用正則表達(dá)式支持。--with-stream:啟用 TCP 反向代理支持。--with-stream_ssl_module:啟用 TCP SSL 加密支持。--with-stream_realip_module:啟用 TCP 透傳 IP 功能。
6. 編譯并安裝 Nginx
make && make install
使用 make 命令編譯源碼并安裝 Nginx 到指定的目錄。
驗證版本及編譯參數(shù)
1. 配置環(huán)境變量
vim ~/.bash_profile
編輯 ~/.bash_profile 文件,添加 Nginx 二進(jìn)制文件的路徑到系統(tǒng)環(huán)境變量中:
export PATH=$PATH:/usr/local/nginx/sbin
保存并退出后,執(zhí)行以下命令使配置生效:
source ~/.bash_profile
2. 驗證 Nginx 版本及編譯參數(shù)
nginx -V
使用 nginx -V 命令查看 Nginx 的版本號和編譯時啟用的模塊。輸出如下:
此命令驗證了 Nginx 是否成功安裝以及是否正確編譯了所需模塊。
3. 創(chuàng)建 Nginx 啟動文件
vim /lib/systemd/system/nginx.service
創(chuàng)建或編輯 Nginx 的 systemd 服務(wù)文件 /lib/systemd/system/nginx.service,內(nèi)容如下:
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
關(guān)鍵部分解釋如下:
[Unit] 部分定義了服務(wù)的描述、依賴和啟動順序。[Service] 部分定義了服務(wù)的啟動類型、啟動前的檢查命令、啟動命令、重載和停止命令。[Install] 部分定義了服務(wù)在系統(tǒng)中的安裝模式,通常為 multi-user.target。
保存并退出編輯器后,執(zhí)行以下命令重新加載 systemd 配置:
systemctl daemon-reload
4. 啟動 Nginx 服務(wù)
systemctl start nginx
啟動 Nginx 服務(wù),檢查服務(wù)狀態(tài)以確保其成功運行:
systemctl status nginx
正常情況下,輸出將顯示 Nginx 服務(wù)已啟動并運行,且各個進(jìn)程狀態(tài)正常。
平滑升級
將舊Nginx二進(jìn)制文件換成新Nginx程序文件(注意先備份) 向master進(jìn)程發(fā)送USR2信號 master進(jìn)程修改pid文件名加上后綴.oldbin,成為nginx.pid.oldbin master進(jìn)程用新Nginx文件啟動新master進(jìn)程成為舊master的子進(jìn)程,系統(tǒng)中將有新舊兩個Nginx主 進(jìn)程共同提供Web服務(wù),當(dāng)前新的請求仍然由舊Nginx的worker進(jìn)程進(jìn)行處理,將新生成的master進(jìn) 程的PID存放至新生成的pid文件nginx.pid 向舊的Nginx服務(wù)進(jìn)程發(fā)送WINCH信號,使舊的Nginx worker進(jìn)程平滑停止 向舊master進(jìn)程發(fā)送QUIT信號,關(guān)閉老master,并刪除Nginx.pid.oldbin文件 如果發(fā)現(xiàn)升級有問題,可以回滾∶向老master發(fā)送HUP,向新master發(fā)送QUIT
1. 解壓源碼包
[root@Nginx ~]# tar zxf nginx-1.26.1.tar.gz
功能:將 nginx-1.26.1.tar.gz 文件解壓到當(dāng)前目錄。tar 命令用于解壓歸檔文件,zxf 參數(shù)表示使用 gzip 解壓并提取文件。
2. 進(jìn)入 Nginx 源碼目錄
[root@Nginx ~]# cd nginx-1.26.1/
功能:進(jìn)入解壓后的 Nginx 源碼目錄,以便進(jìn)行配置和編譯。
3. 解壓額外的模塊
[root@Nginx ~]# tar zxf echo-nginx-module-0.63.tar.gz
功能:解壓 echo-nginx-module-0.63.tar.gz 文件,該文件包含額外的 Nginx 模塊。
4. 配置 Nginx
[root@Nginx nginx-1.26.1]# ./configure --prefix=/usr/local/nginx --add-module=/root/echo-nginx-module-0.63 --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
功能:配置 Nginx 編譯選項。
--prefix=/usr/local/nginx:指定 Nginx 安裝路徑。--add-module=/root/echo-nginx-module-0.63:添加第三方模塊。--user=nginx --group=nginx:設(shè)置運行 Nginx 的用戶和用戶組。--with-http_ssl_module:啟用 HTTPS 支持。--with-http_v2_module:啟用 HTTP/2 支持。--with-http_realip_module:啟用真實 IP 支持。--with-http_stub_status_module:啟用狀態(tài)監(jiān)控模塊。--with-http_gzip_static_module:啟用靜態(tài)文件 Gzip 壓縮支持。--with-pcre:啟用 Perl 兼容正則表達(dá)式庫。--with-stream:啟用流模塊。--with-stream_ssl_module:啟用流 SSL 支持。--with-stream_realip_module:啟用流真實 IP 支持。
5. 編譯 Nginx
[root@Nginx nginx-1.26.1]# make
功能:編譯 Nginx 源碼,生成可執(zhí)行文件。
6. 查看編譯后的文件信息
[root@Nginx nginx-1.26.1]# ll objs/nginx /usr/local/nginx/sbin/nginx
-rwxr-xr-x 1 root root 6177320 Aug 20 15:37 objs/nginx
-rwxr-xr-x 1 root root 5679504 Aug 20 15:00 /usr/local/nginx/sbin/nginx
功能:列出 objs/nginx 和 /usr/local/nginx/sbin/nginx 文件的信息,確認(rèn)編譯成功并顯示文件大小和時間戳。
7. 替換 Nginx 可執(zhí)行文件
[root@Nginx sbin]# cp nginx nginx.1
[root@Nginx sbin]# \cp -f /root/nginx-1.26.1/objs/nginx /usr/local/nginx/sbin
功能:備份當(dāng)前 Nginx 可執(zhí)行文件 nginx 為 nginx.1,然后將新編譯的 nginx 文件復(fù)制到 /usr/local/nginx/sbin 目錄中,替換舊的可執(zhí)行文件。
8. 測試 Nginx 配置文件
[root@Nginx sbin]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
功能:測試 Nginx 配置文件是否正確,確保配置語法無誤。
9. 重新加載 Nginx 配置
[root@Nginx sbin]# kill -USR2 36606
[root@Nginx sbin]# ps aux | grep nginx
root 36606 0.0 0.1 9840 2564 ? Ss 15:08 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 36607 0.0 0.2 13700 4852 ? S 15:08 0:00 nginx: worker process
root 36608 0.0 0.4 235988 8876 pts/0 T 15:08 0:00 systemctl status nginx
root 42580 0.0 0.3 9876 6084 ? S 15:50 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 42581 0.0 0.2 13736 4764 ? S 15:50 0:00 nginx: worker process
root 42583 0.0 0.1 221668 2292 pts/0 S+ 15:50 0:00 grep --color=auto nginx
[root@Nginx sbin]# kill -WINCH 36606
[root@Nginx sbin]# kill -QUIT 36606
功能:
kill -USR2 36606:發(fā)送 USR2 信號給舊的 Nginx 主進(jìn)程,觸發(fā)其重新加載配置。ps aux | grep nginx:檢查 Nginx 進(jìn)程的狀態(tài)。kill -WINCH 36606:發(fā)送 WINCH 信號給舊的主進(jìn)程,告訴它將工作進(jìn)程切換到新的主進(jìn)程。kill -QUIT 36606:發(fā)送 QUIT 信號給舊的主進(jìn)程,平穩(wěn)退出。
10. 驗證 Nginx 是否正常運行
[root@Nginx sbin]# curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.26.1
Date: Tue, 20 Aug 2024 07:51:54 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 20 Aug 2024 07:00:22 GMT
Connection: keep-alive
ETag: "66c43f06-267"
Accept-Ranges: bytes
功能:使用 curl 工具向 localhost 發(fā)送 HTTP 請求,檢查 Nginx 是否正確響應(yīng),確保其正常運行并返回 HTTP 200 狀態(tài)碼。
回滾
Nginx 服務(wù)回滾與測試
1. 停止 Nginx 服務(wù)
[root@Nginx sbin]# pkill nginx
使用 pkill nginx 命令停止所有 Nginx 進(jìn)程。
2. 備份并替換 Nginx 可執(zhí)行文件
[root@Nginx sbin]# cp nginx nginx.1
[root@Nginx sbin]# ls nginx nginx.1 nginx.2
nginx nginx.1 nginx.2
創(chuàng)建了 nginx.1 文件作為 nginx 文件的備份。列出當(dāng)前目錄下的 nginx、nginx.1 和 nginx.2 文件。
[root@Nginx sbin]# cp /usr/local/nginx/sbin/nginx.1 /usr/local/nginx/sbin/nginx
cp: overwrite '/usr/local/nginx/sbin/nginx'? y
使用 cp 命令將 nginx.1 文件復(fù)制為 nginx 文件,并確認(rèn)覆蓋已存在的 nginx 文件。
3. 檢查 Nginx 進(jìn)程
[root@Nginx sbin]# ps aux | grep nginx
[root@Nginx sbin]# ps aux | grep nginx
root 36608 0.0 0.4 235988 8876 pts/0 T 15:08 0:00 systemctl status nginx
root 42628 0.0 0.1 221668 2352 pts/0 S+ 16:05 0:00 grep --color=auto nginx
使用 ps aux | grep nginx 命令檢查當(dāng)前運行的 Nginx 進(jìn)程。
4. 啟動 Nginx 服務(wù)
[root@Nginx sbin]# systemctl start nginx
[root@Nginx sbin]# systemctl status nginx
使用 systemctl start nginx 命令啟動 Nginx 服務(wù)。使用 systemctl status nginx 命令檢查 Nginx 服務(wù)的狀態(tài)。
5. 檢查 Nginx 服務(wù)狀態(tài)輸出
● nginx.service - The NGINX HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2024-08-20 16:06:27 CST; 5s ago
Process: 42632 ExecStartPre=/usr/local/nginx/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 42633 ExecStart=/usr/local/nginx/sbin/nginx (code=exited, status=0/SUCCESS)
Main PID: 42634 (nginx)
Tasks: 2 (limit: 10800)
Memory: 3.1M
CPU: 12ms
CGroup: /system.slice/nginx.service
├─42634 "nginx: master process /usr/local/nginx/sbin/nginx"
└─42635 "nginx: worker process"
Aug 20 16:06:27 Nginx.tinminglee.org systemd[1]: Starting The NGINX HTTP and reverse proxy server...
Aug 20 16:06:27 Nginx.tinminglee.org nginx[42632]: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
Aug 20 16:06:27 Nginx.tinminglee.org nginx[42632]: nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Aug 20 16:06:27 Nginx.tinminglee.org systemd[1]: Started The NGINX HTTP and reverse proxy server.
顯示了 Nginx 服務(wù)的狀態(tài),確認(rèn)服務(wù)已啟動并運行。確認(rèn)了 Nginx 配置文件的語法正確,并且測試成功。顯示了 Nginx 的主進(jìn)程(PID 42634)和工作者進(jìn)程(PID 42635)。
6. 測試 Nginx 服務(wù)
[root@Nginx sbin]# curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Tue, 20 Aug 2024 08:06:54 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 20 Aug 2024 07:00:22 GMT
Connection: keep-alive
ETag: "66c43f06-267"
Accept-Ranges: bytes
柚子快報激活碼778899分享:運維 Nginx 安裝配置
推薦鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。