iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 22
0
Modern Web

前端工程師也該會的後端技倆系列 第 22

Nginx:高效能的 Web 伺服器、反向代理、負載平衡

  • 分享至 

  • xImage
  •  

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

https://ithelp.ithome.com.tw/upload/images/20191007/201199702m2xSVHSTE.png

本篇文章同步發表在 Noob's Space


上一篇
透過 HTTP Cache 讓 CDN 快取特定檔案
下一篇
三招找出主機上哪個處理程序在耗費你的資源
系列文
前端工程師也該會的後端技倆30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言