您当前的位置:首页 > 网站建设 > 网站维护
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax | jQuery | 小程序 |

如何在Docker环境下为Nginx配置HTTPS

51自学网 2025-02-05 12:16:14
  网站维护

前言

配置HTTPS已经成为网站部署的必要步骤。本教程将详细介绍如何在Docker环境下为Nginx配置HTTPS,使用自签名证书来实现加密通信。虽然在生产环境中建议使用权威CA机构颁发的证书,但在开发测试或内网环境中,自签名证书是一个很好的选择。

前置条件

在开始之前,确保系统已经安装:

Docker(建议版本 20.10 或更高)OpenSSL(用于生成证书)

可以通过以下命令检查版本:

docker --versionopenssl version

一、项目结构

项目的目录结构:

project/├── Dockerfile├── nginx/│   ├── nginx.conf                # Nginx主配置文件│   ├── conf.d/│   │   └── default.conf         # 默认站点配置│   └── ssl/                     # 将要创建的SSL证书目录│       ├── nginx.crt            # 证书文件│       └── nginx.key            # 私钥文件├── source/    └── dist/                    # 编译后的静态文件

二、生成自签名证书

2.1 创建证书目录

# 在项目根目录下执行mkdir -p nginx/sslcd 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"

参数说明:

  • /C:国家代码(例如CN代表中国)
  • /ST:省/州名
  • /L:城市名
  • /O:组织名称
  • /OU:部门名称
  • /CN:域名

使用私钥签名证书:

openssl x509 -req -days 3650 /    -in nginx.csr /    -signkey nginx.key /    -out nginx.crt

2.3 设置正确的权限

chmod 600 nginx.keychmod 644 nginx.crt

三、配置Nginx

3.1 创建新的Nginx配置文件

编辑 nginx/conf.d/default.conf

# HTTP服务器(重定向到HTTPS)server {    listen 80;    listen [::]:80;    server_name localhost;  # 在实际环境中替换为你的域名    # 将所有HTTP请求重定向到HTTPS    return 301 https://$server_name$request_uri;}# HTTPS服务器server {    listen 443 ssl;    listen [::]:443 ssl;    server_name localhost;  # 在实际环境中替换为你的域名    # 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协议配置    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;    # 静态文件配置    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# 复制Nginx配置文件COPY ./nginx/nginx.conf /etc/nginx/nginx.confCOPY ./nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf# 复制SSL证书COPY ./nginx/ssl/nginx.crt /etc/nginx/ssl/COPY ./nginx/ssl/nginx.key /etc/nginx/ssl/# 复制应用文件COPY ./source/dist /opt/dist/# 设置时区ENV TZ=Asia/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone# 设置证书权限RUN chmod 600 /etc/nginx/ssl/nginx.key /    && chmod 644 /etc/nginx/ssl/nginx.crtENTRYPOINT ["/docker-entrypoint.sh"]CMD ["nginx", "-g", "daemon off;"]

四、构建和运行

4.1 构建Docker镜像

# 在项目根目录下执行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 证书不受信任警告

在使用自签名证书时,浏览器会显示证书不受信任的警告,这是正常的。你可以:

在开发环境中,点击"高级"然后"继续前往"(具体文字根据浏览器不同可能有所差异)将证书添加到系统的受信任证书存储中在生产环境中使用受信任的CA机构颁发的证书 5.2 无法访问HTTPS

如果无法访问HTTPS站点,请检查:

端口映射是否正确:

docker port my-nginx-ssl

防火墙是否开放443端口:

# Linux系统sudo ufw status# 如果需要开放端口sudo ufw allow 443

证书文件权限是否正确:

# 进入容器检查docker exec -it my-nginx-ssl bashls -l /etc/nginx/ssl/

5.3 配置测试

在应用到生产环境之前,可以使用以下命令测试Nginx配置:

# 进入容器docker exec -it my-nginx-ssl bash# 测试Nginx配置nginx -t

六、安全建议

  • 定期更新证书
  • 使用强密码算法
  • 启用HTTP/2
  • 配置适当的SSL会话缓存
  • 考虑启用HSTS
  • 定期更新Nginx版本以修复安全漏洞

七、维护建议

证书更新

# 生成新证书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.oldmv nginx.crt.new /etc/nginx/ssl/nginx.crt# 重启Nginxnginx -s reload

日志检查

# 查看访问日志tail -f /var/log/nginx/access.log# 查看错误日志tail -f /var/log/nginx/error.log

总结

  • 生成自签名SSL证书
  • 配置Nginx支持HTTPS
  • 使用Docker部署HTTPS服务
  • 常见问题的解决方法
  • 维护操作

自签名证书适用于开发和测试环境。在生产环境中,建议使用受信任的CA机构颁发的证书。


下载地址:
clickhouse远程连接以及用户名密码设置方式
docker容器增加端口映射全过程(修改配置文件方式)
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。