首页 > 解决方案 > Nginx 错误或功能?

问题描述

配置 1 与主机头替换:

  location /phpinfo {
    proxy_set_header Host $host;
    proxy_pass http://localhost:8000;              
  }

curl -s -o /dev/null -D - http://192.168.56.102/phpinfo
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Sun, 21 Jun 2020 13:12:05 GMT
Content-Type: text/html; charset=iso-8859-1
Content-Length: 323
Connection: keep-alive
Location: http://192.168.56.102:8000/phpinfo/

配置 2 只是 proxy_pass:

  location /phpinfo {
    proxy_pass http://localhost:8000;              
  }


curl -s -o /dev/null -D - http://192.168.56.102/phpinfo
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Sun, 21 Jun 2020 13:25:15 GMT
Content-Type: text/html; charset=iso-8859-1
Content-Length: 313
Location: http://192.168.56.102/phpinfo/
Connection: keep-alive

摘要:Linux localhost 5.4.47-0-virt #1-Alpine SMP Thu, 18 Jun 2020 14:54:31 UTC x86_64 Linux nginx 版本:nginx/1.18.0

当没有尾随斜杠定义重定向到:

http://192.168.56.102:8000/phpinfo/

预期的:

Location: http://192.168.56.102/phpinfo/

这是一个功能吗?如何解决这个问题?

标签: nginxapache2

解决方案


此行为是由后端服务器 (apache2) 引起的。当 uri 结尾没有斜杠时,它返回重定向 301。所以有2个解决方案:

  1. 更改后端服务器行为。

  2. 使用 nginx proxy_redirect 指令:

    位置 / { proxy_set_header 主机 $host; proxy_redirect http://$host:8000/ /; proxy_pass http://localhost:8000;
    }


推荐阅读