
我很想知道這是否真的可行,但我確信我已經看到我們的一位舊 AWS TAM 對此進行了演示。
我在託管 PHP 應用程式的 ECS 之外提供 PHP-FPM 容器(連接埠 9000)。我正在考慮用 ALB 替換 nginx 框。
本質上,透過連接埠 80 傳送到 ALB 的請求應使用原始請求資料在連接埠 9000 處執行應用程式的入口點。
我嘗試過擺弄目標群組,但無法弄清楚如何執行 nginx 提供的相同 ProxyPass 功能。
這可能嗎?如果是這樣,怎麼辦?
答案1
我很想知道這是否真的可行,但我確信我已經看到我們的一位舊 AWS TAM 對此進行了演示。
我很期待這個解決方案。
根據我的理解,我得出的結論是 NGINX 背後的 PHP-FPM 是最簡單的解決方案。理由:
- 快速CGI是一種用於將互動式程式與 Web 伺服器連接的二進位協定。因此,PHP-FPM 公開的連接埠 9000 不適合直接位於 AWS ELB 之後。
- PHP 內建的 Web 伺服器不應該在生產環境中使用。
- 允許同一台伺服器作為 Web 伺服器和應用程式伺服器是一種不好的做法。應用程式伺服器的資源將被 Web 伺服器佔用,反之亦然。每個伺服器都有其優點。我們使用 NGINX 是因為它作為 Web 伺服器經過了實際測試。我們使用 PHP-FPM 作為主要的 PHP FastCGI 實作。我們不應該使用 AK-47 來殺死老鼠,我們應該使用捕鼠器。
- AWS ELB 背後的 Django + Gunicorn 應用程式可以順利運行,直到緩慢的用戶端開始發送請求。 NGINX 可以輕鬆處理速度較慢的客戶端,因為它會緩衝完整的請求(所有 TCP 封包)並將其轉送到 Gunicorn。參考:Gunicorn部署。這也適用於 PHP-FPM。
- NGINX 有助於輕鬆提供靜態檔案並使用 GZIP 對其進行壓縮。話雖如此,靜態檔案應該使用像 S3 這樣的物件儲存來提供服務。