NGINX——nginx的default_server和try_files



log_format log '"$remote_addr" - "$remote_user" [$time_local] "$request" '
               '"$status" "$body_bytes_sent" "$http_referer" '
               '"$http_user_agent" "$http_x_forwarded_for" "$cookie_JSESSIONID" "$host" "$upstream_addr" "$upstream_status" "$upstream_response_time" "$request_time" "$request_body" "$cookie__ver"';
server {
    listen       80;
    server_name  www.test.com;
    access_log /dev/stdout log;  //重點解釋1
    error_log /dev/stdout;

        location / {
        root   /www;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html =404;   //重點解釋2
    }
}


server {
    listen       80 default_server;   //重點解釋3 
    access_log /dev/stdout log;
    error_log /dev/stdout;

    location / {
        root   /www;
        index  index.html index.htm;
    }
}

1、
/dev/stdout 標準輸出 作用:日誌輸出docker日誌中,而不輸入到具體的文件中
/dev/stdin 標準輸入
/dev/stderr 標準錯誤
/dev/null 不輸入輸出
2、
try_files $uri $uri/ /index.html =404; 根據查詢文件的路徑查詢文件,假如找不到則404默認是index.html文件
參數詳細解釋:
try_files 查找文件
$uri 查詢的url
$uri/ 找到具體的url及其下一層的具體的文件
/index.html =404 找不到文件,則直接返回index.html文件,假如 index.html也沒有找到,則直接返回狀態碼404。

  1. 關鍵點1

按指定的file順序查找存在的文件,並使用第一個找到的文件進行請求處理

  1. 關鍵點2

查找路徑是按照給定的root或alias爲根路徑來查找的

  1. 關鍵點3

如果給出的file都沒有匹配到,則重新請求最後一個參數給定的uri,就是新的location匹配

  1. 關鍵點4

如果是格式2,如果最後一個參數是 = 404 ,若給出的file都沒有匹配到,則最後返回404的響應碼

server {
    listen       80;
    listen       443;
    server_name  www.test.cn ;
    access_log /dev/stdout log;
    error_log /dev/stdout;

        location / {
        root   /www;
        index  index.html index.htm;
        try_files $uri $uri/  @default;  //這樣寫就不會在找不到路徑的時候默認加載index.html,
                                         //而是直接會返回狀態4040
        }

  location @default {
             return 404;
        }
}

3、
default_server指令定義默認的server出處理一些沒有成功匹配server_name的請求,如果沒有顯示定義,則會選取第一個定義的server作爲default_server。比如當你訪問的地址爲 ip 的時候,這時候指定的server_name爲域名肯定是不匹配的,設置上default_server就可以直接走這個了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章