2016-11-21 169 views
0

我正在与Nginx一起工作,我想知道如何将具有特定端口的所有请求重定向到子域?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:8080mydomain.com:8080blog.mydomain.com:8080服务器为运行端口8080的应用程序提供服务,并且我希望将所有这些请求重定向到blog.mydomain.com而不需要:8080

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

+0

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

回答

0

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

解决这个问题的一个简单方法是从互联网上隐藏你的应用程序,让nginx成为联系它的唯一方式。将您的应用程序配置为在localhost上进行收听(它看起来像在*0.0.0.0上收听,即所有接口)。然后,告诉nginx代理请求http://localhost:8080;


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

0

没有为您的问题两个解决方案:

如果你可以改变应用程序,那么你可以处理应用程序的HTTP请求的代码。你应该能够从头文件中获得有关端口的信息。

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