服务器重定向时如何配置nginx

服务器重定向时如何配置nginx,nginx,Nginx,我将我的Nginx配置为将/doc定位到我的一个本地服务器,如下所示: location /doc { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Pro

我将我的Nginx配置为将/doc定位到我的一个本地服务器,如下所示:

  location /doc {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://127.0.0.1:8000;
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header   X-Forwarded-Proto $scheme;
  }

然后,8000端口上的服务器将重定向到/message/html

这就是问题所在……
正确的URL应该是/doc/message/html


如何配置我的Nginx将/redirected\u by\u port\u 8000\u服务器的URL重定向到location/doc块中的/doc/redirected\u by\u port\u 8000\u服务器,您必须重写URI。在nginx中,您可以通过在
proxy\u pass
语句末尾添加
/
来传递URI开头的
/doc
。它看起来像下面。使得
http://whatever/doc
->
http://127.0.0.1:8000/doc

proxy_pass http://127.0.0.1:8000/;
但是,下一个代理应该自己重写
/doc
路径,并将其添加到其开头。在nginx中,它看起来像

location /doc {
    rewrite ^/(.*) /$1/message/html/ break;
    proxy_pass http://127.0.0.1:8000/;
}

非常感谢@Richard Smith。 我使用了curl-I检查了重定向位置,并在下面更改了我的Nginx配置文件:

  location /doc {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://127.0.0.1:8000;
        proxy_redirect https://$http_host https://$http_host/doc; #this will rewrite the redirect Location header
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header   X-Forwarded-Proto $scheme;
  }

看看指令。使用
curl-I
确定需要匹配的
位置
响应头的确切值。