Nginx
什么是Nginx?
Nginx是一個(gè)輕量級(jí)/高性能 的反向代理Web服務(wù)器,用于 HTTP、HTTPS、SMTP、POP3 和IMAP 協(xié)議。它實(shí)現(xiàn)非常高效的反向代理、負(fù)載平衡,可以處理2-3萬(wàn)并發(fā)連接數(shù),官方監(jiān)測(cè)能支持5萬(wàn)并發(fā),現(xiàn)在中國(guó)使用nginx網(wǎng)站用戶有很多,例如:新浪、網(wǎng)易、騰訊等。
其他 web 網(wǎng)站服務(wù)軟件
Tomcat:Java Servlet和JSP的容器,用于托管Java Web應(yīng)用程序。
IIS:Windows平臺(tái)的Web服務(wù)器,與Windows緊密集成,支持ASP.NET等技術(shù)。
Nginx 有哪些優(yōu)點(diǎn)?
? 跨平臺(tái)、配置簡(jiǎn)單。
? 非阻塞、高并發(fā)連接:處理 2-3 萬(wàn)并發(fā)連接數(shù),官方監(jiān)測(cè)能支持5萬(wàn)并發(fā)。
? 內(nèi)存消耗小:開(kāi)啟 10 個(gè) Nginx 才占 150M 內(nèi)存。
? 成本低廉,且開(kāi)源。
? 穩(wěn)定性高,宕機(jī)的概率非常小。
? 內(nèi)置的健康檢查功能:如果有一個(gè)服務(wù)器宕機(jī),會(huì)做一個(gè)健康檢查,再發(fā)送的請(qǐng)求就不會(huì)發(fā)送到宕機(jī)的服務(wù)器了。重新將請(qǐng)求提交到其他的節(jié)點(diǎn)上。
Nginx 應(yīng)用場(chǎng)景
? http服務(wù)器。Nginx是一個(gè)http服務(wù)可以獨(dú)立提供http服務(wù)。可以做網(wǎng)頁(yè)靜態(tài)服務(wù)器。
? 虛擬主機(jī)。可以實(shí)現(xiàn)在一臺(tái)服務(wù)器虛擬出多個(gè)網(wǎng)站,例如個(gè)人網(wǎng)站使用的虛擬機(jī)。
? 反向代理,負(fù)載均衡。當(dāng)網(wǎng)站的訪問(wèn)量達(dá)到一定程度后,單臺(tái)服務(wù)器不能滿足用戶的請(qǐng)求時(shí),需要用多臺(tái)服務(wù)器集群可以使用 Nginx 做反向代理。并且多臺(tái)服務(wù)器可以平均分擔(dān)負(fù)載,不會(huì)應(yīng)為某臺(tái)服務(wù)器負(fù)載高宕機(jī)而某臺(tái)服務(wù)器閑置的情況。
? Nginx 中也可以配置安全管理、比如可以使用Nginx搭建API接口網(wǎng)關(guān),對(duì)每個(gè)接口服務(wù)進(jìn)行攔截。
Nginx 和 Apache 的差異
特點(diǎn)
Apache:
創(chuàng)建多個(gè)進(jìn)程或線程,而每個(gè)進(jìn)程或線程都會(huì)為其分配 cpu 和內(nèi)存(線程要比進(jìn)程小的多,所以 worker 支持比 perfork 高的并發(fā)),并發(fā)過(guò)大會(huì)榨干服務(wù)器資源。
Nginx:
采用單線程來(lái)異步非阻塞處理請(qǐng)求(管理員可以配置 Nginx 主進(jìn)程的工作進(jìn)程的數(shù)量)(epol),不會(huì)為每個(gè)請(qǐng)求分配 cpu 和內(nèi)存資源,節(jié)省了大量資源,同時(shí)也減少了大量的 CPU 的上下文切換。所以才使得 Nginx 支持更高的并發(fā)。
區(qū)別
1.輕量級(jí):Nginx 相比 Apache 占用更少的內(nèi)存和系統(tǒng)資源,特別適合高并發(fā)場(chǎng)景。
2.靜態(tài)資源處理性能:Nginx 在處理靜態(tài)資源時(shí)性能遠(yuǎn)超 Apache,速度更快。
3.反向代理加速:Nginx 支持無(wú)緩存的反向代理,可以加速網(wǎng)站訪問(wèn),優(yōu)化流量分發(fā)。
4.性能不依賴硬件:Nginx 的性能和可伸縮性不依賴于高性能硬件,Apache 需要較強(qiáng)的硬件資源才能獲得高效能。
5.熱部署支持:Nginx 支持熱部署,可以在不影響服務(wù)的情況下進(jìn)行配置修改或軟件升級(jí),而 Apache 需要重啟才能應(yīng)用修改。
6.異步與同步處理:Nginx 是異步非阻塞的處理方式,一個(gè)進(jìn)程可以處理多個(gè)連接;Apache 則是同步多進(jìn)程,一個(gè)進(jìn)程處理一個(gè)連接。
7.模塊化設(shè)計(jì):Nginx 高度模塊化,開(kāi)發(fā)模塊相對(duì)簡(jiǎn)單,并且自帶的組件比 Apache 更少,適合針對(duì)特定需求進(jìn)行優(yōu)化。
8.高并發(fā)性能:Nginx 在高并發(fā)場(chǎng)景下能保持低資源消耗的同時(shí)提供高性能,而 Apache 則在高并發(fā)下消耗更多資源。
9.配置簡(jiǎn)潔:Nginx 的配置文件相對(duì)簡(jiǎn)潔,容易上手和維護(hù);而 Apache 的配置文件復(fù)雜,學(xué)習(xí)成本較高。
這些差異使 Nginx 在處理高并發(fā)、靜態(tài)資源、反向代理等場(chǎng)景下更受歡迎,而 Apache 則更適用于復(fù)雜的動(dòng)態(tài)內(nèi)容管理或特定模塊需求的環(huán)境。
Nginx 默認(rèn)的配置文件路徑
在基于RHEL(如CentOS、Fedora)的Linux發(fā)行版中,使用yum安裝 Nginx后,默認(rèn)的配置文件路徑通常如下:
1.主配置文件:
?/etc/nginx/nginx.conf
這個(gè)是Nginx的主配置文件,所有的全局配置選項(xiàng)(如worker進(jìn)程數(shù)、日志文件路徑、http塊設(shè)置等)都會(huì)在這里定義。
2.站點(diǎn)虛擬主機(jī)配置目錄:
?/etc/nginx/conf.d/
這個(gè)目錄通常包含具體的站點(diǎn)虛擬主機(jī)配置文件。默認(rèn)的站點(diǎn)配置文件為:
?/etc/nginx/conf.d/default.conf
可以在這里添加、修改或刪除站點(diǎn)配置文件。
3.網(wǎng)站根目錄(默認(rèn)網(wǎng)頁(yè)目錄):
?/usr/share/nginx/html/
這是Nginx安裝后,默認(rèn)的網(wǎng)頁(yè)存放目錄。默認(rèn)的網(wǎng)頁(yè)文件(如index.html)也存放在這個(gè)路徑中。
4.日志文件路徑:
日志文件路徑可以在nginx.conf文件中通過(guò)access_log和error_log指令進(jìn)行更改。
?訪問(wèn)日志:/var/log/nginx/access.log
?錯(cuò)誤日志:/var/log/nginx/error.log
YUM安裝的默認(rèn)目錄和文件:
/etc/nginx/ # 配置文件目錄 ├── nginx.conf # 主配置文件 └── conf.d/ # 站點(diǎn)配置目錄 └── default.conf # 默認(rèn)站點(diǎn)配置文件 /usr/share/nginx/html/ # 默認(rèn)網(wǎng)站根目錄 /var/log/nginx/ # 日志文件目錄
Nginx 服務(wù)的 YUM 安裝
使用官方Y(jié)UM源
# nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
啟動(dòng)
systemctl start nginx netstat -lntp | grep nginx
查看版本、系統(tǒng)狀態(tài)、開(kāi)啟模塊等信息
nginx -v
Nginx 服務(wù)的編譯安裝
官網(wǎng)下載軟件包https://nginx.org/en/download.html。生產(chǎn)環(huán)境一般用穩(wěn)定版。
1. 關(guān)閉防火墻并上傳安裝包
1. 關(guān)閉防火墻:
systemctl stop firewalld systemctldisablefirewalld setenforce 0
2. 將 Nginx 安裝包上傳至/opt目錄:
`nginx-1.12.0.tar.gz`
2. 安裝依賴包
Nginx 的配置及運(yùn)行需要pcre、zlib、openssl等軟件包的支持,安裝這些軟件開(kāi)發(fā)包提供相應(yīng)的庫(kù)和頭文件:
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
3. 創(chuàng)建 Nginx 運(yùn)行用戶和組
Nginx 默認(rèn)以nobody身份運(yùn)行,建議創(chuàng)建專門的用戶和組來(lái)更好地控制權(quán)限:
`useradd -M -s /sbin/nologin nginx`
4. 編譯安裝 Nginx
1. 解壓 Nginx 源碼包:
cd/opt tar zxvf nginx-1.12.0.tar.gz -C /opt/
2. 進(jìn)入解壓后的目錄并配置編譯選項(xiàng):
cdnginx-1.12.0/ ./configure --prefix=/usr/local/nginx # 指定 Nginx 的安裝路徑 --user=nginx # 指定運(yùn)行 Nginx 的用戶 --group=nginx # 指定運(yùn)行 Nginx 的組 --with-http_stub_status_module # 啟用 http_stub_status_module 模塊以支持狀態(tài)統(tǒng)計(jì) #清爽版 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module ![]()
3. 編譯并安裝:
make && make install
4. 創(chuàng)建命令符號(hào)鏈接,讓系統(tǒng)可以識(shí)別nginx命令:
`ln-s /usr/local/nginx/sbin/nginx /usr/local/sbin/`
5. 管理 Nginx 服務(wù)
1. 檢查 Nginx 配置文件是否正確:
nginx -t
2. 啟動(dòng) Nginx:
/usr/local/nginx/sbin/nginx # 或 nginx -g"daemon off;" # 不要以守護(hù)進(jìn)程(daemon)模式運(yùn)行。
3. 停止 Nginx:
cat/usr/local/nginx/logs/nginx.pid # 查看 Nginx 的 PID kill-3kill-s QUIT killall -3 nginx killall -s QUIT nginx
4. 重載 Nginx 配置:
kill-1kill-s HUP killall -1 nginx killall -s HUP nginx
5. 分割日志并重新打開(kāi)日志文件:
kill-USR1
6. 平滑升級(jí) Nginx:Nginx 會(huì)啟動(dòng)新版本的可執(zhí)行文件,并且不會(huì)中斷現(xiàn)有的連接。這種方式可以實(shí)現(xiàn)平滑升級(jí)。
kill-USR2
6. Nginx 新版本平滑升級(jí)
大致步驟:
下載、解壓軟件包 -> 進(jìn)入軟件包目錄 ./configure 配置 -> make 編譯 -> 替換nginx二進(jìn)制文件 -> make upgrade
1. 解壓新版本的 Nginx 源碼包:
tar -zxvf nginx-1.xx.xx.tar.gz cdnginx-1.xx.xx
2. 配置并編譯新版本 Nginx:
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module make
3. 備份舊的 Nginx 二進(jìn)制文件并替換為新版本(objs目錄):
mv/usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old cpobjs/nginx /usr/local/nginx/sbin/nginx
4. 升級(jí) Nginx:
make upgrade # 確保當(dāng)前 Nginx 進(jìn)程是通過(guò) /usr/local/nginx/sbin/nginx 啟動(dòng)的或者先停止舊版本 Nginx,然后啟動(dòng)新版本:
killall nginx /usr/local/nginx/sbin/nginx
7. Nginx 添加系統(tǒng)服務(wù)
方法一:使用init.d添加 Nginx 系統(tǒng)服務(wù)(腳本)
1. 編輯 Nginx 啟動(dòng)腳本:
`vim /etc/init.d/nginx`
2. 填寫以下腳本內(nèi)容:
#!/bin/bash #chkconfig: - 99 20 #description: Nginx Service Control Script COM="/usr/local/nginx/sbin/nginx" PID="/usr/local/nginx/logs/nginx.pid" case"$1"in start) $COM ;; stop) kill-s QUIT $(cat$PID) ;; restart) $0stop $0start ;; reload) kill-s HUP $(cat$PID) ;; *) echo"Usage:$0{start|stop|restart|reload}" exit1 esac exit0 ![]()
3. 修改文件權(quán)限并添加為系統(tǒng)服務(wù):
chmod+x /etc/init.d/nginx chkconfig --add nginx
4. 啟動(dòng)、停止 Nginx 服務(wù):
systemctl stop nginx systemctl start nginx
方法二:使用systemd添加 Nginx 系統(tǒng)服務(wù)
1. 編輯 Nginx 的systemd服務(wù)文件:
`vim /lib/systemd/system/nginx.service`
2. 填寫以下內(nèi)容:
[Unit] Description=nginx After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/bin/kill -s HUP$MAINPID ExecStop=/bin/kill -s QUIT$MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target ![]()
3. 各個(gè)字段說(shuō)明:
?[Unit]
?Description:描述服務(wù)
?After:定義服務(wù)的依賴,網(wǎng)絡(luò)服務(wù)啟動(dòng)后再啟動(dòng) Nginx。
?[Service]
?Type=forking:Nginx 以后臺(tái)模式運(yùn)行。
?PIDFile:指定 Nginx 進(jìn)程 ID 的存放路徑。
?ExecStart:Nginx 的啟動(dòng)命令。
?ExecReload:Nginx 的重載命令。
?ExecStop:Nginx 的停止命令。
?PrivateTmp=true:為 Nginx 分配獨(dú)立的臨時(shí)空間。
?[Install]
?WantedBy=multi-user.target:設(shè)置服務(wù)在多用戶模式下啟動(dòng)。
4. 修改權(quán)限并啟動(dòng) Nginx 服務(wù):
chmod754 /lib/systemd/system/nginx.service systemctl start nginx.service systemctlenablenginx.service
Nginx 的2個(gè)進(jìn)程
查看進(jìn)程后有3個(gè)進(jìn)程,實(shí)際有2個(gè)Nginx的進(jìn)程,分別為:
master進(jìn)程:管理worker進(jìn)程,加載配置文件
worker進(jìn)程:處理連接請(qǐng)求
詳解:
ps -elf | grep nginx 1 S root 17968 1 0 80 0 - 5146 sigsus 11:27 ? 0000 nginx: master process /usr/local/nginx/sbin/nginx 5 S nginx 17969 17968 0 80 0 - 5257 ep_pol 11:27 ? 0000 nginx: worker process 0 S root 18037 15136 0 80 0 - 28206 pipe_w 11:34 pts/0 0000 grep --color=auto nginx
這三個(gè)進(jìn)程涉及 Nginx 的工作機(jī)制:
1.nginx: master process /usr/local/nginx/sbin/nginx
? 這是 Nginx 的主進(jìn)程,負(fù)責(zé)整體管理。它啟動(dòng)后會(huì)監(jiān)聽(tīng)配置文件變化,管理多個(gè)工作進(jìn)程(worker process)。主進(jìn)程本身不處理實(shí)際的請(qǐng)求,而是用于:
? 讀取和解析配置文件
? 管理子進(jìn)程(啟動(dòng)、停止、重啟等)
? 處理信號(hào)(如重載、停止等)
2.nginx: worker process
? 這些是 Nginx 的工作進(jìn)程,負(fù)責(zé)實(shí)際處理客戶端請(qǐng)求。每個(gè) worker 進(jìn)程獨(dú)立處理請(qǐng)求,包括靜態(tài)內(nèi)容、代理請(qǐng)求、負(fù)載均衡等。Nginx 使用異步的、事件驅(qū)動(dòng)的模型,所以一個(gè) worker 可以同時(shí)處理大量連接。
3.grep --color=auto nginx
? 這部分是執(zhí)行的grep命令,用于查找與 Nginx 相關(guān)的進(jìn)程。-color=auto參數(shù)會(huì)將匹配到的字符串(這里是 “nginx”)高亮顯示。
總結(jié):主進(jìn)程負(fù)責(zé)管理,工作進(jìn)程負(fù)責(zé)處理實(shí)際的請(qǐng)求。
Nginx 命令管理及進(jìn)程控制
1.啟動(dòng)與停止 Nginx
?后臺(tái)啟動(dòng) Nginx:
`nginx` AI寫代碼bash該命令啟動(dòng) Nginx 進(jìn)程并以后臺(tái)模式運(yùn)行。
?前臺(tái)啟動(dòng) Nginx:
nginx -g"daemon off;"該命令啟動(dòng) Nginx 進(jìn)程,并以前臺(tái)模式運(yùn)行。此模式主要用于調(diào)試或某些特殊場(chǎng)景。
?停止 Nginx(優(yōu)雅停止):
nginx -s quit kill-3這三種方式都可以優(yōu)雅地停止 Nginx,完成當(dāng)前連接后停止服務(wù)。nginx -s quit是通過(guò)發(fā)送信號(hào)讓主進(jìn)程優(yōu)雅停止,而kill -s QUITkill-s QUIT
2.重新加載 Nginx 配置
?重新加載配置:
這幾種方法用于在不停止 Nginx 的情況下,重新加載配置文件。nginx -s reload通過(guò)向 Nginx 主進(jìn)程發(fā)送HUP信號(hào)來(lái)重新加載配置,而kill -1
nginx -s reload kill-1kill-s HUP
3.其他進(jìn)程管理命令
?檢查配置文件語(yǔ)法:
nginx -t該命令檢查 Nginx 配置文件語(yǔ)法的正確性,并報(bào)告是否有錯(cuò)誤。
?日志文件切割(重新生成日志文件):
kill-USR1向 Nginx 主進(jìn)程發(fā)送USR1信號(hào),用于重新生成日志文件。該命令常用于日志分割,將舊的日志文件關(guān)閉并重新打開(kāi)新日志文件。
鏈接: https://blog.csdn.net/qq_44421043/article/details/142467150
-
Web
+關(guān)注
關(guān)注
2文章
1287瀏覽量
71395 -
服務(wù)器
+關(guān)注
關(guān)注
13文章
9793瀏覽量
87938 -
nginx
+關(guān)注
關(guān)注
0文章
171瀏覽量
12592
原文標(biāo)題:從Nginx小白到運(yùn)維高手:安裝配置與進(jìn)程管理實(shí)戰(zhàn)教程
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
nginx重啟命令linux步驟是什么?
nginx重啟命令linux步驟是什么?
NanoPi NEO - 可靠的Nginx 網(wǎng)絡(luò)服務(wù)器
nginx錯(cuò)誤頁(yè)面配置
主要學(xué)習(xí)下nginx的安裝配置
Apache與Nginx 簡(jiǎn)單對(duì)比 以及Nginx 基本使用方法

nginx和tomcat區(qū)別

一文讀懂Nginx、Apache工作原理
Apache Doris正式成為 Apache 頂級(jí)項(xiàng)目
Nginx入門指南
Nginx 如何實(shí)現(xiàn)高性能低消耗

評(píng)論