这是我第一次在这里发帖,我希望你能解决我的问题。
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
请求传递给
在这种情况下/ webserver1不存在,因此我的网络服务器返回HTTP ERROR 404。我只想在没有/ webserver1 uri的情况下被重定向到http://www.webserver1.com,但我客户端浏览器中的URL显示为
my.nginx.proxy / webserver1
答案 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