gpt4 book ai didi

nginx - 为什么 try_files 指令在根和文件名之间缺少斜线?

转载 作者:行者123 更新时间:2023-12-01 04:28:44 28 4
gpt4 key购买 nike

我正在尝试将 Nginx 设置为反向代理,但也可以自己处理单个静态页面(问候语):

root /usr/share/project/;
location = / {
try_files index.html =404;
}

这个配置总是返回 404。当我试图弄清楚到底发生了什么时,我重写了 try_files 指令以使其失败:
try_files index.html index.html;

并对我在 error.log 中看到的内容感到惊讶:

2019/05/07 17:30:39 [error] 9393#9393: *1 open() "/usr/share/projectindex.html" failed (2: No such file or directory), client: 10.25.88.214, server: , request: "GET /index.html HTTP/1.1"



如您所见,结果文件名为 projectindex.html。斜线被遗漏了。我试图在不同的地方添加/和 ./但它没有导致任何结果。

最后,我通过以下方式替换我的配置:
root /usr/share/project/;
location = / {
try_files /index.html =404;
}
location = /index.html {
}

它有效。

我不明白第一个配置有什么问题。而且我也不明白空位置的含义:
location = /index.html {
}

以及为什么它可以正常工作。

也许有更好的方法来做同样的事情?

最佳答案

root可以选择采用尾随 / - 没关系,它被忽略了。
try_files 的文件元素语句(与 Nginx 中的所有 URI 一样)需要一个前导 / .见 this document详情。

例如:

root /usr/share/project;
location = / {
try_files /index.html =404;
}
location / {
proxy_pass ...;
}

这是有效的,因为 URI 在内部被重写为 /index.html并在 内处理同一地点 .

如果您使用 index指令,URI 在内部被重写为 /index.html并且 Nginx 将搜索匹配的位置来处理请求。在这种情况下,您需要另一个位置来处理请求。

例如:
root /usr/share/project;
location = / {
index index.html;
}
location = /index.html {
}
location / {
proxy_pass ...;
}

空位置块继承了 root 的值从外部块。 index无论如何,statement 都是默认值,所以严格来说,您也不需要指定该语句。请注意 index 的值指令 不要需要领先 / .见 this document详情。

关于nginx - 为什么 try_files 指令在根和文件名之间缺少斜线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56033243/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com