官方文件
nginx的配置放在配置檔案nginx.conf/etc/nginx/nginx.conf
中,大概的結構如下:
main # 全域性配置
}
主要有
全域性配置並不需要包含在大括號中。
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
worker_rlimit_nofile 1024;
event
http
location模組放在server模組裡面,表示乙個路由規則。
location的語法規則
location [ 空格 | = | ~ | ~* |^~|!~ | !~* ] /uri/ {}
第一部分是location關鍵字
第二部分是修飾語(modifier)
第三部分是匹配的內容
第四部分是匹配成功後處理的方法
請求目錄是指客戶端發過了的請求的uri,例如客戶端訪問其中/dir1/dir2
就是請求目錄
上面的修飾符,除了精確匹配=
和正則的匹配之外,其他都是字首匹配,也就是請求目錄的前面匹配上,就算匹配上了,不管後面的。
為了安全起見,建議正在匹配盡量加上^
和$
當多個location都可以匹配請求目錄,那麼nginx會使用哪個location呢?
如果修飾語不同,那麼修飾語的優先順序是
=
大於^~
大於~
大於~*
大於空格
location = /dir1
location ^~ /dir1
location ~ /dir\d
location ~* /dir\d
location /dir1
使用上面的配置,訪問,第乙個location優先順序最高,然後逐漸下降(可以通過注釋location來測試)。
如果修飾語一樣,會找最長匹配字串
location /
location /d
如果訪問,兩個location都會匹配上,但是第二個location會匹配到請求目錄的
/d
,長度是2,而第乙個只會匹配到/,長度是1
,前面的長度更長,所以使用第二個location。
注意這裡的長度是請求目錄的長度,不是匹配內容的長度。所以~ /\d
和~ /3
,長度是一樣的,都是長度為1。
如果匹配字串的長度一樣,使用第乙個location
location ~ /\d
location ~ /3
例如上面的配置,訪問,會返回601。
所以總結一下nginx尋找location的邏輯
根據修飾符的優先順序,從高到低,尋找匹配的location數量n
如果n==0,尋找下乙個優先順序的修飾符
如果n==1,使用該location
如果n>1,計算每個location匹配uri的最長的匹配字串長度l,能達到l的location的數量n1,
如果n1==1,返回該location
如果n1>1,返回第乙個location
如果所有location都不滿足,返回404
偽**:
modifier_list = ['=', '^~', '.......'] #修飾符的優先順序排序
def get_location(uri):
"""尋找最優的location"""
for modifier in modifier_list:
locations = get_match_location(uri, modifier) #獲取修飾符是modifier,匹配上uri的所有locations
num = len(locations)
if num == 0:
continue
elif num == 1:
return locations[0]
else:
max_length = 0
use_location = none
for location in locations:
length = get_match_uri_length(location, uri) #計算該location匹配上uri的最長匹配字串的長度
if length > max_length: #這裡是大於,不是大於等於,所以如果有多個location的length相同,會採用第乙個
use_location = location
return use_location
return 404
#root html;
#index test.html;
#精確匹配首頁
location = /
#靜態資源
#返回某個目錄下面的所有檔案
location ^~ /static/
當nginx找到最優的location來處理當前請求後,就會根據location的第四部分(大括號裡面)的指令來處理請求,並返回response。
4.1 返回靜態檔案
root和alias指令都是用來返回系統本地的問題。兩個指令的值都是本地檔案目錄,注意目錄後面要加/,例如/data/www/
例如配置:
location /static1/
location /static2/
location ~ ^/static3/(.+\.html)$
當訪問
,會返回檔案/data/nginx_test/static1/test.html
當訪問,會返回檔案
/data/nginx_test/test.html
當訪問,會返回檔案
/data/nginx_test/test.html
注意第二個是沒有static2的。
使用alias的話,如果是正則的匹配方法,就需要使用正則的捕獲功能,把括號裡面的字串賦值到變數$1中。
如果配置後,找不到檔案,可以看看error_log,會報錯105415 open() "/data/demo/demo2018/nginx_test/static1/2/test.html" failed (2: no such file or directory)
,就可以看nginx
4.2反向**
普通**
nignx會把http請求通過socket連線,**給其他程序來處理
location /static1/
使用proxy_pass指令。
fastcgi**
location /
return指令使用者之間返回response
第乙個引數是http狀態碼,
第二個引數是body
可以直接重定向,也可以返回內容給前端。
location /test/
語法:
rewrite regex replacement [flag];
該指令會把看是否uri匹配regex
,如果匹配,把replacement
替換regex
。
flag可以:
官網介紹
301和302的區別
部落格nginx配置
upstream gunicorn_pool
server
}
配置乙個upstream,gunicorn_pool。裡面有兩個服務層(130和137)
如果兩個服務層都正常,nginx會把流量根據weight值,導流到兩個伺服器。
同乙個請求中,如果nginx導流到server1,發現返回的是錯誤響應(例如502),nginx會把請求再傳送server2,相當於重試。這時會記錄server1的fail次數+1
如果再fail_timeout時間內,server1的fail次數超過max_fails,在fail_timeout時間內,nginx就不會再把其他請求導流到server1了。
Linux 學習 nginx 配置
server 1.兩個 tomcat 分別啟動在 8080 和 8081 埠 2.8080 埠下有 edu 資料夾,下面有 index.html 檔案 3.8081 埠下有 vod 資料夾,下面有 index.html 檔案 server 配置 server location vod 說明 1 表示...
nginx配置學習記錄
第1步 先將nginx安裝包壓縮到無中文名目錄下。第2步 再在該資料夾的上框框裡面輸入cmd,開啟cmd頁面,然後輸入nginx.exe就可以開啟了,但是一般的nginx會預設80埠,所以需要將電腦上其他的80埠服務關。第3步 然後再到nginx的config目錄下開啟nginx.conf檔案。第4...
nginx配置學習總結
在講訴具體的配置之前,先說下正向 與反向 的區別。正向 是乙個位於客戶端和原始伺服器 origin server 之間的伺服器,為了從原始伺服器取得內容,客戶端向 傳送乙個請求並指定目標 原始伺服器 然後 向原始伺服器轉交請求並將獲得的內容返回給客戶端。客戶端才能使用正向 而且必須要進行一些特別的設...