Nginx

NGINX 將所有域重定向到一個,但不重定向伺服器自己的公共和私有 IP 地址

  • December 28, 2012

我無法找到與我的特定情況相匹配的問題,所以希望這不是重複的,如果是這樣,我深表歉意。

我在負載均衡器後面有 4 個 Web 伺服器。我只希望 www.mydomain.com、123.123.123.123(我的伺服器的公共 IP 地址)和 456.456.456.456(我的伺服器的內部網路 IP 地址)工作,其他任何東西都應該重定向到 www.mydomain.com

原因:我需要將所有內容髮送到 www.mydomain.com,因為我們已經有人設置了指向我們 IP 地址的其他域 (www.otherdomain.com),所以它就像我們網站的鏡像。我們不知道他們為什麼這樣做,但Google開始抓取他們的網站,就好像它完全是一個不同的網站,這會造成麻煩。我需要允許伺服器的 IP 地址通過,因為我們通過自定義 API 將其用於內部伺服器聊天,以繞過負載平衡器。

我能夠找到的唯一解決方案要麼將包括 IP 地址在內的所有內容重定向到 www.mydomain.com,要麼最終什麼都不重定向。

這是我目前的配置(為簡單起見被截斷):

server {
   listen 80;
   server_name www.mydomain.com 123.123.123.123 456.456.456.456;
}

server {
   listen 80 default;
   server_name _;
   rewrite ^ http://www.mydomain.com$request_uri?;
}

預期:對正確域或任一 IP 地址的請求與第一條規則匹配。所有其他請求都匹配第二條規則並被重定向。實際:我假設根本沒有任何東西被重定向,因為 NGINX 只是將 IP 地址與第一條規則的域相匹配。也可能是負載均衡器搞砸了?如果有幫助,我正在使用 Rackspace 雲負載均衡器。

我也試過這個配置:

server {
   listen 80 default;
   server_name www.mydomain.com;
}

server {
   listen 80;
   server_name _;
   rewrite ^ http://www.mydomain.com$request_uri?;
}

這與前面的結果相同。似乎沒有任何東西被重定向。

有什麼想法可以解決這個問題嗎?

謝謝你的幫助!

我讓它工作了。Sameer 很接近,但我不確定他是否理解我的確切問題。這是我的問題的解決方案;

server {
   listen 80;
   server_name www.mydomain.com 123.123.123.123 456.456.456.456;
}

server {
   listen 80 default_server;
   server_name _;
   rewrite ^ http://www.mydomain.com$request_uri?;
}

使用上述方法,您可以通過 www.mydomain.com 或直接的內部和公共 IP 地址載入該站點,但如果您嘗試以任何其他方式載入它,則會被重定向。

奇怪的是……這是我上面嘗試的第一個例子。我不知道為什麼它當時不起作用,現在起作用了。也許是因為“listen 80 default”已被棄用,取而代之的是“listen 80 default_server”。或者我可能會混淆所有 4 個節點的測試。無論哪種方式,它現在似乎都在使用這個定義!

引用自:https://serverfault.com/questions/461048