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就可以直接走这个了。

你可能感兴趣的:(#,nginx,开源)