【问题标题】:Nginx redirect *:port to subdomainNginx 重定向 *:port 到子域
【发布时间】:2017-04-04 23:46:16
【问题描述】:

我正在使用Nginx,我想知道如何将具有特定端口的所有请求重定向到子域?

这是我的default.conf:

server{
        listen 80 default_server;
        server_name localhost;

        location / {
                root /usr/share/nginx/html;
        }
}

server{
        listen 80;
        server_name blog.mydomain.com;

        location / {
                proxy_pass   http://my-ip:8080;
        }
}

因此,我有默认的 mydomain.com 为 html 文件夹提供服务,而一个子域 blog.mydomain.com 为运行端口 8080 的应用程序提供服务。

我的问题是,当我尝试直接访问 my-ip:8080、mydomain.com:8080 或 blog.mydomain.com:8080 时,服务器为运行端口 8080 的应用程序提供服务,我想将所有这些请求重定向到 blog.mydomain.com,而不使用 :8080。

我该怎么做?如果我在 url 中指定 :8080 会自动重定向到 blog.mydomain.com 吗?

【问题讨论】:

  • 你解决了这个问题?我们的回答有帮助吗?

标签: redirect mod-rewrite nginx


【解决方案1】:

当您使用my-ip:8080 或mydomain.com:8080 时,您直接调用您的应用程序,而不是nginx。我在这里看到的问题不是“我的 webapp 没有重定向到 nginx”,而是“我有一个代理,但我的 webapp 可以直接从 Internet 访问”。

解决此问题的一种干净方法是将您的应用程序从互联网上隐藏起来,并让 nginx 成为联系它的唯一方式。将您的应用程序配置为侦听localhost(看起来它侦听* 或0.0.0.0,表示所有接口)。然后,告诉 nginx 将请求代理到http://localhost:8080;。


如果你真的想让你的应用程序监听*:8080,你可以在 nginx 中添加一个 HTTP 头(比如X-Forwarded-For 和proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;)并在你的应用程序中检测它。没有它,重定向到 nginx。请注意,任何人都可以添加 HTTP 标头...

【讨论】:

    【解决方案2】:

    您的问题有两种解决方案:

    如果您可以更改应用程序的代码,那么您可以在应用程序中处理 HTTP 请求。您应该能够从标头中获取有关端口的信息。

    如果您不能更改应用程序的代码,但您可以更改应用程序正在侦听的端口,那么您可以在 nginx 中进行重定向。为此,您需要在 nginx 中开始监听 8080 端口并将其重定向到 80,然后在 80 端口上将 proxy_pass 更改为应用程序的新端口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-14
      • 2018-09-13
      • 2017-07-14
      • 1970-01-01
      • 2014-01-13
      • 2015-08-26
      • 2015-12-14
      • 2012-12-03
      相关资源
      最近更新 更多