Nginx HTTPS 設定
以下是教學範例,說明如何配置 Nginx 支援 HTTPS 並進行反向代理。
基本設定
在配置 Nginx 前,請確保以下條件已滿足:
- 安裝 Nginx。
- 已申請並取得有效的 SSL 憑證(
<憑證路徑>和<私鑰路徑>)。- 通常我們會把憑證放在
/etc/ssl/certs目錄下。
- 通常我們會把憑證放在
- 確保後端服務正常運行(例如 Spring Boot)。
Nginx 配置檔案
以下為範例 Nginx 配置:
worker_processes 1; # 工作進程數量,建議與 CPU 核心數一致。
events {
worker_connections 1024; # 每個工作進程的最大連接數。
}
http {
include mime.types; # 載入 MIME 類型定義。
default_type application/octet-stream; # 預設 MIME 類型。
sendfile on; # 啟用高效文件傳輸。
keepalive_timeout 65; # 保持連接的超時時間(秒)。
# HTTPS 服務設定
server {
listen 443 ssl; # 啟用 HTTPS,監聽 443 端口。
server_name <你的域名>; # 定義服務器的域名。
# SSL 憑證路徑
ssl_certificate <憑證路徑>; # 替換為你的 SSL 憑證路徑。
ssl_certificate_key <私鑰路徑>; # 替換為你的 SSL 私鑰路徑。
# SSL 配置
# TLSv1.2 1.0
ssl_session_timeout 5m; # SSL 會話超時時間(分鐘)。
ssl_protocols TLSv1.2 TLSv1.3; # TLS(Transport Layer Security) 協議版本,
ssl_ciphers HIGH:!aNULL:!MD5; # 定義安全加密套件。
ssl_prefer_server_ciphers on; # 優先使用服務器的加密套件。
# 靜態網站設定
location / {
root <靜態文件路徑>; # 替換為你的網站文件路徑。
index index.html index.htm; # 設定預設首頁文件。
try_files $uri /index.html; # 若找不到文件則回退到 index.html。
}
# API 反向代理
location /api/ {
proxy_pass http://<後端服務地址>:<端口>/; # 替換為後端服務地址。要注意這樣的設定是指 http://<後端服務地址>:<端口>/api/ 被代理到 http://<後端服務地址>:<端口>/。就沒有 /api/ 這個路徑了。
proxy_set_header Host $host; # 將原始請求的 Host 標頭傳遞給後端服務。
proxy_set_header X-Real-IP $remote_addr; # 客戶端的真實 IP 地址傳遞給後端服務,設置在 X-Real-IP 標頭中。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 傳遞所有代理的 IP 地址鏈。
proxy_set_header X-Forwarded-Proto $scheme; # 設置 X-Forwarded-Proto 標頭,傳遞請求的協議(HTTP 或 HTTPS)。scheme 就是協議名稱,http 或 https。
}
# 自訂錯誤頁面(Optional)
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root <錯誤頁文件路徑>; # 替換為你的錯誤頁文件路徑。
}
}
}TLS 1.0:
發布於 1999 年,是 SSL 3.0 的升級版本。
已知存在多個安全漏洞,如 POODLE 攻擊。
不再被認為是安全的,應避免使用。TLS 1.1:
發布於 2006 年,對 TLS 1.0 進行了小幅改進。
增加了對 CBC (Cipher Block Chaining) 模式的防護。
仍然存在一些已知的安全問題,逐漸被淘汰。TLS 1.2:
發布於 2008 年,是目前最廣泛使用的版本。
支持更強的加密算法和更安全的哈希函數。
增加了 AEAD (Authenticated Encryption with Associated Data)支持,如 GCM (Galois/Counter Mode)。
被認為是安全的,並且大多數現代應用程序都支持。TLS 1.3:
發布於 2018 年,是最新的版本。
簡化了握手過程,減少了延遲。
移除了不安全的加密算法和協議,如 RC4 和 CBC。
提供了更強的安全性和更好的性能。
推薦使用,特別是在需要高安全性和性能的應用中。
設定步驟
配置域名與 SSL 憑證
- 將
<你的域名>替換為實際的域名。 - 確保憑證 (
<憑證路徑>) 和私鑰 (<私鑰路徑>) 路徑正確。
- 將
配置靜態文件與後端服務
- 確保靜態文件存放於
<靜態文件路徑>,並存在index.html。 - 將
<後端服務地址>和<端口>替換為後端服務的實際地址。
- 確保靜態文件存放於
配置完 Nginx config 重啟 Nginx
- 重啟 Nginx 服務。
./nginx -s quit # 關閉 Nginx 服務 ./nginx -c /usr/local/nginx/nginx.conf # 使用指定配置文件啟動 Nginx測試 HTTPS 服務
使用瀏覽器訪問https://<你的域名>,檢查是否能正常連線。