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 品牌:

webserver

本篇文章同步發表在 iT邦幫忙

延伸閱讀