2016-08-19 111 views
0

我有一些本地主機子域上的nginx proxy_pass重定向問題。我有一個域「domain.com」,我想在* .localhost:9000上重定向* .domain.com上的所有請求。然後,節點將* .localhost:9000上的所有請求處理到良好的快速應用程序。Nginx代理服務器通過子域,節點虛擬主機

在nginx的的c​​onf當我嘗試以下方法:在extranet.domain.com

server { 
    server_name extranet.domain.com; 
    listen 80; 
    location/{ 
     proxy_pass http://extranet.localhost:9000; 
    } 
} 

請求也被重定向到好的快遞web應用。

有了這個:

server { 
    server_name ~^(.*?)\.domain\.com$; 
    listen 80; 
    location/{ 
     proxy_pass http://localhost:9000/$1; 
    } 
} 

快速的應用程序運行在localhost:9000手柄請求/ mysubdomainname,這implie該正則表達式是好的。

但是當我嘗試:

server { 
    server_name ~^(.*?)\.domain\.com$; 
    listen 80; 
    location/{ 
     proxy_pass http://$1.localhost:9000; 
    } 
} 

在* .domain.com返回HTTP代碼的所有請求502 爲什麼http://localhost:9000/ $ 1;作品而不是http://$1.localhost:9000; ? (所有子域均在/ etc/hosts中設置)。

在此先感謝。我完全失去了!

回答

2

當運行時未知主機名時,nginx必須使用它的own resolver。與OS提供的解析器不同,它不使用/etc/hosts文件。

+0

謝謝, 所以唯一的方法來做我想做的就是添加 服務器{server_name:subdomain1.domain.com; 聽:80; location/{ proxy_pass http://subdomain1.localhost:9000; } } for each subdomain? – Dafuck

+0

或者配置你自己的本地DNS服務器。 – VBart