如何在Docker環(huán)境下為Nginx配置HTTPS
前言
配置HTTPS已經(jīng)成為網(wǎng)站部署的必要步驟。本教程將詳細(xì)介紹如何在Docker環(huán)境下為Nginx配置HTTPS,使用自簽名證書(shū)來(lái)實(shí)現(xiàn)加密通信。雖然在生產(chǎn)環(huán)境中建議使用權(quán)威CA機(jī)構(gòu)頒發(fā)的證書(shū),但在開(kāi)發(fā)測(cè)試或內(nèi)網(wǎng)環(huán)境中,自簽名證書(shū)是一個(gè)很好的選擇。
前置條件
在開(kāi)始之前,確保系統(tǒng)已經(jīng)安裝:
Docker(建議版本 20.10 或更高)OpenSSL(用于生成證書(shū))
可以通過(guò)以下命令檢查版本:
docker --version openssl version
一、項(xiàng)目結(jié)構(gòu)
項(xiàng)目的目錄結(jié)構(gòu):
project/
├── Dockerfile
├── nginx/
│ ├── nginx.conf # Nginx主配置文件
│ ├── conf.d/
│ │ └── default.conf # 默認(rèn)站點(diǎn)配置
│ └── ssl/ # 將要?jiǎng)?chuàng)建的SSL證書(shū)目錄
│ ├── nginx.crt # 證書(shū)文件
│ └── nginx.key # 私鑰文件
├── source/
└── dist/ # 編譯后的靜態(tài)文件二、生成自簽名證書(shū)
2.1 創(chuàng)建證書(shū)目錄
# 在項(xiàng)目根目錄下執(zhí)行 mkdir -p nginx/ssl cd nginx/ssl
2.2 生成SSL證書(shū)和私鑰
使用OpenSSL生成自簽名證書(shū)。這個(gè)過(guò)程分為幾個(gè)步驟:
生成私鑰:
openssl genrsa -out nginx.key 2048
生成證書(shū)簽名請(qǐng)求(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ù)說(shuō)明:
- /C:國(guó)家代碼(例如CN代表中國(guó))
- /ST:省/州名
- /L:城市名
- /O:組織名稱
- /OU:部門名稱
- /CN:域名
使用私鑰簽名證書(shū):
openssl x509 -req -days 3650 \
-in nginx.csr \
-signkey nginx.key \
-out nginx.crt2.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; # 在實(shí)際環(huán)境中替換為你的域名
# 將所有HTTP請(qǐng)求重定向到HTTPS
return 301 https://$server_name$request_uri;
}
# HTTPS服務(wù)器
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name localhost; # 在實(shí)際環(huán)境中替換為你的域名
# SSL證書(shū)配置
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
# SSL會(huì)話配置
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;
}
# 錯(cuò)誤頁(yè)面配置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}3.2 修改Dockerfile
編輯項(xiàng)目根目錄下的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證書(shū)
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è)置時(shí)區(qū)
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 設(shè)置證書(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)建和運(yùn)行
4.1 構(gòu)建Docker鏡像
# 在項(xiàng)目根目錄下執(zhí)行 docker build -t my-nginx-ssl:v1 .
4.2 運(yùn)行容器
docker run -d \
--name my-nginx-ssl \
-p 80:80 \
-p 443:443 \
my-nginx-ssl:v14.3 驗(yàn)證配置
檢查容器是否正常運(yùn)行:
docker ps
查看容器日志:
docker logs my-nginx-ssl
測(cè)試HTTPS連接:
curl -k https://localhost
4.4 成功訪問(wèn)

ps:可以直接使用 https://ip+端口 如果使用域名要先在hosts文件中添加
五、常見(jiàn)問(wèn)題解決
5.1 證書(shū)不受信任警告
在使用自簽名證書(shū)時(shí),瀏覽器會(huì)顯示證書(shū)不受信任的警告,這是正常的。你可以:
在開(kāi)發(fā)環(huán)境中,點(diǎn)擊"高級(jí)"然后"繼續(xù)前往"(具體文字根據(jù)瀏覽器不同可能有所差異)將證書(shū)添加到系統(tǒng)的受信任證書(shū)存儲(chǔ)中在生產(chǎn)環(huán)境中使用受信任的CA機(jī)構(gòu)頒發(fā)的證書(shū) 5.2 無(wú)法訪問(wèn)HTTPS
如果無(wú)法訪問(wèn)HTTPS站點(diǎn),請(qǐng)檢查:
端口映射是否正確:
docker port my-nginx-ssl
防火墻是否開(kāi)放443端口:
# Linux系統(tǒng) sudo ufw status # 如果需要開(kāi)放端口 sudo ufw allow 443
證書(shū)文件權(quán)限是否正確:
# 進(jìn)入容器檢查 docker exec -it my-nginx-ssl bash ls -l /etc/nginx/ssl/
5.3 配置測(cè)試
在應(yīng)用到生產(chǎn)環(huán)境之前,可以使用以下命令測(cè)試Nginx配置:
# 進(jìn)入容器 docker exec -it my-nginx-ssl bash # 測(cè)試Nginx配置 nginx -t
六、安全建議
- 定期更新證書(shū)
- 使用強(qiáng)密碼算法
- 啟用HTTP/2
- 配置適當(dāng)?shù)腟SL會(huì)話緩存
- 考慮啟用HSTS
- 定期更新Nginx版本以修復(fù)安全漏洞
七、維護(hù)建議
證書(shū)更新
# 生成新證書(shū)
openssl x509 -req -days 365 \
-in nginx.csr \
-signkey nginx.key \
-out nginx.crt.new
# 備份舊證書(shū)
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日志檢查
# 查看訪問(wèn)日志 tail -f /var/log/nginx/access.log # 查看錯(cuò)誤日志 tail -f /var/log/nginx/error.log
總結(jié)
- 生成自簽名SSL證書(shū)
- 配置Nginx支持HTTPS
- 使用Docker部署HTTPS服務(wù)
- 常見(jiàn)問(wèn)題的解決方法
- 維護(hù)操作
自簽名證書(shū)適用于開(kāi)發(fā)和測(cè)試環(huán)境。在生產(chǎn)環(huán)境中,建議使用受信任的CA機(jī)構(gòu)頒發(fā)的證書(shū)。
到此這篇關(guān)于在Docker環(huán)境下為Nginx配置HTTPS的文章就介紹到這了,更多相關(guān)Docker Nginx配置HTTPS內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- docker部署nginx并實(shí)現(xiàn)https教程
- Docker?Compose+Nginx+Certbot自動(dòng)化部署HTTPS的詳細(xì)指南
- Nginx配置ssl支持https全過(guò)程(docker版)
- docker部署nginx并且實(shí)現(xiàn)https的方法步驟
- ubuntu服務(wù)器部署gitlab docker并配置nginx反向代理https訪問(wèn)的過(guò)程解析
- docker nginx + https 子域名配置詳細(xì)教程
- 為docker中的nginx配置https的方法步驟
- docker安裝nginx并配置通過(guò)https訪問(wèn)的方法
- Docker部署Nginx HTTPS服務(wù)的實(shí)現(xiàn)步驟
相關(guān)文章
Docker提示permission?denied錯(cuò)誤的解決方案
這篇文章主要給大家介紹了關(guān)于Docker提示permission?denied錯(cuò)誤的解決方案,出現(xiàn)這個(gè)問(wèn)題是因?yàn)樗拗鳈C(jī)的當(dāng)前運(yùn)行用戶和docker容器里面的運(yùn)行用戶不一致導(dǎo)致訪問(wèn)權(quán)限問(wèn)題,需要的朋友可以參考下2023-08-08
linux上安裝Docker(非常簡(jiǎn)單的安裝方法)
今天小編就為大家分享一篇關(guān)于linux上安裝Docker(非常簡(jiǎn)單的安裝方法),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-04-04
docker打造Ubuntu20.04 ssh遠(yuǎn)程連接鏡像的實(shí)現(xiàn)
本文主要介紹了docker打造Ubuntu20.04 ssh遠(yuǎn)程連接鏡像的實(shí)現(xiàn),再也不用電腦上裝了一堆的軟件(mysql、redis、elk等),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-07-07
詳解Centos7 下建立 Docker 橋接網(wǎng)絡(luò)
本篇文章主要介紹了詳解Centos7 下建立 Docker 橋接網(wǎng)絡(luò),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
解決calico-apiserver認(rèn)證失敗問(wèn)題
文章解決Calico APIServer狀態(tài)異常和命名空間刪除報(bào)錯(cuò)問(wèn)題,指出需在三臺(tái)Master節(jié)點(diǎn)修改kube-apiserver的--requestheader-allowed-names參數(shù),允許aggregator CN,此參數(shù)控制聚合層代理連接的客戶端證書(shū)CN白名單2025-09-09
基于?Docker?和?Flask?構(gòu)建高并發(fā)微服務(wù)架構(gòu)的實(shí)現(xiàn)
本文主要介紹了基于?Docker?和?Flask?構(gòu)建高并發(fā)微服務(wù)架構(gòu),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03
docker配置node項(xiàng)目的實(shí)現(xiàn)步驟
本文主要介紹了docker配置node項(xiàng)目的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01

