在 Ubuntu 安裝 Nginx 伺服器(官網 Nginx 安裝)
大约 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 <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
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