在 Ubuntu 安裝 Nginx 伺服器(官網 Nginx 安裝)
2022/8/4大約 3 分鐘
在 Ubuntu 安裝 Nginx 伺服器(官網 Nginx 安裝)
前言
由於受到 CVE-2021-23017 漏洞的影響,
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 <[email protected]選擇安裝的版本
選一個版本輸入就好,建議是穩定版本。
穩定版本
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主線版本
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/mainline/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