3

我有一個在example.com上運行的應用程序,現在我想將所有流量重定向到www.example.com,因爲我們正在爲您的網站與Akamai的CDN合作。我的域停放在Route53中,添加了Elastic Load Balancer的CNAME的CNAME以指向* .example.com,並且正在運行nginx Web服務器,並使用以下配置。如果我使用這種配置,ELB會將實例拋出,現在domain.com運行正常,www.domain.com正常,但重定向不會發生。非WWW使用AWS Elastic Load Balancer和Nginx的www www

server { 
     listen 80; 
     server_name example.com; 
#  rewrite^ http://www.example.com$request_uri? permanent; 
     root /home/ubuntu/apps/st/public; 
     passenger_enabled on; 
} 

但我無法實現重定向。

還嘗試添加其值爲負載均衡器的cname的PTR。

試圖改變nginx的配置,你可以看到

rewrite^ http://www.example.com$request_uri? permanent;

即使這是行不通的。

只要我添加上面的行,應用程序實例就會去,而ELB會拋出堆棧。

什麼是解決方案,我一直試圖實現這一點,因爲3-4天,它現在成爲一個夜母馬,請幫助我。我還在aws論壇上發佈帖子和主題,沒有任何幫助。

+0

的ELB ISN」這裏真的是一個變數。它只是盲目地將HTTP請求轉發給實例。主機名稱無關緊要。 – jamieb 2013-04-06 16:21:16

回答

6

我對重定向有同樣的問題(使用相同的nginx conf代碼,如下所示)。

然後,我把我的重定向配置作爲最後一個服務器{}塊(在我的domain.com配置文件的末尾),並且ELB能夠再次找到實例。

我沒有看過更進,但它似乎是虛擬主機的處理是爲了做,所以當ELB打我的服務器的IP地址,它土地的第一個定義的服務器{}塊,這在我的情況是在重定向。 Nginx會拋出一個301返回碼,而ELB因爲它不是200而怪胎。

只是猜測。

所以,我的配置(上頂尖的虛擬主機,重定向是最後一個):

少/etc/nginx/sites-enabled/domain.com

server { 
    listen 80; 
    server_name domain.com; 
    ..... 
} 

server { 
    listen  80; 
    server_name www.domain.com; 
    return  301 http://domain.com$request_uri; 
} 
2

我對亞馬遜ELB不熟悉,但也許我可以幫助nginx部分。

對於你的場景,我通常在nginx中使用兩個服務器塊。一個用於處理重寫/重定向(example.com),另一個用於處理常規站點(www.example.com)。這兩個塊可以在同一個文件中。

# for redirecting only... 
server { 
    listen 80; 
    server_name example.com; 

    # re-written to www... 
    location/{ 
     rewrite ^(.*)$ $scheme://www.example.com$1 permanent; 
    } 
} 

# regular web site config here... 
server { 
    listen 80; 
    server_name www.example.com; 

    root /home/ubuntu/apps/st/public; 
    passenger_enabled on; 
    ... 
} 
+0

chue x,我嘗試了你在這裏添加的更改,但它沒有工作,當我打開網址時,顯示網頁未找到。我是否錯過了需要與上述更改一起完成的其他更改。 – mbdvg 2013-04-08 04:22:24

+0

@ManjunathBavihal - 你做了更改後是否重新啓動nginx?關於錯誤消息,有沒有提到nginx?我假設瀏覽器顯示非www網址? – 2013-04-08 09:31:27

+0

@chuex如果我在nginx中重寫或重定向ELB將該實例從ELB中拋出並使其可用 – 2013-04-08 11:30:11