【发布时间】:2017-11-14 13:00:24
【问题描述】:
简单的 nginx 配置
server {
listen 0.0.0.0:80;
server_name localhost 127.0.0.1;
location /en-us/ {
return 301 http://www.lego.com;
}
}
当我在curl 配置没有尾部斜杠时,/en-us 会发生这种情况。
curl -v http://127.0.0.1/en-us -o /dev/null
# HTTP/1.1 404 Not Found
我希望是 404。location 块正在使用 prefix match,因此对我来说 /en-us 与该块不匹配是有道理的。
这就是我感到困惑的地方......
相同的配置,但带有 proxy_pass
这里我使用相同的配置,但我没有返回 301,而是使用 proxy_pass。
server {
listen 0.0.0.0:80;
server_name localhost 127.0.0.1;
location /en-us/ {
proxy_pass http://www.lego.com;
}
}
现在看看当我运行相同的curl 时会发生什么。
curl -v http://127.0.0.1/en-us -o /dev/null
# HTTP/1.1 301 Moved Permanently
/en-us 上的 301 对我来说毫无意义。它正在重定向到Location: http://127.0.0.1/en-us/。
在第一个配置中,/en-us 似乎 不 匹配我的 location 块 (404)。在第二个配置中,/en-us did (301)。
- 为什么相同的位置规则在我的两个配置之间似乎匹配不同?
- 为什么第二个配置会导致 301 添加尾部斜杠?
我正在使用nginx version: nginx/1.4.6 (Ubuntu)
【问题讨论】:
-
nginx.org/r/location阅读最后一段
-
这完美地解释了它。谢谢! “如果位置由以斜杠字符结尾的前缀字符串定义,并且请求由 proxy_pass、fastcgi_pass 之一处理......然后执行特殊处理......将返回代码为 301 的永久重定向到请求的 URI 并附加斜杠 ..."
标签: nginx