文章原文連接:http://www.valarvo.com/edwardvoon/1293.html
Nginx和apache的抉擇
Nginx
- 輕量級,採用 C 進行編寫,同樣的 web 服務,會佔用更少的內存及資源
- 抗併發,nginx 以 epoll and kqueue 作爲開發模型,處理請求是異步非阻塞的,負載能力比 apache 高很多,而 apache 則是阻塞型的。在高併發下 nginx 能保持低資源低消耗高性能 ,而 apache 在 PHP 處理慢或者前端壓力很大的情況下,很容易出現進程數飆升,從而拒絕服務的現象。
- nginx 處理靜態文件好,靜態處理性能比 apache 高三倍以上
- nginx 的設計高度模塊化,編寫模塊相對簡單
- nginx 配置簡潔,正則配置讓很多事情變得簡單,而且改完配置能使用 -t 測試配置有沒有問題,apache 配置複雜 ,重啓的時候發現配置出錯了,會很崩潰
- nginx 作爲負載均衡服務器,支持 7 層負載均衡
- nginx 本身就是一個反向代理服務器,而且可以作爲非常優秀的郵件代理服務器
- 啓動特別容易, 並且幾乎可以做到 7*24 不間斷運行,即使運行數個月也不需要重新啓動,還能夠不間斷服務的情況下進行軟件版本的升級
- 社區活躍,各種高性能模塊出品迅速
Apache
- apache 的 rewrite 比 nginx 強大,在 rewrite 頻繁的情況下,用 apache
- apache 發展到現在,模塊超多,基本想到的都可以找到
- apache 更爲成熟,少 bug ,nginx 的 bug 相對較多
- apache 超穩定
- apache 對 PHP 支持比較簡單,nginx 需要配合其他後端用
- apache 在處理動態請求有優勢,nginx 在這方面是雞肋,一般動態請求要 apache 去做,nginx 適合靜態和反向。
- apache 仍然是目前的主流,擁有豐富的特性,成熟的技術和開發社區
- 你對web server的需求決定你的選擇。大部分情況下nginx都優於APACHE,比如說靜態文件處理、PHP-CGI的支持、反向代理功能、前端Cache、維持連接等等。在Apache+PHP(prefork)模式下,如果PHP處理慢或者前端壓力很大的情況下,很容易出現Apache進程數飆升,從而拒絕服務的現象。
總結
兩者最核心的區別在於 apache 是同步多進程模型,一個連接對應一個進程,而 nginx 是異步的,多個連接(萬級別)可以對應一個進程
一般來說,需要性能的 web 服務,用 nginx 。如果不需要性能只求穩定,更考慮 apache ,後者的各種功能模塊實現得比前者,例如 ssl 的模塊就比前者好,可配置項多。epoll(freebsd 上是 kqueue ) 網絡 IO 模型是 nginx 處理性能高的根本理由,但並不是所有的情況下都是 epoll 大獲全勝的,如果本身提供靜態服務的就只有寥寥幾個文件,apache 的 select 模型或許比 epoll 更高性能。當然,這只是根據網絡 IO 模型的原理作的一個假設,真正的應用還是需要實測了再說的。
更爲通用的方案是,前端 nginx 抗併發,後端 apache 集羣,配合起來會更好。
由於在macOS系統下,apache是默認就存在的,所以也就不需要安裝和配置,但是如果同時使用nginx,那就要大費一番周折。那麼,現在開始折騰吧~
>>>配置Apache
第一步:先修改apache端口號:
macOS系統中,apache的配置文件位置爲:/etc/apache2,接下來使用快捷鍵:command+空格鍵進入系統自帶的搜索工具,粘貼路徑,回車,如下圖:
選擇文件名爲httpd.conf,雙擊進行編輯
第二步:將<IfDefine SERVER_APP_HAS_DEFAULT_PORTS></IfDefine>
和<IfDefine !SERVER_APP_HAS_DEFAULT_PORTS></IfDefine>
中的Listen 80,改爲Listen 8080,如下圖:
修改端口號
第三步:command+空格鍵後進入路徑:/etc/apache2/extra/httpd-vhost.conf,對httpd-vhost.conf編輯:
將80更換爲8080
第四步:接下來,也是最重要的,當你重啓apache服務時,重啓apache服務時的命令爲:sudo /usr/sbin/apachectl restart
,千萬別直接用:sudo apachectl restart
,這是因爲你有兩種不同的Apache安裝 – 系統附帶的安裝和你自己安裝的安裝。
第五步:打開瀏覽器,地址輸入爲:127.0.0.1:8080,必須要加端口號,因爲在後邊配置Nginx的時候,會和apache端口號衝突。
apache已經開始工作了
恭喜你,apache已經配置成功了!
>>>配置Nginx
第一步:如果你電腦上還沒有安裝,推薦使用homebrew安裝(homebrew的安裝,建議使用默認源,國內的brew源很容易宕機,如果還是不可以,電腦連接手機熱點,進行安裝)。nginx的具體命令爲:brew install nginx
,由於我電腦上已經安裝,這裏就不再贅述,不明白homebrew和nginx的安裝可以自行百度。
第二步:使用mac自帶搜索工具,command+空格鍵,複製粘貼/usr/local/etc/nginx/
,打開並編輯將默認的8080端口號改爲:80,如下圖:
修改Nginx端口號
第三步:打開瀏覽器,地址輸入爲:127.0.0.1,至此,訪問nginx服務就不需要加80端口號了。
nginx已經開始工作了
恭喜你,apache和nginx全部配置成功了!區別就在於加8080和不加8080端口號,是不是很簡單。
附加選項:
根據自己的業務需求,如果nginx用的多,那就將apache服務取消自啓動,具體命令爲:sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
,如果因爲其他原因,又需要將apache重置自啓動,那就將上邊這條命令的unload改爲load。