Nginx的錯誤日志是排查SSL配置問題的核心依據,Ubuntu系統下日志默認路徑為/var/log/nginx/error.log
。使用以下命令實時查看最新錯誤信息:
sudo tail -f /var/log/nginx/error.log
根據日志中的具體報錯(如證書路徑錯誤、加密套件不匹配、模塊缺失等),可快速定位問題根源。
在修改配置文件后(如/etc/nginx/sites-available/your_domain.conf
),務必使用以下命令檢查語法是否正確:
sudo nginx -t
若輸出configuration file syntax is ok
且test is successful
,說明配置文件無語法錯誤;若報錯(如unknown directive "ssl_certificate"
),需根據提示修正配置文件中的拼寫或格式問題。
ssl_certificate
(服務器證書)和ssl_certificate_key
(私鑰)指令指向的文件路徑正確,且文件存在。例如:ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
若證書由中間CA簽發,需添加ssl_trusted_certificate
指令指定中間證書路徑(合并根證書與中間證書)。600
(僅所有者可讀寫),避免Nginx進程無法訪問:sudo chmod 600 /etc/nginx/ssl/*.key
sudo chown root:root /etc/nginx/ssl/*.crt /etc/nginx/ssl/*.key
若Nginx啟動時報錯SSL modules require the OpenSSL library
或no ssl module
,說明未啟用SSL模塊。需重新編譯Nginx并添加--with-http_ssl_module
參數:
# 查看Nginx已安裝模塊(確認是否包含ngx_http_ssl_module)
nginx -V 2>&1 | grep -o with-http_ssl_module
# 若未包含,進入Nginx源碼目錄重新編譯
cd /path/to/nginx-source
./configure --prefix=/usr/share/nginx --with-http_ssl_module --with-http_stub_status_module
make
sudo make install
編譯前需安裝OpenSSL依賴:sudo apt-get install openssl libssl-dev
。
Ubuntu系統下,若配置ssl_ciphers PROFILE=SYSTEM
會報錯no cipher match
(因Ubuntu未使用Redhat的PROFILE系統)。需修改為明確的加密套件,例如:
ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
ssl_prefer_server_ciphers on;
同時確保啟用了安全的TLS協議(如TLSv1.2及以上):
ssl_protocols TLSv1.2 TLSv1.3;
舊版本的Nginx或OpenSSL可能存在SSL/TLS協議兼容性問題(如不支持TLSv1.3),導致握手失敗。使用以下命令更新系統軟件包:
sudo apt update
sudo apt upgrade nginx openssl
更新后重啟Nginx服務:sudo systemctl restart nginx
。
若瀏覽器無法訪問HTTPS端口(443),需確認Ubuntu防火墻(ufw
)是否允許該端口:
sudo ufw allow 'Nginx Full' # 允許HTTP(80)和HTTPS(443)
sudo ufw enable # 啟用防火墻
sudo ufw status # 查看防火墻狀態
若使用iptables
,需添加規則:sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
。