nginx(1):原理
學(xué)習(xí)自:Nginx教程(小白必看,看了必會(huì),不看血虧),-CSDN博客
《nginx經(jīng)典教程》
0、nginx指令
執(zhí)行nginx命令,要先進(jìn)入到nginx的sbin目錄下。
或者將該目錄加入到PATH中:export PATH=$PATH:/usr/local/nginx/sbin
nginx -s stop:快速關(guān)閉ng,并終止web服務(wù),可能不會(huì)保存相關(guān)信息。
nginx -s quit:優(yōu)雅關(guān)閉ng,有安排地結(jié)束web服務(wù)(先等待Worker進(jìn)程處理完畢當(dāng)前的連接請(qǐng)求)。
nginx -s reload:重載配置文件
nginx -s reopen:重啟日志文件
nginx -c filename:為ng指定一個(gè)新conf文件,而非使用默認(rèn)conf。
nginx -t:不運(yùn)行ng,只是檢測(cè)conf文件(語法正確性、某些文件能否打開)。
nginx -v:ng版本
nginx -V:ng版本、編譯器版本、配置參數(shù)
1、nginx基本概念
1)簡(jiǎn)介
nginx是一個(gè)反向代理服務(wù)器,具有強(qiáng)并發(fā)、少內(nèi)存占用的優(yōu)點(diǎn)。
2)代理:C端和S端中間的一個(gè)服務(wù)器,可以代表任何一端去獲取另一端的網(wǎng)絡(luò)信息,避免該端直接訪問另一端。
①正向代理
C端通過代理訪問某個(gè)具體的S端,此時(shí)S端不知道真實(shí)的C端地址。
常見應(yīng)用:VPN

②反向代理
S端通過代理接收C端請(qǐng)求,再將請(qǐng)求轉(zhuǎn)發(fā)到內(nèi)網(wǎng)中的具體服務(wù)器上,再將該服務(wù)器上的得到的結(jié)果返回給C端。此時(shí)C端不知道哪臺(tái)S是真正提供服務(wù)的S端,而是由代理服務(wù)器根據(jù)路由規(guī)則轉(zhuǎn)發(fā)到相應(yīng)的原始服務(wù)器。
反向代理中,用戶訪問的是代理IP(nginx服務(wù)器),而非最終的S端IP。
常見應(yīng)用:nginx。

不論正向代理還是反向代理,后端的服務(wù)器一般都看不到初始請(qǐng)求發(fā)起的IP,通常該項(xiàng)會(huì)通過一定策略保存在HTTP請(qǐng)求頭中。
③區(qū)別
用戶設(shè)置
- 正向代理需要我們主動(dòng)設(shè)置服務(wù)器IP或域名進(jìn)行訪問,返回的訪問內(nèi)容也是這些服務(wù)器上的;
反向代理對(duì)用戶沒有任何設(shè)置要求,也是訪問服務(wù)器的IP或域名,但是服務(wù)器會(huì)自動(dòng)根據(jù)訪問內(nèi)容進(jìn)行跳轉(zhuǎn)+內(nèi)容返回,最終訪問的服務(wù)器是未知的。
代理對(duì)象
- 正向代理——為C端做代理,幫助C端訪問其無法訪問的S端資源;
- 反向代理——為S端做代理,幫助S端做負(fù)載均衡、安全防護(hù)。
可見性
- 正向代理——為C端做代理,為C端收發(fā)請(qǐng)求,使S端看不到真實(shí)的C端;
- 反向代理——為S端做代理,為S端收發(fā)請(qǐng)求,使C端看不到真實(shí)的S端;
網(wǎng)段
- 正向代理——Proxy和C端位于同一個(gè)LAN,對(duì)S端透明;
- 反向代理——Proxy與S端位于同一個(gè)LAN,對(duì)C端透明。
3)nginx功能
①反向代理
②負(fù)載均衡
nginx通過它的http塊下的upstream塊實(shí)現(xiàn)負(fù)載均衡。
單個(gè)Web服務(wù)器不能承載日益增長(zhǎng)的并發(fā)請(qǐng)求量,因此我們需要不斷擴(kuò)張Web應(yīng)用服務(wù)器來支持更高的并發(fā)請(qǐng)求,并將請(qǐng)求均勻分配到各個(gè)應(yīng)用服務(wù)器上,此為負(fù)載均衡。
nginx提供的負(fù)載均衡策略有2種:內(nèi)置、擴(kuò)展。
內(nèi)置:一些內(nèi)置的負(fù)載均衡策略——輪詢、加權(quán)輪詢、IP hash。
擴(kuò)展:根據(jù)需要自己寫負(fù)載均衡算法并實(shí)現(xiàn)。
③動(dòng)靜分離
為了加快網(wǎng)站解析速度,將動(dòng)態(tài)頁面、靜態(tài)頁面交給不同服務(wù)器來解析,加快解析速度,降低單個(gè)服務(wù)器的壓力。
Nginx的靜態(tài)處理能力很強(qiáng),但是動(dòng)態(tài)處理能力不足,因此實(shí)際應(yīng)用中常用動(dòng)靜分離技術(shù)。對(duì)于靜態(tài)資源如圖片、JS、CSS等文件,可以放在nginx服務(wù)器中緩存。這樣瀏覽器在請(qǐng)求一個(gè)靜態(tài)資源時(shí),nginx就可以直接處理,無需將請(qǐng)求轉(zhuǎn)發(fā)給后端服務(wù)器tomcat。
對(duì)于動(dòng)態(tài)資源,比如servlet,jsp則轉(zhuǎn)發(fā)給Tomcat服務(wù)器處理,從而實(shí)現(xiàn)動(dòng)靜分離。
例如,將靜態(tài)文件放在一個(gè)單獨(dú)的Web服務(wù)器上。

2、nginx源碼結(jié)構(gòu)
從nginx官網(wǎng)下載的nginx.tar.gz壓縮包,解壓后(此時(shí)還未編譯安裝)的nginx目錄下有如下文件目錄:

布局是從上往下、從左往右、先大寫后小寫的形式。
部分常用文件及目錄的功能(nginx經(jīng)典教程 12頁):
- auto:安裝過程中配置環(huán)境所用到的自動(dòng)化腳本。
- CHANGES:版本歷史及更新紀(jì)要
- CHANGES.ru:俄文版版本歷史
- conf:配置目錄
- configure:編譯過程的總驅(qū)動(dòng)
- contrib:必要的功能腳本或可導(dǎo)入配置
- html:默認(rèn)頁面(index.html)和錯(cuò)誤頁面(50x.html)所在目錄
- logs:日志目錄
- sbin:nginx命令目錄(啟停nginx)
- src:源碼目錄
一些常用目錄及文件的具體說明
auto
存放一些自動(dòng)化腳本,用于實(shí)現(xiàn)nginx自動(dòng)化安裝、環(huán)境配置。
configure
編譯nginx的自動(dòng)化配置腳本,是編譯過程的總驅(qū)動(dòng),該腳本運(yùn)行完畢會(huì)生成部分C代碼,同時(shí)生成Makefile文件。
conf
存放nginx的配置文件,這些文件在安裝之后會(huì)被復(fù)制到目錄/usr/local/nginx/conf目錄下。
配置文件以conf結(jié)尾,有的文件以.default結(jié)尾,代表備份,方便恢復(fù)初始狀態(tài)。
該目錄下的文件有5種類型:
fastcgi*:包含F(xiàn)astCGI相關(guān)參數(shù)的配置;
mime.types:媒體類型的文件;
nginx.conf:NGINX默認(rèn)主配置文件;
scgi_params:包含SCGI相關(guān)參數(shù)的配置;
uwsgi_params:包含uWSGI相關(guān)參數(shù)的配置。
其中FastCGI、SCGI、uWSGI具有結(jié)合外部應(yīng)用的能力。
關(guān)于nginx.conf的詳細(xì)說明,見nginx:配置文件(nginx.conf)各項(xiàng)說明 - ShineLe - 博客園
conf文件中以default為后綴的文件代表備份文件,方便恢復(fù)剛安裝好nginx時(shí)這些文件的初始配置
html:默認(rèn)的站點(diǎn)目錄——首頁、錯(cuò)誤頁面
logs:日志
sbin:nginx服務(wù)命令——重啟、關(guān)閉、啟動(dòng)、狀態(tài)
src:NGINX的源碼目錄
3、nginx安裝
第2步只是實(shí)現(xiàn)了從官網(wǎng)安裝nginx.tar.gz壓縮包文件,要想使用nginx還要安裝,安裝過程見:
Linux:安裝部署Tomcat和Nginx - ShineLe - 博客園
4、nginx進(jìn)程結(jié)構(gòu)
nginx進(jìn)程空間由一個(gè)Master進(jìn)程和多個(gè)Worker進(jìn)程組成。
M負(fù)責(zé)讀取、評(píng)估配置,并維護(hù)W進(jìn)程。
W負(fù)責(zé)實(shí)際工作,處理具體的請(qǐng)求。
nginx采用的是事件驅(qū)動(dòng)機(jī)制,會(huì)給每個(gè)Worker進(jìn)程有效地分配請(qǐng)求。
W進(jìn)程的數(shù)量可以在配置文件中自定義(worker_processes),也可以用默認(rèn)值,即可用的CPU內(nèi)核數(shù)。
5、nginx指令的作用機(jī)制
在第0節(jié):指令中,給出了一些常用的nginx指令:
nginx -s quit,優(yōu)雅關(guān)閉ng。之所以稱為優(yōu)雅,是因?yàn)榇藭r(shí)quit不會(huì)導(dǎo)致M立即退出,而是會(huì)等待Worker進(jìn)程處理完畢當(dāng)前的連接請(qǐng)求之后再退出。
nginx -s reload,系統(tǒng)會(huì)給M進(jìn)程發(fā)送reload信號(hào)。當(dāng)M收到了reload之后,會(huì)檢查新配置文件的語法有效性,并嘗試送新配置。順利的話,M會(huì)啟動(dòng)新的W,并向舊W發(fā)送消息,請(qǐng)求它們關(guān)閉。失敗的話,M會(huì)回滾更新并繼續(xù)用舊配置。
W在收到關(guān)閉命令之后,會(huì)停止就收新連接并繼續(xù)服務(wù)當(dāng)前請(qǐng)求,直到所有當(dāng)前請(qǐng)求都得到服務(wù),此時(shí)舊W退出。
有時(shí)我們也會(huì)用kill命令給進(jìn)程發(fā)信號(hào),這個(gè)命令中會(huì)直接寫明進(jìn)程ID,信號(hào)會(huì)被發(fā)給這個(gè)ID對(duì)應(yīng)的進(jìn)程(M或W),而非統(tǒng)一發(fā)給M。
kill -s QUIT 28622
如果28622對(duì)應(yīng)W進(jìn)程,那么該W會(huì)直接退出。但由于M會(huì)自動(dòng)檢測(cè)并保證W狀態(tài),所以新的W會(huì)被拉起。
如果28622對(duì)應(yīng)M進(jìn)程,那么相當(dāng)于執(zhí)行nginx -s quit,nginx會(huì)優(yōu)雅終止所有W,之后nginx自身也會(huì)終止。
在第0節(jié):指令中,nginx后跟的參數(shù)有-s -c -t,但其實(shí)可用的不止這些,具體可以通過nginx -h查看。
-s代表signal,表明會(huì)向M節(jié)點(diǎn)發(fā)一個(gè)指令。
-c代表configuration,代表指定配置文件。
-g代表global,允許我們以命令行的方式自定義conf文件中的global塊,如worker_processes、user、error_log。
6、例子
Web服務(wù)器的一個(gè)重要任務(wù)是提供靜態(tài)文件Web服務(wù)(HTML頁面、圖像)。
本例通過修改conf文件實(shí)現(xiàn),不同請(qǐng)求從不同的本地目錄獲取文件內(nèi)容:從/data/www獲取HTML靜態(tài)頁面、從data/images目錄獲取圖像。
1)創(chuàng)建/data/www,放入index.html文件,創(chuàng)建/data/images:
mkdir -p /data/www mkdir /data/images cp /usr/local/nginx/html/index.html /data/www
2)新建配置文件/root/nginx.conf
user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
location / {
root /data/www;
}
location /images/{
root /data;
}
}
}
一個(gè)conf可以有多個(gè)server塊,它們通過listen和server_name進(jìn)行區(qū)分。
NGINX會(huì)根據(jù)請(qǐng)求的host、URL來決定由哪個(gè)server塊下的哪個(gè)location塊來處理。
上文用location /和location /images/來讓nginx服務(wù)器分別匹配URI中以/和/images/開頭的匹配項(xiàng)。
nginx匹配時(shí)會(huì)選擇具有最長(zhǎng)前綴的location塊。因此location /只有當(dāng)其他所有l(wèi)ocation都無法匹配到時(shí)會(huì)使用。
3)啟動(dòng)nginx
去nginx的sbin目錄下,依次執(zhí)行以下命令:
./nginx -c /root/nginx.conf #使用我們剛剛建立的這個(gè)nginx conf文件 ./nginx -s reload
4)測(cè)試
打開本地瀏覽器,輸入http://192.168.10.11:80,出現(xiàn)如下nginx提示頁面,代表nginx成功啟動(dòng)


浙公網(wǎng)安備 33010602011771號(hào)