一句話,部署要趁早

jopen 10年前發布 | 6K 次閱讀 編程

  這是一個關于部署的話題,一句話,部署要趁早。

  故事1

  我們的應用有一個靜態導出功能,在自己開發環境中,我們做了無數次導出,沒有任何問題。但上到真正的環境中,導出功能一下子不起作用了。

  經過緊張的調試,我們把目光聚集到一個配置上,它是一個用來處理導出的 URL,這個 URL 的地址是一個內部地址。在真正的環境里,每一臺機器都會有內部 IP 和外部 IP,我們用來登陸進行配置的是一個內部 IP,但用瀏覽器登陸時,我們卻用的是外部 IP。所以,當試圖訪問一個內部 IP 地址時,自然就訪問不到了,于是,導出過程就掛掉了。

  改正很簡單,只要把配置改成外部 IP 即可。

  故事2

  做 Web 應用,開啟 gzip 壓縮是不可避免的。我們在自己的 Nginx 服務上測試好的配置文件,部署到了真正的環境中,gzip 死活不起作用了。最初,我以為是自己的配置沒有起作用,結果,用內部地址訪問以下,一切正常。可為什么用域名訪問就訪問,難道域名解析還和 gzip 壓縮有關?

  經過半天緊張的調試,我們把焦點定位在了負載均衡器上。請求通過域名在真正環境是要先到達負載均衡器的,然后,由負載均衡器分發到后臺的 Nginx 上。這種訪問模式實際上成了反向代理,所以,在 Nginx 上,要想 gzip 在這種模式下工作,需要把 gzip 的代理模式打開,比如:

gzip_proxied any

</blockquote>

  故事3

  如果我們做的是一個老應用的改版,為了搜索引擎,無可避免的一件事是要兼容老應用的一些 URL。初想起來,有一個很簡單的做法,在 Nginx 上配置一些 URL rewrite 規則即可。

rewrite /old/url /new/url permanent;

</blockquote>

  在我們測試環境一切正常,但是,上了真正的環境,這個跳轉一下子不起作用了。原來,在真正的環境里,給外部訪問所用的端口與內部部署的端口是不一樣的,而這個跳轉是正常的,只不過,它跳到了內部的端口,而這個端口在外部是不可見的,于是,出了問題。

  給出一個 quick and dirty 的解決方案很容易,給出一個絕對地址用于跳轉即可:

rewrite /old/url http://outside/new/url permanent;

</blockquote>

  上面的幾個小故事遇到的問題其實是一樣的,部署環境和測試環境的差異。即便我們的軟件寫得完美無缺,環境永遠是不可輕視的。除非我們能做到讓所有環境完全一致,從頭到尾,否則還是那句話,部署要趁早。

                    <span id="shareA4" class="fl">                          </span>
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!