nginx.conf配置文件解析(http、server、location proxy_pass)

nginx.conf配置文件解析(http、server、location)

標籤: nginxnginx-conf
分類:

nginx.conf文件在安裝目錄/conf目錄下node


一、定義Nginx運行的用戶和用戶組linux

user nginx nginx;

二、nginx進程數,建議設置爲等於CPU總核心數nginx

worker_processes 1;

三、全局錯誤日誌定義類型,[ debug | info | notice | warn | error | crit ]正則表達式

#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;

四、進程文件windows

pid /var/run/nginx.pid;

五、工做模式與鏈接數上限:worker_connections是單個後臺worker process進程的最大併發連接數,併發總數是 worker_processes 和 worker_connections 的乘積, 即 max_clients = worker_processes * worker_connections服務器

events { worker_connections 1024; }

六、http下的一些配置及其意義markdown

include       mime.types; #文件擴展名與文件類型映射表 default_type application/octet-stream; #默認文件類型 sendfile on; #開啓高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來 輸出文件,對於普通應用設爲 on,若是用來進行下載等應用磁盤IO重負載應用,可設置 爲off,以平衡磁盤與網絡I/O處理速度,下降系統的負載。注意:若是圖片顯示不正常 把這個改爲off。 autoindex on; #開啓目錄列表訪問,合適下載服務器,默認關閉。 tcp_nopush on; #防止網絡阻塞 tcp_nodelay on; #防止網絡阻塞 keepalive_timeout 120; #長鏈接超時時間,單位是秒 gzip on; #開啓gzip壓縮輸出

七、server虛擬主機一些配置及其意義
這裏寫圖片描述
例如:網絡

http{
 #虛擬主機1 server{ listen 80; server_name www.nginx1.com; location / { root html; index index.html index.htm; } } #虛擬主機2 server{ listen 80; server_name localhost; location / { root html; index index.html index.htm; } } }

這裏server_name配置域名的時候,若是是本地測試,須要到windos下hosts文件裏,把你的域名和ip添加進去(C:\Windows\System32\drivers\etc\hosts)併發

nginx支持三種類型的 虛擬主機配置

  • 一、基於ip的虛擬主機, (一塊主機綁定多個ip地址)
server{ listen 192.168.1.1:80; server_name localhost; } server{ listen 192.168.1.2:80; server_name localhost; }
  • 二、基於域名的虛擬主機(servername)
#域名能夠有多個,用空格隔開 server{ listen 80; server_name www.nginx1.com www.nginx2.com; } server{ listen 80; server_name www.nginx3.com; }
  • 三、基於端口的虛擬主機(listen不寫ip的端口模式)
server{ listen 80; server_name localhost; } server{ listen 81; server_name localhost; }

server下的location映射解析(官方中文文檔:ngx_http_core_module)匹配規則:location [ = | ~ | ~* | ^~ ] uri { ... }

location URI {}:

對當前路徑及子路徑下的全部對象都生效;

location = URI {}:

精確匹配指定的路徑(注意URL最好爲具體路徑),不包括子路徑,所以,只對當前資源生效;

location ~ URI {}:

location ~* URI {}:

模式匹配URI,此處的URI可以使用正則表達式,~區分字符大小寫,~*不區 分字符大小寫;

location ^~ URI {}:

再也不檢查正則表達式

優先級:= > ^~ > ~|~* > /|/dir/

舉例:

location = / { [ configuration A ] } location / { [ configuration B ] } location /documents/ { [ configuration C ] } location ^~ /images/ { [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ { [ configuration E ] } 
解答:請求「/」匹配配置A, 請求「/index.html」匹配配置B, 請求「/documents/document.html」匹配配置C, 請求「/images/1.gif」匹配配置D, 請求「/documents/1.jpg」匹配配置E

location配置規則

一、「 =」前綴的指令嚴格匹配這個查詢。若是找到,中止搜索。
二、全部剩下的常規字符串,匹配最精確的(通常最長的那個)。若是這個匹配使用^〜前綴,搜索中止。
三、正則表達式,在配置文件中是從上往下匹配的
四、若是第3條規則產生匹配的話,結果被使用。不然,如同從第2條規則被使用
特殊狀況:
兩種狀況下,不須要繼續匹配正則 location :
( 1 ) 當普通 location 前面指定了「 ^~ 」,特別告訴 Nginx 本條普 通 location 一旦匹配上,則不須要繼續正則匹配。
( 2 ) 當普通location 剛好嚴格匹配上 ,不是最大前綴匹配,則再也不繼續匹配正則

 

在nginx中配置proxy_pass時,當在後面的url加上了/,至關因而絕對根路徑,則nginx不會把location中匹配的路徑部分代理走;若是沒有/,則會把匹配的路徑部分也給代理走。

 

下面四種狀況分別用http://192.168.1.4/proxy/test.html 進行訪問。

第一種:

location  /proxy/ {

          proxy_pass http://127.0.0.1:81/;

}

會被代理到http://127.0.0.1:81/test.html 這個url

 

第二咱(相對於第一種,最後少一個 /)

location  /proxy/ {

          proxy_pass http://127.0.0.1:81;

}

會被代理到http://127.0.0.1:81/proxy/test.html 這個url

 

第三種:

location  /proxy/ {

          proxy_pass http://127.0.0.1:81/ftlynx/;

}

會被代理到http://127.0.0.1:81/ftlynx/test.html 這個url。

 

第四種狀況(相對於第三種,最後少一個 / ):

location  /proxy/ {

          proxy_pass http://127.0.0.1:81/ftlynx;

}

會被代理到http://127.0.0.1:81/ftlynxtest.html 這個url

 

上面的結果都是本人結合日誌文件測試過的。從結果能夠看出,應該說分爲兩種狀況才正確。即http://127.0.0.1:81 (上面的第二種) 這種和 http://127.0.0.1:81/.... (上面的第1,3,4種) 這種。

hosts,本地測試

linux 修改/etc/hosts,加一條:127.0.0.1 www.you域名.cn .windows,修改hostname.

另外nginx的反向代理Tengine(Nginx的升級版)的健康檢查 也用到了location知識,能夠去看看

相關文章
相關標籤/搜索