gpt4 book ai didi

http - nginx 和带有代理传递的尾部斜线

转载 作者:可可西里 更新时间:2023-11-01 15:08:37 25 4
gpt4 key购买 nike

我正在为 nginx 1.4.1 使用以下配置:

server {    listen       8000;    server_name  correct.name.gr;    location /test/register {        proxy_set_header X-Forwarded-Host $host;        proxy_set_header X-Forwarded-Server $host;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        proxy_pass http://127.0.0.1;    }}

我想做的是,当用户访问 http://correct.name.gr:8000/test/register/ 时,他们应该被代理到运行在端口 80 上的 apache。

当我访问 http://correct.name.gr:8000/test/register/ 时,我得到了正确的结果 (index.php)。当我访问 http://correct.name.gr:8000/test/register/asd 时,我得到了正确的结果(来自 apache 的 404)。当我访问 http://correct.name.gr:8000/test/asd 时,我得到了正确的结果(来自 nginx 的 404)。当我访问 http://correct.name.gr:8000/test/register123 时,我得到了正确的结果(来自 apache 的 404)。

问题出在我访问 http://correct.name.gr:8000/test/register 时。我收到 301 响应,我被重定向到 http://localhost/test/register/(注意尾部斜杠,当然还有“localhost”)!!!

我没有对 nginx 进行任何其他配置来放置尾部斜杠或类似的东西。你知道问题出在哪里吗?我希望 http://correct.name.gr:8000/test/register 通过代理到 apache 正常工作(或者如果不可能至少发出 404 错误而不是重定向到本地主机用户)。

更新 1:我在另一台计算机上尝试了 http://correct.name.gr:8000/test/register昨天的行为.. 好吧,它奏效了:我刚刚收到一个 301 响应,将我指向正确的 http://correct.name.gr:8000/test/register/!怎么可能在一台计算机上工作而不在另一台计算机上工作(我在两台计算机上使用相同的浏览器 Chrome)?明天我会再试一次,从第三方进行测试以查看行为。

谢谢!

最佳答案

我的猜测是您的上游服务器(apache 或您的脚本)触发了重定向到绝对 url http://localhost/test/register/ .因为你用 http://127.0.0.1在你的proxy_pass指令,nginx 找不到匹配的域名并返回 Location header 原样。

我认为正确的解决方案是在重定向到内部 URL 时不使用绝对重定向。这始终是一个好习惯。

但是,在不更改上游服务器的情况下,有两个快速解决方案。

你可以使用

proxy_pass http://localhost;

这会告诉nginx upstream 的域名是localhost .然后nginx就会知道替换http://localhost通过 http://correct.name.gr:8000当它在 Location 中找到该部分时来自上游的 header 。

另外一个是加一个proxy_redirect强制 nginx 使用 http://localhost/ 重写任何位置 header 的行

 proxy_pass http://127.0.0.1;
proxy_redirect http://localhost/ /;

我更喜欢第一个解决方案,因为它更简单。使用 proxy_pass http://localhost; 没有 DNS 查找开销因为 nginx 在启动 web 服务器时会提前进行查找。

引用:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

关于http - nginx 和带有代理传递的尾部斜线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17422558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com