跳到主內容

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   rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
      573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
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   rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
      573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
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

# 啟動及自動啟動服務
systemctl start nginx && systemctl enable 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 、 Nginx-ct 這三個套件


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
git clone https://github.com/nginx/nginx.git
git clone https://github.com/openssl/openssl.git (會是安裝當時的測試版本,建議去官方下載正式的版本當時版次是 OpenSSL-1.1.1b 這是正式版的)

wget https://www.openssl.org/source/openssl-3.1.4.tar.gz
解壓
tar -zxvf openssl-*.tar.gz
修改名稱
mv openssl-3.1.4 openssl

git clone https://github.com/grahamedgecombe/nginx-ct.git
  • nginx-ct是啟用証書透明度(Certificate Transparency)策略的模組。為了啟用 Certificate Transparency和TLSv1.3,需要額外加入如下編譯參數

備註:這一段是在說怎麼把模組掛到系統裡面不是直接下指令用的

--add-module=../nginx-ct/ --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' --add-module=../nginx-ct/ --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/

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;
  • 重新啟 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




參考相關網頁