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
按指定的file順序查找存在的文件,並使用第一個找到的文件進行請求處理
- 關鍵點2
查找路徑是按照給定的root或alias爲根路徑來查找的
- 關鍵點3
如果給出的file都沒有匹配到,則重新請求最後一個參數給定的uri,就是新的location匹配
- 關鍵點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就可以直接走這個了。