如何在Docker環(huán)境下為Nginx配置HTTPS
前言
配置HTTPS已經(jīng)成為網(wǎng)站部署的必要步驟。本教程將詳細介紹如何在Docker環(huán)境下為Nginx配置HTTPS,使用自簽名證書來實現(xiàn)加密通信。雖然在生產(chǎn)環(huán)境中建議使用權(quán)威CA機構(gòu)頒發(fā)的證書,但在開發(fā)測試或內(nèi)網(wǎng)環(huán)境中,自簽名證書是一個很好的選擇。
前置條件
在開始之前,確保系統(tǒng)已經(jīng)安裝:
Docker(建議版本 20.10 或更高)OpenSSL(用于生成證書)
可以通過以下命令檢查版本:
docker --version openssl version
一、項目結(jié)構(gòu)
項目的目錄結(jié)構(gòu):
project/ ├── Dockerfile ├── nginx/ │ ├── nginx.conf # Nginx主配置文件 │ ├── conf.d/ │ │ └── default.conf # 默認站點配置 │ └── ssl/ # 將要創(chuàng)建的SSL證書目錄 │ ├── nginx.crt # 證書文件 │ └── nginx.key # 私鑰文件 ├── source/ └── dist/ # 編譯后的靜態(tài)文件
二、生成自簽名證書
2.1 創(chuàng)建證書目錄
# 在項目根目錄下執(zhí)行 mkdir -p nginx/ssl cd nginx/ssl
2.2 生成SSL證書和私鑰
使用OpenSSL生成自簽名證書。這個過程分為幾個步驟:
生成私鑰:
openssl genrsa -out nginx.key 2048
生成證書簽名請求(CSR):
openssl req -new -key nginx.key -out nginx.csr \ -subj "/C=CN/ST=YourState/L=YourCity/O=YourCompany/OU=IT Department/CN=your-domain.com"
參數(shù)說明:
- /C:國家代碼(例如CN代表中國)
- /ST:省/州名
- /L:城市名
- /O:組織名稱
- /OU:部門名稱
- /CN:域名
使用私鑰簽名證書:
openssl x509 -req -days 3650 \ -in nginx.csr \ -signkey nginx.key \ -out nginx.crt
2.3 設(shè)置正確的權(quán)限
chmod 600 nginx.key chmod 644 nginx.crt
三、配置Nginx
3.1 創(chuàng)建新的Nginx配置文件
編輯 nginx/conf.d/default.conf
:
# HTTP服務(wù)器(重定向到HTTPS) server { listen 80; listen [::]:80; server_name localhost; # 在實際環(huán)境中替換為你的域名 # 將所有HTTP請求重定向到HTTPS return 301 https://$server_name$request_uri; } # HTTPS服務(wù)器 server { listen 443 ssl; listen [::]:443 ssl; server_name localhost; # 在實際環(huán)境中替換為你的域名 # SSL證書配置 ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; # SSL會話配置 ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; # SSL協(xié)議配置 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; ssl_prefer_server_ciphers off; # HSTS配置(如果需要) # add_header Strict-Transport-Security "max-age=63072000" always; # 靜態(tài)文件配置 location / { root /opt/dist; index index.html index.htm; try_files $uri $uri/ /index.html; } # 錯誤頁面配置 error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
3.2 修改Dockerfile
編輯項目根目錄下的Dockerfile:
FROM nginx:stable # 復(fù)制Nginx配置文件 COPY ./nginx/nginx.conf /etc/nginx/nginx.conf COPY ./nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf # 復(fù)制SSL證書 COPY ./nginx/ssl/nginx.crt /etc/nginx/ssl/ COPY ./nginx/ssl/nginx.key /etc/nginx/ssl/ # 復(fù)制應(yīng)用文件 COPY ./source/dist /opt/dist/ # 設(shè)置時區(qū) ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 設(shè)置證書權(quán)限 RUN chmod 600 /etc/nginx/ssl/nginx.key \ && chmod 644 /etc/nginx/ssl/nginx.crt ENTRYPOINT ["/docker-entrypoint.sh"] CMD ["nginx", "-g", "daemon off;"]
四、構(gòu)建和運行
4.1 構(gòu)建Docker鏡像
# 在項目根目錄下執(zhí)行 docker build -t my-nginx-ssl:v1 .
4.2 運行容器
docker run -d \ --name my-nginx-ssl \ -p 80:80 \ -p 443:443 \ my-nginx-ssl:v1
4.3 驗證配置
檢查容器是否正常運行:
docker ps
查看容器日志:
docker logs my-nginx-ssl
測試HTTPS連接:
curl -k https://localhost
4.4 成功訪問
ps:可以直接使用 https://ip+端口 如果使用域名要先在hosts文件中添加
五、常見問題解決
5.1 證書不受信任警告
在使用自簽名證書時,瀏覽器會顯示證書不受信任的警告,這是正常的。你可以:
在開發(fā)環(huán)境中,點擊"高級"然后"繼續(xù)前往"(具體文字根據(jù)瀏覽器不同可能有所差異)將證書添加到系統(tǒng)的受信任證書存儲中在生產(chǎn)環(huán)境中使用受信任的CA機構(gòu)頒發(fā)的證書 5.2 無法訪問HTTPS
如果無法訪問HTTPS站點,請檢查:
端口映射是否正確:
docker port my-nginx-ssl
防火墻是否開放443端口:
# Linux系統(tǒng) sudo ufw status # 如果需要開放端口 sudo ufw allow 443
證書文件權(quán)限是否正確:
# 進入容器檢查 docker exec -it my-nginx-ssl bash ls -l /etc/nginx/ssl/
5.3 配置測試
在應(yīng)用到生產(chǎn)環(huán)境之前,可以使用以下命令測試Nginx配置:
# 進入容器 docker exec -it my-nginx-ssl bash # 測試Nginx配置 nginx -t
六、安全建議
- 定期更新證書
- 使用強密碼算法
- 啟用HTTP/2
- 配置適當(dāng)?shù)腟SL會話緩存
- 考慮啟用HSTS
- 定期更新Nginx版本以修復(fù)安全漏洞
七、維護建議
證書更新
# 生成新證書 openssl x509 -req -days 365 \ -in nginx.csr \ -signkey nginx.key \ -out nginx.crt.new # 備份舊證書 mv /etc/nginx/ssl/nginx.crt /etc/nginx/ssl/nginx.crt.old mv nginx.crt.new /etc/nginx/ssl/nginx.crt # 重啟Nginx nginx -s reload
日志檢查
# 查看訪問日志 tail -f /var/log/nginx/access.log # 查看錯誤日志 tail -f /var/log/nginx/error.log
總結(jié)
- 生成自簽名SSL證書
- 配置Nginx支持HTTPS
- 使用Docker部署HTTPS服務(wù)
- 常見問題的解決方法
- 維護操作
自簽名證書適用于開發(fā)和測試環(huán)境。在生產(chǎn)環(huán)境中,建議使用受信任的CA機構(gòu)頒發(fā)的證書。
到此這篇關(guān)于在Docker環(huán)境下為Nginx配置HTTPS的文章就介紹到這了,更多相關(guān)Docker Nginx配置HTTPS內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
給debian的docker容器添加crontab定時任務(wù)
這篇文章主要介紹了給debian的docker容器添加crontab定時任務(wù)的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08在宿主機上執(zhí)行docker容器內(nèi)部的shell或程序方式
這篇文章主要介紹了在宿主機上執(zhí)行docker容器內(nèi)部的shell或程序方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11docker創(chuàng)建mongodb數(shù)據(jù)庫容器的方法
本文將通過docker創(chuàng)建一個mongodb數(shù)據(jù)庫容器,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-03-03