跳至主要內容

在 Ubuntu 安裝 Nginx 伺服器(官網 Nginx 安裝)

Pamis Wang大约 3 分鐘伺服器NginxNginx 1.22UbuntuUbuntu 22.04

在 Ubuntu 安裝 Nginx 伺服器(官網 Nginx 安裝)

前言

由於受到  CVE-2021-23017open in new window  漏洞的影響,
Nginx 必須升級到 1.20.1 以上,但由於 Ubuntu 22.04 官方 APT 發行的版本為 1.18。
故本次教學直接使用 Nginx 官方的安裝指南,取代 Ubuntu 官方 APT 安裝的方式。

本文章會在 Ubuntu 22.04 透過官方的 APT 套件庫安裝 Nginx 伺服器,
並簡單介紹使用設定說明。

這樣會出事的!
這樣會出事的!

安裝 Nginx

安裝必備套件

sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring

導入官方 Nginx 簽名密鑰以便 APT 可以驗證套件的真實性。

curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

驗證下載的文件是否包含正確的密鑰

gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

輸出應包含完整指紋

這個是輸出驗證結果畫面的範例,不是要打進終端機的。

pub   rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
      573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid                      nginx signing key <signing-key@nginx.com

選擇安裝的版本

選一個版本輸入就好,建議是穩定版本。

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

安裝上方選定的版本

就是上面自己選的其中一個版本。

sudo apt update
sudo apt install nginx

安裝指定號碼的版本

如果有偏好選定的版本可以用這方式來安裝。

顯示所有可選安裝的版本

sudo apt-cache madison nginx

會出現類似下方的列表

     nginx | 1.24.0-1~jammy | http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
     nginx | 1.22.1-1~jammy | http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
     nginx | 1.22.0-1~jammy | http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
     nginx | 1.20.2-1~jammy | http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
     nginx | 1.18.0-6ubuntu14.3 | http://tw.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
     nginx | 1.18.0-6ubuntu14.3 | http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages
     nginx | 1.18.0-6ubuntu14 | http://tw.archive.ubuntu.com/ubuntu jammy/main amd64 Packages

後面加上列表版本

sudo apt update
sudo apt install nginx=1.22.1-1~jammy

設定優先使用 Nginx 官方來源取代 APT 套件庫

echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
    | sudo tee /etc/apt/preferences.d/99nginx

設定 Nginx

重大改動

  • nginx 1.20 之後不再使用 /etc/nginx/site-enabled 底下的設定
  • 新的 nginx 預設使用 nginx 作為 user 名稱,取代原本的 www-data

網站設定

因為 nginx.conf 改為直接從 conf.d 讀取 *.conf 的設定檔案
所以設定直接寫在裡面就好,建議備份設定。

如果還是想用以前版本使用 /etc/nginx/site-enabled 的設定方式,
就必須開啟 /etc/nginx/nginx.conf 手動修改加入。
以下為片段修改的範例:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
    # 加上這行
    include /etc/nginx/sites-enabled/*;
}

權限設定

如果 /var/log/nginx/error.log 出現 (13: permission denied) 的錯誤訊息
代表 nginx 無法正常 cd 至專案目錄
解決方法參考如下:

根據 /etc/nginx/nginx.conf 設定,
Nginx 預設使用者名稱為 nginx
故需要將指定使用者加入 nginx 群組。

# username 是自己主機使用者名稱,請根據自己的主機名稱調整
sudo gpasswd -a nginx username

並確保用戶群組可以進入路徑中的所有目錄

sudo chmod g+x /home/username && chmod g+x /home/username/test

設定完畢後重啟伺服器

確認 Nginx 是否連接成功

sudo nginx -t

得到這個消息後便可重啟 Nginx

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重新讀取 Nginx 設定文件

sudo service nginx reload

重啟 Nginx 伺服器

sudo service nginx restart

參考資料

http://nginx.org/en/linux_packages.htmlopen in new window

上次編輯於:
貢獻者: pamis