【发布时间】:2022-01-22 23:59:56
【问题描述】:
我有一个 nginx 网络服务器,它代理将流量传递到我 LAN 上的不同服务。在最近更新其中一项服务后,重定向停止按预期工作。重定向背后的服务是Pi-Hole,所以我不能/不想修改网络服务的工作方式。我只想修复重定向。
我的实际 nginx 配置如下所示:
server {
listen 80;
listen [::]:80;
server_name servername.xyz localhost default;
access_log /var/log/nginx/servername-xyz.access.log;
error_log /var/log/nginx/servername-xyz.error.log;
location = /pihole {
return 301 http://servername.xyz/pihole/admin;
}
location = /pihole/ {
return 301 http://servername.xyz/pihole/admin;
}
location /pihole/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:31480/;
}
location = / {
return 418;
}
}
此配置运行良好。每次我在浏览器http://servername.xyz/pihole 中写入时,我都会自动重定向到http://servername.xyz/pihole/admin,并开始完美地使用 Pi-Hole 网络控制台。
在上次 Pi-Hole 更新中,他们做了一个小改动,破坏了重定向。现在,每次您请求 http://pi-hole.domain/admin 时,Web 控制台都会自动重定向到 http://pi-hole.domain/admin/。 注意第二个网址末尾的斜杠。
在我的配置中,这意味着以下行为:
- 我向浏览器询问
http://servername.xyz/pihole - 我收到
301并转到http://servername.xyz/pihole/admin - 在这里,我从 Pi-Hole Web 控制台获得了一个出乎我意料的重定向,它使我转到:
http://servername.xyz/admin/。 注意结尾的斜线。
当我进入第三步时,重定向不允许我进入 Pi-Hole Web 控制台。我已经尝试对规则进行一些更改,但我没有成功实现将301 指向http://servername.xyz/admin/ 以避免Pi-Hole Web 控制台重定向的目标。
【问题讨论】:
-
使用
curl -I http://servername.xyz/pihole/admin识别HTTPLocation响应标头中的确切文本,然后使用proxy_redirect进行更正。 -
太棒了@RichardSmith!它有效!
标签: nginx redirect http-status-code-301