igo*_*gor 9 nginx redirect proxypass
我有位置
location /pass/ {
proxy_pass http://localhost:12345/;
}
Run Code Online (Sandbox Code Playgroud)
所以它应该将 url 代理http://example.com/pass/whatever
到http://localhost:12345/whatever
我不喜欢它的事情是 nginx 会自动添加斜杠
http://example.com/pass
Run Code Online (Sandbox Code Playgroud)
并http://example.com/pass/
通过 301 重定向
我怎样才能简单地避免这种行为。我想/pass
不带斜杠去另一个位置。提前致谢!
有一种特殊情况,proxy_pass
以location
in 结尾的a/
会导致自动隐式301
重定向,而无需转到后端;你必须创建一个明确的location
不带尾部斜杠的显式以避免这种情况:
\n\n如果位置由以斜杠字符结尾的前缀字符串定义,并且请求由 proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass 或 grpc_pass 之一处理,则执行特殊处理。为了响应 URI 等于此字符串但没有尾部斜杠的请求,将返回带有代码 301 的永久重定向到所请求的 URI,并附加斜杠。如果不需要这样做,可以像这样定义 URI 和位置的精确匹配:
\nRun Code Online (Sandbox Code Playgroud)\nlocation /user/ {\n proxy_pass http://user.example.com;\n}\n\nlocation = /user {\n proxy_pass http://login.example.com;\n}\n
例如,/pass
location
除了现有的之外,您还必须创建一个显式的/pass/
,否则,location /pass {return 301 /pass/\xe2\x80\xa6;}
将为您创建一个隐式的。
但是,您确定您确实想做您正在尝试做的事情吗?如果您要省略从/pass
to 的重定向/pass/
,则相对路径将不起作用。一些较新的浏览器还倾向于具有有缺陷的 UI/UX,可能不会向用户显示尾部斜杠,这可能会使在尝试解决差异问题时变得更加混乱。
小智 2
当您希望它转到另一个位置时,一个自然的解决方案是添加该位置
location /pass {
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,nginx 将在 Web 根目录中查找名为“pass”的文件。如果您不喜欢这个默认值,您可以在这个新的位置块中添加更多指令来实现这一点。
您还可以使用
location = /pass {
}
Run Code Online (Sandbox Code Playgroud)
这样 nginx 就能更快地找到匹配项。
归档时间: |
|
查看次数: |
16290 次 |
最近记录: |