跳到主內容

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 套件下載


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 版本為主或更高版本

openssl載點

  • 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
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.1/openssl-3.3.1.tar.gz
解壓
tar -zxvf openssl-*.tar.gz
修改名稱
mv openssl-3.3.1 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_protocolsssl_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
  • 執行完結果如下

image-1552114862664.png

  • 詳細的狀況將小寫的 -p 改成大寫的 -P,測試完結果如下

image-1552115074868.png




參考相關網頁