阿帕奇與 Nginx
我最近一直在研究 Apache 和 Nginx 之間的差異,並且對我應該選擇哪個感到困惑。
我已經進行了一些搜尋,但兩者之間沒有明確的比較,我想知道這裡是否有人可以就兩者之間的差異發表意見。
我目前的知識讓我明白 mod_php 比 fastcgi 更快、更安全,但是 Apache 在同時連接和記憶體消耗方面要差得多。
我的網站使用了大量的長輪詢,但有一個非 AJAX 網路基礎(即頂部有長輪詢的 Apache)。
我對 Apache 記憶體問題的最初解決方案是通過 node.js 發送長輪詢,然後讓 node.js 每 2 秒訪問一次 Apache,在這種情況下,Apache 不會有一個開放的連接,而是 node.js 會。我已經意識到這可能還不夠好,並且正在尋找不同的解決方案。我仍然對我最初的想法是否可行感興趣。
那麼哪個更適合現代網路?阿帕奇還是 Nginx?
更新:給出的所有建議都是好的和有效的。我採用了最初的第二個想法,即使用完整的 Nginx 伺服器。我很滿意作為一個專用伺服器,我不會遇到 fastcgi 的安全問題,而且由於我的長輪詢腳本需要用 PHP 編寫,我需要一個可以處理高負載同時連接的伺服器,而 Apache 無論如何都無法做到這一點我改變了結構,它仍然會佔用記憶體。
我已經標記了 Martin F 的答案,因為他對我的問題點給出瞭如此清晰和完整的答案,我覺得他應該得到這個分數,但是,所有三個答案都是好的和有效的,並且最肯定會考慮為我擁有的另一個網站使用反向代理因為我剛剛發現了 Nginx 在代理中可以做的非常非常酷的事情。
謝謝,
您似乎有一些我認為需要解決的誤解。
首先,mod_php 只是稍微快一點,我所有的測試都表明差異是如此微小以至於不值得考慮。我也懷疑安全方面是否與您相關,因為您似乎正在查看專用伺服器並且mod_php 確實只在共享環境中具有優勢 - 事實上,在專用環境中 php-fpm 將具有優勢,因為 PHP 和您的 Web 伺服器現在作為不同的程序執行,這甚至沒有考慮到 php 中令人敬畏的日誌記錄選項- fpm 如慢日誌。
如果世界是黑白的,我會說使用純 nginx 設置並使用 php-fpm 編譯 php。更現實的是,如果您已經讓 Apache 工作,那麼讓 nginx 成為 apache 的反向代理,您可能會節省幾個小時的設置時間,並且性能差異會很小。
但是讓我們假設世界是黑白的,因為這會產生更棒的設置。你為你的網路伺服器做 nginx + php-fpm。要解決上傳問題,您可以使用 nginx 的上傳模組和上傳進度模組。這意味著您的 Web 伺服器接受上傳並在完成後將文件路徑傳遞給 PHP,這樣文件就不需要通過 fastcgi 協議在 nginx 和 PHP 之間進行流式傳輸,甜心。(我在現場設置中有這個,它工作得很好,順便說一句!)
對於使用者下載,您使用名為 x-accel-redirect 的 nginxs x-send-file-like 功能,本質上您在 PHP 中進行身份驗證並設置 nginx 獲取並開始傳輸該文件的標頭。PHP 結束執行,您的 Web 伺服器正在處理傳輸,甜蜜!(再次,我在現場設置中使用它並且效果很好)
對於跨伺服器分發文件或其他長時間執行的操作,我們意識到 PHP 並不是最適合這個,所以我們安裝了 gearman,它是一個作業伺服器,可以在不同伺服器上的工作人員之間分配工作,這些工作人員可以寫成任何語言。因此,您可以創建一個分佈式工作程序並使用總共 200 KB 的記憶體而不是 PHP 使用的 100 MB 記憶體來生成其中的 5 個。甜的。(我也有這個直播,所以這一切都是可能的)
如果您還沒有意識到它,我認為您的許多問題根本與您的 Web 伺服器無關,您只是這樣認為,因為 Apache 由於其結構而強制它與您的 Web 伺服器相關,通常有比 PHP 更好的工具來完成這項工作,而 PHP 是一種知道這一點的語言,它提供了很好的選項來解除安裝工作,而無需離開 PHP。
我強烈推薦 nginx,但我也認為你應該看看其他選項來解決你的其他問題,如果你有擴展或性能問題,請隨時給我寫信。我不知道您是否可以通過這裡發送消息,否則請在 martin@bbtn.us 給我寫信,因為我不會跟踪任何未使用 nginx 標記的伺服器故障。:)