我有一个在 Vagrant 开发环境中运行的 Wordpress 网站。当我加载 时http://localhost:8080
,网站可以正常显示,但是当我尝试通过 访问管理员时http://localhost:8080/wp-admin
,我被重定向到http://localhost/wp-admin/
。
这里有两件事:
- Nginx 强制使用尾部斜杠(据我所知,我不是故意这样做的,但这样做没问题)。
- 在尾随斜杠重定向中,端口丢失(这非常不好)。
我尝试添加port_in_redirect
我在其他类似问题的答案中看到的指令(老实说,使用两个值),但它没有任何改变。
知道我错过了什么吗?
答案1
在a 内部proxy_redirect
使用a 时的默认值(适应您的用例)是:proxy_pass
location
location / {
proxy_pass http://localhost:8080/;
proxy_redirect http://localhost:8080/ /;
}
由于您在 Vagrant 中使用相同的 8080 端口,因此这将匹配并删除该端口。
有两个简单的解决方案可以避免这种情况:
- 转发到 vagrant 配置中的不同端口,这样
proxy_redirect
就不匹配了。 - 禁用
proxy_redirect
使用proxy_redirect off;
。
(我知道这是 4 年前的事了,但我在测试 KeyCloak 时遇到了类似的问题,所以我希望这个答案能够帮助其他遇到这个问题的人。)
答案2
在我的情况下,浏览器在我正确设置之前缓存了重定向 URLport_in_redirect on;
语法:port_in_redirect on | off;
默认:
port_in_redirect on;
上下文:http、server、location
启用或禁用在 nginx 发出的绝对重定向中指定端口。
参考:Nginx 手册。
因此,在调试 nginx 规则时请禁用浏览器缓存。
答案3
你需要使用代理重定向修改响应头,使 localhost 重写为 localhost:8080
答案4
nginx/1.21.3 似乎不遵循自己的文档当 URI 替换不明确时进行重定向。
遵循配置使我能够使两者/wp-admin
正常工作/wp-admin/
。
server {
location = /wp-admin {
rewrite /wp-admin / break;
proxy_pass http://172.17.0.1:8000;
}
location /wp-admin/ {
proxy_pass http://172.17.0.1:8000/;
}
}
P.S.
我想为自定义端点后面的服务设置反向代理。我花了几个小时尝试禁用在没有尾部斜杠时丢失端口的静默重定向。我希望这对某些人有帮助。