2017-06-16 68 views
1

我有工作以下罰款。nginx的端口特定子域

server { 
    listen 8080; 
    server_name sub.example.com; 

    location/{ 
     proxy_pass http://10.0.1.88:8080/; 
    } 
} 

server { 
    listen 80 default_server; 

    root /var/www/html; 

    index index.html index.htm index.nginx-debian.html; 

    server_name example.com; 
    #server_name _; 

    location/{ 
     try_files $uri $uri/ =404; 
    } 
} 
  1. http://sub.example.com:8080 =預期的結果

  2. http://example.com =預期的結果

  3. http://example.com:8080 =意想不到的結果=相同第一

第三顯示完全一樣首先 我預計它會失敗?我想要發生的是 -

a。重定向回到端口80

OR 

b。返回404

這一直做我的頭幾個小時:(

欣賞的幫助。

感謝

回答

1

this document但要特別注意一個默認服務器的概念。

無論是在你的問題server塊是默認的服務器,一個含蓄和一個明確的。在端口808接收的任何請求0(與主機名無關)將由第一個服務器塊處理。同樣,對於第二塊和端口80

如果要執行你的指令server_name,你需要創建一個新的捕獲所有server塊用listen 8080 default_server;指令,並把你的要求的動作在裏面。

例如:

server { 
    listen 8080 default_server; 
    return 301 http://example.com/; 
} 
+0

感謝您的@richard是一個真正的幫助...但它沒有引進一個問題... 現在,當使用http://sub.example.com/它顯示了http://example.com 這是否意味着我需要創建另一個服務器塊來處理這種情況? 這會得到相當長的,如果你有很多子域還是我失去了一些東西... – mybigman

+0

它無關,與子域。對於您收聽的每個端口,您都有一個隱式或顯式默認服務器。在傳統的配置中,所有的站點都會使用端口80作爲'http',這意味着只有一個服務器塊是全部。 –