使用nginx路由到不同的服务器

使用nginx路由到不同的服务器,nginx,Nginx,有没有办法将nginx用作路由器,同时将请求的域保留在URL中?例如,如果我点击mysite.com,nginx路由服务器会查看URL并将流量定向到特定服务器,同时在URL中保留原始请求的域 例如 但是,即使在幕后调用了site1.mysite.com/params,用户仍会在URL中看到mysite.com/site1/params 我尝试了一下配置,但似乎得到了404 upstream site1 { server site1.mysite.com; } location /site1

有没有办法将nginx用作路由器,同时将请求的域保留在URL中?例如,如果我点击mysite.com,nginx路由服务器会查看URL并将流量定向到特定服务器,同时在URL中保留原始请求的域

例如

但是,即使在幕后调用了
site1.mysite.com/params
,用户仍会在URL中看到
mysite.com/site1/params

我尝试了一下配置,但似乎得到了404

upstream site1 {
  server site1.mysite.com;
}

location /site1 {
  rewrite ^(.*)$ /$1 break;
  proxy_pass  http://site1;
  proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
  proxy_redirect off;
  proxy_buffering off;
  proxy_set_header        Host            $host;
  proxy_set_header        X-Real-IP       $remote_addr;
  proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
}

使用带有尾随斜杠的位置,删除重写,并使用带有uri的
/
代理传递。Nginx将采用
/
替换
/site1/
。此外,您可能需要将
Host
标题设置为
site1.mysite.com
而不是
$Host

location /site1/ {
  proxy_pass  http://site1/;
  proxy_set_header Host site1.mysite.com;
  ...
}

这似乎将我重定向到mysite.com:random port除了我的上一条评论外,如果我手动将端口80键入初始URL,它会起作用,有什么办法可以解决吗?你应该将端口放到上游定义
服务器site1.mysite.com:80是的,当我尝试这样做时,同样的问题:/。也许它是缓存的。端口80是默认值。尝试清除浏览器缓存
location /site1/ {
  proxy_pass  http://site1/;
  proxy_set_header Host site1.mysite.com;
  ...
}