Nginx 模組擴充 - Debian \ Ubuntu
BUBU 因看到 CentOS 維護周期有重大變動,所以想轉換其他系統服務來繼續穩定運行,目前採用現在很流行的 Debain \ Ubuntu 系統來使用,指令都差不多只是套件名稱會不太一樣,因此本篇會進行修正
Nginx 官方下載 deb 版本,目前的版次
- Debian
# 安裝必要套件
sudo apt install -y curl gnupg2 ca-certificates lsb-release debian-archive-keyring
# 導入官方金鑰來確認該套件安全性
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
# 輸出的指紋如下 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
pub rsa4096 2024-05-29 [SC]
8540A6F18833A80E9C1653A42FD21310B49F6B46
uid nginx signing key <[email protected]>
pub rsa2048 2011-08-19 [SC] [expires: 2027-05-24]
573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid nginx signing key <[email protected]>
pub rsa4096 2024-05-29 [SC]
9E9BE90EACBCDE69FE9B204CBCDCD8A38D88A2B3
uid nginx signing key <[email protected]>
# 想要使用的版本請自己選擇
# 來源庫新增加穩定版 nginx 服務
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
# 來源庫新增加主線 nginx 服務
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
# 安裝 nginx 服務
sudo apt update && sudo apt install nginx
# 啟動及自動啟動服務
systemctl start nginx && systemctl enable nginx
or
sudo systemctl enable --now nginx
- Ubuntu
# 安裝必要套件
sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring
# 導入官方金鑰來確認該套件安全性
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
# 輸出的指紋如下 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
pub rsa4096 2024-05-29 [SC]
8540A6F18833A80E9C1653A42FD21310B49F6B46
uid nginx signing key <[email protected]>
pub rsa2048 2011-08-19 [SC] [expires: 2027-05-24]
573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid nginx signing key <[email protected]>
pub rsa4096 2024-05-29 [SC]
9E9BE90EACBCDE69FE9B204CBCDCD8A38D88A2B3
uid nginx signing key <[email protected]>
# 想要使用的版本請自己選擇
# 來源庫新增加穩定版 nginx 服務
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
# 來源庫新增加主線 nginx 服務
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
# 安裝 nginx 服務
sudo apt update && sudo apt install nginx
# 啟動及自動啟動服務
sudo systemctl enable --now nginx
編譯 Nginx
服務,以下是需要依賴的套件,要先下載
- Debain \ Ubuntu
sudo apt install -y git libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev build-essential gcc cmake curl unzip dpkg-dev libexpat-dev libgd-dev libgeoip-dev libhiredis-dev libluajit-5.1-dev libmaxminddb-dev libmhash-dev libpam0g-dev libperl-dev libxslt1-dev ninja-build mercurial libunwind-dev pkg-config
Brotli 套件下載
- 下載
ngx_Brotli
原始碼,ngx_brotli
是 Brotli 的Nginx
模組,請從 ngx_brotli 的 GitHub 網站 下載其原始碼
cd ~
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli
git submodule update --init --recursive
從 Github 下載 Nginx 、 OpenSSL 這二個套件
111.08.14 本站的 OpenSSL 會改用 3.0 版本並且往後記錄也會以 3.0 版本為主或更高版本
- 2019.06.15 OpenSSL 有釋放出新版 openssl-1.1.1c
- 2019.09.10 OpenSSL 有釋放出新版 openssl-1.1.1d
- 2020.03.31 OpenSSL 有釋放出新版 openssl-1.1.1f
- 2020.04.21 OpenSSL 有釋放出新版 openssl-1.1.1g
- 2020.12.08 OpenSSL 有釋放出新版 openssl-1.1.1i
- 2021.05.25 OpenSSL 有釋放出新版 openssl-1.1.1k
- 2022.03.15 OpenSSL 有釋放出新版 openssl-1.1.1n
- 2022.05.03 OpenSSL 有釋放出新版 openssl-1.1.1o
- 2022.07.05 OpenSSL 有釋放出新版 openssl-1.1.1q
- 2022.07.05 OpenSSL 有釋放出新版 openssl-3.0.5
- 2022.11.01 OpenSSL 有釋放出新版 openssl-3.0.7
- 2023.03.14 OpenSSL 有釋放出新版 openssl-3.1.0
- 2023.05.30 OpenSSL 有釋放出新版 openssl-3.1.1
- 2023.08.01 OpenSSL 有釋放出新版 openssl-3.1.2
- 2023.10.27 OpenSSL 有釋放出新版 openssl-3.1.4
- 2024.01.30 OpenSSL 有釋放出新版 openssl-3.2.1
- 2024.06.06 OpenSSL 有釋放出新版 openssl-3.2.2
- 2024.06.06 OpenSSL 有釋放出新版 openssl-3.3.1
- 2024.09.03 OpenSSL 有釋放出新版 openssl-3.3.2
git clone https://github.com/nginx/nginx.git
git clone https://github.com/openssl/openssl.git (會是安裝當時的測試版本,建議去官方下載正式的版本當時版次是 OpenSSL-1.1.1b 這是正式版的)
wget https://github.com/openssl/openssl/releases/download/openssl-3.3.2/openssl-3.3.2.tar.gz
解壓
tar -zxvf openssl-*.tar.gz
修改名稱
mv openssl-3.3.2 openssl
- 啟用 TLSv1.3,需要額外加入如下編譯參數
備註:這一段是在說怎麼把模組掛到系統裡面不是直接下指令用的
--with-openssl=../openssl/ --with-openssl-opt=enable-tls1_3
- 加在官方編譯參數後面,簡單修改編譯參數
auto/configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/etc/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --with-openssl=../openssl/ --with-openssl-opt=enable-tls1_3 --add-module=../ngx_brotli/
2024.07.03 支援 HTTP/3 服務,Nginx 在 1.25 已有支援到 HTTP/3 服務,下面的編譯參數是有援 HTTP/3 服務,如果想要有支援 HTTP/3 服務需在您防火牆上面新增加 UDP 443 服務,因 HTTP/3 是會走 UDP
- 新增加
HTTP/3
參數
auto/configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/etc/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_v3_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --with-openssl=../openssl/ --with-openssl-opt=enable-tls1_3 --add-module=../ngx_brotli/
- 進入
Nginx
目錄裡面,輸入上面所要編譯參數,就會自行建置 - 建置完之後請在輸入以下指令編譯
make
- 查看編譯完成的 Nginx 的版次
./objs/nginx -v
nginx version: nginx/1.XX.XX
- 備份剛剛安裝好的
Nginx
版本,改成編譯版本
# 之前目錄改修當時日期
mv /usr/sbin/nginx /usr/sbin/nginx.20190309.official.mainline
# 將編譯的版本複製剛剛備份的目錄
cp ./objs/nginx /usr/sbin/
# 更新系統時排除 nginx
apt-mark hold nginx
2024.03.27 修改只有 TLS1.2、TLS1.3
修改 Nginx
設定檔內的 ssl_protocols
和 ssl_ciphers
啟用 TLSv1.3
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
2024.07.03 修改有支援 HTTP/3 參數,確認要使用該參數您的 TLS 一定要有支援 1.3
- 支援
HTTP/3
服務
# 使用 https 和 http/2 協定
listen 443 ssl;
http2 on;
http3 on;
# 上述的 IPv6 方式
listen [::]:443 ssl;
# 使用 UDP for QUIC+HTTP/3
listen 443 quic reuseport;
listen [::]:443 quic reuseport;
# Add Alt-Svc header to advertise HTTP/3 support to clients
add_header Alt-Svc 'h3=":443"; ma=86400';
add_header x-quic 'h3';
ssl_early_data on;
ssl_stapling on;
ssl_stapling_verify on;
- 重新啟
Nginx
服務,讓剛剛修改設定檔生效
systemctl restart nginx
測試 TLSv1.3
版本是否有生效
- 使用 testssl 工具,在使用這個工具之前要先下載依賴的套件
apt install dnsutils -y
- 如果沒有下載此套件的話會出現以下的誤錯訊息
Fatal error: Neither "dig", "host", "drill" or "nslookup" is present
- 載點如下
git clone --depth 1 https://github.com/drwetter/testssl.sh.git
cd testssl.sh
./testssl.sh --help
- 下命令輸入想要測試的網域
./testssl.sh -p 1234.com
- 執行完結果如下
- 詳細的狀況將小寫的 -p 改成大寫的 -P,測試完結果如下
參考相關網頁
- OpenSSL 官方網頁
- Nginx 官方載點
- 測試 TLS/SSL
- 如何在 Ubuntu 18.04 上安裝 GCC 編譯器
- Ubuntu 编译安装 Nginx 及拓展支持
- How to Add Brotli Support to Nginx on Ubuntu 18.04 | 16.04
- How to install Brotli Module for Nginx on Ubuntu 20.04
- Nginx 编译开启 Quic 或 HTTP/3
- Secure Your Nginx Server in 2024: Achieving an A+ Rating on Qualys SSL Labs
- SSL Configuration Generator
- How to: NGINX with QUIC/HTTP3
- 筆記 : nginx 1.25.X HTTP/3 設定的一些雷
- 使用nginx 1.25开启 HTTP/3 支持
- 安装支持HTTP3的NGINX服务器
- HTTP/3 CHECK
- HTTP/3 on Nginx – Be QUIC or be Dead
- NGINX HTTP/3—Configurations, Troubleshooting, and Best Practices