我如何使用 Nginx 对以斜杠结尾的 URL 进行 301 重定向?

How can I do a 301 redirect towards an URL ending in a slash with Nginx?

我有一个 nginx 网络服务器,它代理传递流量到我 LAN 上的不同服务。在最近更新其中一项服务后,重定向将按预期停止工作。重定向背后的服务是 Pi-Hole,所以我不能't/wan 修改 Web 服务的工作方式。我只想修复重定向。

我的实际 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/注意第二个末尾的斜线URL。

在我的配置中,这意味着以下行为:

  1. 我向浏览器请求http://servername.xyz/pihole
  2. 我得到 301 然后去 http://servername.xyz/pihole/admin
  3. 在这里,我从 Pi-Hole 网络控制台得到了一个我不期望的重定向,它让我转到:http://servername.xyz/admin/注意结尾的斜杠。

当我进行到第三步时,重定向不允许我进入 Pi-Hole Web 控制台。我已尝试对规则进行一些更改,但我没有成功 objective 获得 301 朝向 http://servername.xyz/admin/ 以避免 Pi-Hole 网络控制台重定向。

非常感谢 Richard's Smith 评论。它让我修复配置文件。现在文件中的 proxy_pass 操作如下所示:

location /pihole/ {
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_pass http://127.0.0.1:31480/;
  proxy_redirect http://servername.xyz/admin/ http://servername.xyz/pihole/admin/;
}

包含 proxy_redirect 指令后,事情又开始了。