2013-05-30 102 views
4

有沒有辦法代理所有的流量到某個服務器除非該域是不同的?nginx和asterisk server_name?

基本上是*server_name屬性?

server { 
    listen 80; 
    server_name foo.com 
} 

server { 
    listen 80; 
    server_name * 
} 

或者,有沒有一種方法來設置一個「默認」的服務器,然後它會如果沒有其他特定服務器CONFIGS比賽使用它?

回答

6

由於@Valery Viktorovsky的回答說,你不能使用* server_name。您可以指定一個server塊作爲「默認」來接收所有不匹配其他請求的請求。有關說明,請參閱this post。它看起來像這樣:

server { 
    listen 80 default_server; 
    server_name wontmatch.com; # but it doesn't matter 
} 

有關更多信息,請參見the docs for server_name

7

您不能將*用於server_name。來自documentation

通配符名稱可能只在名稱的開始或結束處包含星號,並且僅在點邊界上。

但是,您可以使用正則表達式:

server { 
    server_name ~^(www\.)?(.+)$; 

    location/{ 
     root /sites/$2; 
    } 
} 
+0

爲什麼是2美元而不是1美元? – CMCDragonkai

+0

這似乎是一個錯字:它應該是$ 1。 – sanityinc

+3

$ 2是正確的,它是你想要的第二組 – Robbo

1

僅供參考,對於像我這樣誰正在尋找的東西有點不同,下面的配置將聽取和所有端口響應80請求您是否使用IP或URL(又名一切):

server { 
    listen 80 default_server; 
    server_name _; 
... 
} 

來自http://nginx.org/en/docs/http/server_names.html

在包羅萬象的服務器實例可以看到奇怪的名字「_」:

server { listen 80 default_server; server_name _; 返回444; }沒有什麼特別之處這個名字,...

您將獲得sudo service nginx restart... start的錯誤,同時/etc/nginx/sites-enabled/default符號鏈接仍然有效,因爲它使用相同的匹配模式。只要刪除該鏈接,一切都應該工作。