Nginx:高效能的 Web 伺服器、反向代理、負載平衡
Web 伺服器的首選,大概不是 Nginx 就是 Apache 了。這篇文章說明為什麼我偏向使用 Nginx 而不是 Apache。
Web 伺服器的首選,大概不是 Nginx 就是 Apache 了。這篇文章說明為什麼我偏向使用 Nginx 而不是 Apache。
常常有人問我為什麼我使用 Nginx(念作 Engine-X) 而不用 Apache,雖然早期在用一些虛擬主機時都用 Apache,但後來自己買 VPS 後就習慣都用 Nginx 了。簡單列幾點我自己的理由:
效能問題
早期做很多東西大部分都是靜態的,沒有需要很多動態改寫的東西,而 Nginx 的靜態處理效能比 Apache 還要好。根據 ServerGuy 的文章,在處理靜態內容時 Nginx 比 Apache 可以高達兩倍以上的效能,而動態內容則大同小異,這樣不管是在大型 Server 上,還是小到 Raspberry Pi,都可以有好的效能可以使用。文章也提到,處理大流量時 Nginx 會比 Apache 好一些。
小主機上想省效能?用 C++ 寫 RESTful API 也是個不錯的選擇:Pistache:用 C++ 寫 RESTful API Server
設定檔
另外,設定檔的寫法,我也比較喜歡 Nginx 的。首先看一下 Apache 預設的設定檔:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
這是 Nginx 的:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
我個人是比較偏向使用大括號的語法,而不是 XML 的語法;我個人也覺得 Nginx 的語法比較人性化,雖然 Routing 的寫法大同小異就是了。
不過,有 Apache 支援在網頁資料夾裡面使用 .htaccess
檔案動態修改設定;Nginx 就沒辦法了。Apache 這樣做好處是方便、使用者不需要經過系統管理員也可以寫一些簡單的設定,壞處是可能危險、另外設定檔全部都放在一起也比較好管理,但這邊就見仁見智。
模組
不過 Nginx 的模組就是缺點了。Nginx 當初開發可能考量到效能問題,模組都是靜態的──也就是說每次你需要新增一個新的模組時,你可能就要重新編譯(或重新安裝)Nginx,還記得當初為了讓自己優先支援 HTTP/2,也是要另外編譯 Nginx;要做某個東西支援 FFMPEG 時也是另外編譯。但 Apache 的模組是動態的,額外安裝模組後,隨時可以載入或解除安裝那些模組,這點 Nginx 就比較比不上。
最後,如果你還是不知道該用哪種 Web 伺服器的話,我會建議你:從 Nginx 開始嘗試看看吧!。附上 Netcraft 調查的,最近 10 年前一百萬網站使用的 Web server 品牌:
本篇文章同步發表在 iT邦幫忙。