2014-01-13 139 views
29

我正在將我的Web應用程序移動到另一臺服務器,並且在接下來的幾天內,我將刷新DNS以指向新的IP位置。如何強制DNS網站刷新?

不幸的是,一些瀏覽器和SO保持DNS緩存,使用戶指向舊的IP位置。有些用戶是新手,他們不會手動刷新DNS緩存,我知道在這個改變後的頭幾個星期裏我們會失去很多。

有沒有辦法強制這個DNS緩存刷新,所以它會對我們的最終用戶是透明的?

+3

谷歌允許你刷新DNS緩存:https://developers.google.com/speed/public-dns/cache –

回答

23

就我所知,像這樣的強制更新不是直接可能的。如果您的名稱服務器服務提供商允許,您可能可以通過在更改條目之前減少條目的TTL(生存時間)值來減少DNS停機時間。

這是guide for less painful DNS changes

雖然並非所有客戶端和授權(源)名稱服務器之間的名稱服務器都會執行您的TTL,但它們可能會有自己的緩存時間。

8

強制用戶清除DNS緩存並不是一個可靠的方法,並且通常由他們的ISP在其操作系統之上完成。更新後的DNS不應超過24小時才能傳播。您最好的選擇是通過使用類似mod_proxy和Apache的方法來爲用戶創建一個反向代理到您的新服務器,從而實現與用戶的無縫轉換。這將導致對舊服務器的所有查詢仍然返回正確的結果,幾天後您可以自由移除反向代理。

+0

但是沒有任何HTML通用代碼可以返回嗎?像404 ... –

+0

最接近的選項是301永久移動重定向,這隻適用於域切換。您不能強制用戶清除DNS緩存,並且在很多情況下,即使他們想要緩存也不能(因爲ISP緩存也是如此)。如果你能夠做到最好的選擇,我可以看到暫時將代理服務器從舊服務器反轉到新服務器,以便對該域的所有查詢都將發送到新服務器。 – Jammerx2

+7

另一個好主意是在做出更改之前的幾天降低DNS上的TTL。這將導致ISP更頻繁地檢查DNS的更新,以便遷移更順暢。您應該將TTL設置爲儘可能最低的值(並且在更改後一會兒再增加一次)。 – Jammerx2

0

如果您的兩臺服務器都使用了WHM,我認爲我們可以將時間縮短到零。在新服務器中創建您的域並將所有設置都準備就緒。轉到上一臺服務器並刪除與該域對應的帳戶。到目前爲止,我沒有犯這樣的錯誤,並感覺到瞬時更新。僅供參考我使用hostgator託管(兩個專用服務器)。 我真的不知道爲什麼是這樣。在TTL結束之前,它應該不是那樣的。

7

你不能強制刷新,但你可以轉發所有舊的ip請求到新的。 一個網站:

替換[OLD_IP]與舊服務器的IP

與新服務器的IP

運行&贏替換[新_IP。

回聲 「1」>的/ proc/SYS /淨/的IPv4/IP_FORWARD

iptables的-t NAT -A PREROUTING -d [OLD_IP] -p TCP --dport 80 -j DNAT --to目的地[新_IP]:80

iptables的-t NAT -A PREROUTING -d [OLD_IP] -p TCP --dport 443 -j DNAT --to目的地[新_IP]:443個

iptables的-t NAT - POSTROUTING -j MASQUERADE

+0

爲什麼不編輯/ etc/hosts然後:) – JSmyth

+0

如果你沒有訪問你的DNS的TTL(與許多託管服務器的情況),這是一個完美的解決方案 - 如果舊的服務器不需要端口80上的Web服務器仍在運行... –

0

所以,如果問題是你剛創建一個網站,你的客戶或任何給定的ISP DNS緩存,並不顯示新的網站呢。是的所有其他的東西適用於ipconfig重置瀏覽器等。但這裏有一個想法和我不時做的事情。您可以在NIC屬性的tcpip屬性中設置備用網絡ISP的DNS。所以如果你的ISP說telstra並且它沒有傳播或更新,你可以在那裏指定一個替代服務提供商DNS。如果那個isp dns在你的本地之前更新,那麼你會看到新的網站。但是在DNS更新之前,你可以做很多其他的技巧來確定傳播並使郵件工作。 如果任何人想聊天,請給我一條線。