NGINX修改请求uri

时间:2017-03-29 07:12:19

标签: nginx reverse-proxy nginx-location proxypass

这是我第一次在这里发帖,我希望你能解决我的问题。

SCENARIO:我想通过使用location directive和proxy_pass指令在nginx中托管多个网站。例如,我有2个外部网络服务器,名为www.webserver1.com和www.webserver2.com。

在我的nginx.conf中:

server {
    listen 80;
    server_name my.nginx.proxy;

    location /webserver1 {
    proxy_pass http://www.webserver1.com/;
    }

    location /webserver2 {
    proxy_pass http://www.webserver2.com/;
    }
}

我的网络服务器正在响应,但在请求外部网络服务器时会附加位置指令中的uri。例如,当我通过我的客户端浏览器访问时

  

my.nginx.proxy / webserver1

请求传递给

  

http://www.webserver1.com/webserver1

在这种情况下/ webserver1不存在,因此我的网络服务器返回HTTP ERROR 404。我只想在没有/ webserver1 uri的情况下被重定向到http://www.webserver1.com,但我客户端浏览器中的URL显示为

  

my.nginx.proxy / webserver1

1 个答案:

答案 0 :(得分:0)

你基本上做得对,但也许你的nginx版本是< 1.1.12。

  

在版本1.1.12之前,如果指定了没有URI的proxy_pass,则   可能会传递原始请求URI而不是更改的URI   有些情况。

只有在nginx 1.1.12及更高版本中,当您在proxy_pass参数中指定url(/)时,它们才能从请求中剥离位置。

  location /webserver1 {
    # trailing slash at end of url should replace /webserver1 with /
    # if your version of nginx is > 1.1.12
    proxy_pass http://www.webserver1.com/; 
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    # If you want to pass the original host name (my.nginx.proxy) up to 
    # webserver1, you can set the Host header.
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }

尝试更新nginx。

http://nginx.org/en/docs/http/ngx_http_proxy_module.html?#proxy_pass