2014-03-31 48 views
2

我想實現
Web應用程序應該能夠支持多個子域,而無需做出nginx的或Tomcat每任何改變一次使用新的子域名。 (我已經做了必要的修改DNS,支持通配符子域)
nginx怎麼可以添加子域名作爲參數執行proxy_pass到Tomcat時

Nginx的偵聽端口80。它確實proxy_pass到Tomcat在端口8080 nginx的應該是能夠支持多個子域名。

我目前的設置基於這個答案。但它不是傳遞參數
Nginx proxy_pass : Is it possible to add a static parameter to the URL?

每個可能的子域
dynamic_subdomain_1.localhost
dynamic_subdomain_2.localhost

nginx的設置

server { 
    listen 80 default_server; 

    server_name ~^(?<subdomain>.+)\.localhost$; 

    location/{ 
     set $args ?$args&site=$subdomain; 
     proxy_pass http://127.0.0.1:8080; 
    } 
} 

Nginx的應該追加ŧ他在子域調用Tomcat時作爲參數。

到Tomcat的呼叫應爲每個子域

http://127.0.0.1:8080?site=dynamic_subdomain_1 
http://127.0.0.1:8080?site=dynamic_subdomain_2 

我已經嘗試了上面的設置,但查詢參數始終顯示爲空,如下所示。

我應該如何改變nginx以使其成爲可能?

回答

3

答案稍微簡單一些。只需獲取子域的子字符串,並將其用作proxy_pass的參數:

server {               
    # this matches every subdomain of domain. 
    server_name .domain;           

    location/{             
    set $new_request_uri "";          
    set $subdomain ""; 

    if ($host ~* "^(.+)\.domain$") {        
     set $subdomain $1;           
     # lets assume there are args... 
     set $new_request_uri "$request_uri&subdomain=$subdomain"; 
    }                
    # if there are no args add a question mark and the subdomain argument 
    if ($args = '') {            
     set $new_request_uri "$request_uri?subdomain=$subdomain"; 
    }                

    proxy_pass http://127.0.0.1:8080$new_request_uri;    
    }                
} 

我認爲請求有或沒有參數。我認爲它解決了你的問題。

Alfredo