nginx index 指令不起作用

nginx index 指令不起作用

在以下 nginx 的配置片段中:

server {
        listen 443;
        listen [::]:433;

        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

        server_name example.com;

        root /var/www/example.com;
        index index.html;
        error_page 502 = @fallback;
        error_page 404 = @not_found;

        location / {
            #try_files /index.html $uri =404; # A
            try_files $uri =404;              # B
        }

        location /service/ {
            rewrite ^/service/(.*)$ /$1 break;

            proxy_set_header X-Load-Balancer "a";
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass http://127.0.0.100:42424;
        }

        location @fallback {
            try_files /502.html =500;
        }

        location @not_found {
            try_files /404.html =500;
        }
}

为什么 A 可以正确提供 index.html(位于 /var/www/example.com/),而 B 却不能,而是提供 404.html 页面?

答案1

try_files指令按顺序处理每个术语,直到找到存在的文件。

如果文件/var/www/example.com/index.html存在,则情况 (A) 中的第一个术语将始终成功,并且 URI 将在内部更改为/index.htmlindex指令不参与。此外,情况 (A) 将总是返回/index.html文件。

在情况 (B) 中,try_files仅查找文件,并且不是目录。如果要try_files匹配目录并使用指令的值对其进行处理index,请使用带有尾随 的术语/。例如:

try_files $uri $uri/ =404;

这个文件了解详情。

相关内容