Nginx入門到實戰(4)常見問題

海島發表於2019-07-02

一、相同 server_name 多個虛擬主機優先順序

#當出現虛擬主機域名相同的情況,重啟nginx時,會出現警告⚠️處理,但是並不不會阻止nginx繼續使用

server {
    listen 80;
    server_name www.baidu.com
    ...
}

server {
    listen 80;
    server_name www.baidu.com
    ...
}

...

優先選擇最新讀取到的配置檔案,當多個檔案是通過include時,檔案排序越靠前,越早被讀取

二、location 匹配優先順序

 =        #進行普通字元精確匹配,完全匹配
 ^~       #進行普通字元匹配,當前表示字首匹配
 ~\~*     #表示執行一個正則匹配()

#當程式使用精確匹配時,一但匹配成功,將停止其他匹配
#當正則匹配成功時,會繼續接下來的匹配,尋找是否還有更精準的匹配

三、try_files的使用

按順序檢查檔案是否存在

location / {
    try_files $uri $uri/ /index.php;
}

#先查詢$uri下是否有檔案存在,若存在直接返回給使用者
#若$url下沒有檔案存在,再次訪問$uri/的路徑是否有檔案存在
#還是沒有檔案存在,交給index.php處理

例:
location / {
    root /test/index.html
    try_files $uri @test
}

location @test {
    proxy_pass http://127.0.0.1:9090;
}

#訪問 / 時,檢視 /test/index.html 檔案是否存在
#若不存在,讓9090埠的程式去處理這個請求

四、alias和root的區別

location /request_path/image/ {
    root /local_path/image/;
}

#當我們訪問 http://xxx.com/request_path/image/cat.png時
#將訪問 http://xxx.com/request_path/image/local_path/image/cat.png 下的檔案

location /request_path/image/ {
    alias /local_path/image/;
}

#當我們訪問 http://xxx.com/request_path/image/cat.png時
#將訪問 http://xxx.com/local_path/image/cat.png 下的檔案

五、如果使用者真實IP

當一個請求通過多個代理伺服器時,使用者的IP將會被代理伺服器IP覆蓋

#在第一個代理伺服器中設定
    set x_real_ip=$remote_addr
#最後一個代理伺服器中獲取
    $x_real_ip=IP1

六、Nginx 常見錯誤碼

413 Request Entity Too Large    #上傳檔案過大,設定 client_max_body_size
503 bad gateway                 #後端服務無響應
504 Gateway Time-out            #後端服務執行超時 

相關文章