【问题标题】:Routing to different servers with nginx使用 nginx 路由到不同的服务器
【发布时间】:2014-05-05 09:51:54
【问题描述】:

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

例如

mysite.com/site1/params
Router -> site1.mysite.com/params

但即使在幕后调用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;
}

【问题讨论】:

    标签: nginx


    【解决方案1】:

    使用带有斜杠的位置,删除重写并将proxy_pass/ 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,它就可以工作,有什么办法可以解决这个问题吗?
    • 你应该把端口放到上游定义server site1.mysite.com:80;
    • 是的,当我尝试时同样的问题:/。也许它被缓存了。
    • 糟糕。端口 80 为默认值。尝试清除浏览器缓存
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 2019-12-02
    • 1970-01-01
    • 2020-08-31
    相关资源
    最近更新 更多