2016-11-21 109 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更改爲新的應用程序端口。