如何解决在没有指定精确匹配位置的情况下,如果缺少尾随斜杠,如何防止 Nginx 中的 301 重定向?
我知道这当然不是什么新鲜事,但我能找到的每个现有答案都略有不同/实际上并没有实现我所追求的目标。我正在编写一个反向代理作为 Docker-compose 设置的一部分,以便可以提供多个 SPA,每个 SPA 都在自己的容器中运行。首先,我的配置(或多或少):
server {
listen 8080;
server_name localhost;
error_log /var/log/nginx/error.log debug;
rewrite_log on;
resolver 127.0.0.11;
absolute_redirect off;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location ~* ^/app/([a-z-]+) {
proxy_pass http://spa-app-$1:8080;
proxy_set_header True-Host localhost;
}
}
如果我请求 localhost:8080/app/reservations/
,它工作正常,我得到一个标准的 200(代理到名为 spa-app-reservations
的正在运行的容器)。但是,如果我在没有尾部斜杠的情况下发出相同的请求,它会尝试使用 301 将我重定向到 http://spa-app-reservations:8080/app/reservations/
。 absolute_redirect
在服务器配置中只是一个尝试,似乎没有做任何事情。我真的宁愿不为 with 和 without 斜线创建多个条目,因为我有多个我需要的位置块 - 有些是前缀字符串,有些是是正则表达式匹配。它只是开始变得混乱,里面有很多重复。
末尾带斜杠的相同位置正则表达式显然给出了相同的结果。我在这里缺少什么?我的理解是否正确,如果我要更改为前缀字符串而不是正则表达式并执行以下操作:
location /app/reservations/ {
proxy_pass http://spa-app-reservations:8080;
proxy_set_header True-Host localhost;
}
它会按预期工作吗?我无法解释文档中的以下含义:
如果某个位置由以斜杠字符结尾的前缀字符串定义,并且请求由 proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass 或 grpc_pass 之一处理,则执行特殊处理。为了响应 URI 等于该字符串但没有尾部斜杠的请求,将返回一个带有代码 301 的永久重定向到所请求的 URI,并附加斜杠。
这是否明确表示我避免重定向到代理 URL 的唯一选择就是创建一个具有完全相同配置的额外显式前缀字符串?这似乎是一个可以以更简洁的方式解决的问题。
感谢所有帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。