2016-04-25 60 views
1

後端代理,如果有我的nginx的Web服務器配置的子域名:sub.mydomain.com重寫一個子域蒙山nginx的

和我有偵聽端口5000後端服務器:http://127.0.0.1:5000

是可能將所有子域名調用傳遞給後端?

像:https://sub.mydomain.com/listhttp://127.0.0.1:5000/sub/list

這應與所有方法的工作:POST,PUT,GET,DELETE

UPDATE:

當我打電話給我的服務器:https://mysubdomain.mydomain.com

具有以下配置:

upstream http_backend { 
    server 127.0.0.1:5000; 
} 

server_name ~^(?<subdomain>[^.]+)\.mydomain\.com; 

這不起作用(錯誤:404):

location/{ 
    proxy_pass http://http_backend/$subdomain/; 

    proxy_redirect 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; 
    proxy_set_header X-Forwarded-Proto https; 
} 

這工作得很好:

location/{ 
    proxy_pass http://http_backend/mysubdomain/; 

    proxy_redirect 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; 
    proxy_set_header X-Forwarded-Proto https; 
} 

當我登錄到Access_log的$子域變量,它似乎是正確的。 nginx版本:nginx/1.9.15

回答

0

要傳遞所有子域,您需要在域名前面加上點來將其設置在服務器名稱中。

server_name .mydomain.com;

0

是的,你可以在proxy_pass使用變量。您可以使用正則表達式服務器名稱提取部分域。

server { 
    server_name ~^(?<sub>[^.]+)\.example\.com; 
    # now subdomain of example.com placed to $sub 
    # please, note, this rule do not work for http://example.com 
    location/{ 
     proxy_pass http://127.0.0.1:5000/$sub/; 
     # Path part of proxy_par URI will replace path 
     # part of location directive (so/-> /$sub/, /xxxx/ -> /$sub/xxxx/) 
    } 
} 

這就是所有:)

0

看來nginx的並不在$ URI添加到proxy_pass如果我使用$子域變量。

以下解決方案的工作原理:

location/{ 
    proxy_pass http://http_backend/$subdomain/$uri; 
    proxy_redirect 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; 
    proxy_set_header X-Forwarded-Proto https; 
}