当前位置: 首页 > news >正文

【已解决】自建证书实现 HTTPS

项目背景

本文档基于实际项目经验编写,适用于以下架构:

  • 部署方式:容器化部署(Docker/Podman)

  • 服务架构

    • 前端容器:web-app(内置 Nginx)

    • 后端容器:web-api

  • Nginx 配置:配置文件nginx.conf存放在 Jenkins Pipeline 中,通过writeFile动态生成

  • 部署流程:Jenkins Pipeline 自动构建镜像并部署

本文档适用场景:你只需要在服务器上生成证书,然后修改 Jenkins 中的 Nginx 配置和 Docker 运行参数,即可为前端容器启用 HTTPS。


概述

本文档详细介绍如何在 Linux 环境下使用自签名证书为容器化 Web 应用配置 HTTPS 访问。适用于内网环境或测试环境,无需购买正式 SSL 证书

一、环境准备

1.1 前提条件

  • Linux 服务器(Ubuntu/CentOS/RHEL)

  • Docker 环境已安装

  • Nginx 容器(或宿主机 Nginx)

  • OpenSSL 工具

1.2 检查 OpenSSL

这里是在宿主机(即部署前端容器所在的Linux服务器)

# 检查 OpenSSL 是否已安装 openssl version # 如果未安装,执行以下命令安装 # Ubuntu/Debian sudo apt install openssl -y # CentOS/RHEL sudo yum install openssl -y

二、生成自签名证书

2.1 创建证书目录

# 创建证书存储目录 mkdir -p ~/nginx-ssl/ssl cd ~/nginx-ssl/ssl

2.2 生成证书

# 生成自签名证书(有效期365天) openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout server.key \ -out server.crt \ -subj "/CN=192.168.102.117"

三、设置证书权限

# 证书文件设置为 644 权限(所有人可读) chmod 644 server.crt # 私钥文件设置为 600 权限(仅所有者可读写) chmod 600 server.key # 验证权限 ls -la

预期输出

-rw-r--r-- 1 user user 1234 Mar 31 10:00 server.crt -rw------- 1 user user 1675 Mar 31 10:00 server.key

四、修改 Jenkins Pipeline 配置

4.1 修改 Nginx 配置文件

在 Jenkins Pipeline 的Prepare nginx config filestage 中,将 Nginx 配置修改为支持 HTTPS 的版本:

stage ('Prepare nginx config file') { script { // 定义变量(请修改为你的实际值) def SERVER_IP = "${SERVER_IP}" // 服务器 IP def BACKEND_PORT = "${BACKEND_PORT}" // 后端 API 端口 sh 'rm -rf ${NGINX_CONFIG}' writeFile file: '${NGINX_CONFIG}', text: """ # HTTP server - redirect to HTTPS server { listen 80; listen [::]:80; server_name ${SERVER_IP}; return 301 https://\$server_name\$request_uri; } # HTTPS server server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name ${SERVER_IP}; # SSL certificate ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; # SSL configuration ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; # Frontend static files directory root /usr/share/nginx/html; index index.html; # Logs access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; # API proxy for backend location /api { client_max_body_size 0; proxy_pass http://${SERVER_IP}:${BACKEND_PORT}; proxy_set_header Host \$host; proxy_set_header X-Real-IP \$remote_addr; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto \$scheme; } # Frontend routing (SPA support) location / { try_files \$uri \$uri/ /index.html; } } """ } }

参考

关键配置说明

配置说明
server_name ${SERVER_IP}使用 Jenkins 变量替换服务器 IP
return 301 https://\$server_name\$request_uriHTTP 自动跳转到 HTTPS(注意\$转义)
ssl_certificatessl_certificate_key

证书路径(容器内路径)

proxy_pass http://${SERVER_IP}:${BACKEND_PORT}后端 API 地址

4.2 修改 Docker 运行命令

在 Jenkins Pipeline 的Docker buildstage 中,添加 443 端口映射和证书挂载:

stage ('Docker build') { sh """ CI=false # 停止并删除旧容器 docker stop ${FRONTEND_CONTAINER} || true docker container rm ${FRONTEND_CONTAINER} || true # 构建新镜像 docker build -t ${PROJECT_NAME} . # 运行容器(添加 HTTPS 支持) docker run -d \\ --name ${FRONTEND_CONTAINER} \\ -p ${HTTP_PORT}:80 \\ -p 443:443 \\ -v ${CERT_DIR}:/etc/nginx/ssl:ro \\ ${PROJECT_NAME} """ }

参考

关键参数说明

参数说明
-p ${HTTP_PORT}:80映射 HTTP 端口(保持原有访问方式)
-p 443:443映射 HTTPS 端口(新增)
-v ${CERT_DIR}:/etc/nginx/ssl:ro

挂载证书目录(只读)

五、部署与验证

5.1 执行 Jenkins Pipeline

  1. 提交代码到 Git 仓库

  2. 在 Jenkins 中触发构建

  3. 观察构建日志,确认无错误

5.2 验证容器状态

# 查看容器运行状态 docker ps | grep ${FRONTEND_CONTAINER}

5.3 测试 HTTPS 访问

在浏览器访问你的测试地址,可进入https,但会显示不安全

六、客户端安装证书

将证书下载到本地,并导入到浏览器安装,即可得到一个安全的HTTPS测试地址

http://www.jsqmd.com/news/573592/

相关文章:

  • OpenClaw对接Qwen3-4B实战:5步完成本地模型调用与自动化任务
  • OpenClaw自动化测试方案:Qwen3.5-9B执行APP遍历与异常截图
  • 2026年爆款论文降重工具实测TOP5,AIGC率最低降至5%,实测超实用!
  • 电散热器为何能适配多场景采暖?
  • 【2026最新】微软常用运行库合集下载安装教程 | 微软运行库合集官网下载,系统必备
  • Java应用等保三级合规改造:3天完成代码层、配置层、运维层全栈优化(附Checklist)
  • 解锁NVIDIA Profile Inspector潜能:显卡性能调校的终极指南
  • 基于Wan 3D Causal VAE(Show-o2)的模型,重新完整地分析 10分钟的视频 对应多少 vison token
  • SEO 优化常用的主要方法有哪些
  • 上海 seo 优化公司怎么选
  • Ryzen SDT调试工具:解锁AMD处理器隐藏性能的终极指南
  • 保姆级教程:用Rust和Clap从零打造一个能管理API密钥的CLI工具(附完整源码)
  • 2026降AIGC率工具实测:10款好用工具推荐(论文AI痕迹重必看)
  • 为什么99%的Python团队还没用上AOT?2026年官方方案的3大硬伤与2个绕过技巧(含patch diff与CI集成脚本)
  • C++ 笔记 赋值兼容原则(公有继承)(面向对象)
  • Wan 3D Causal VAE:一篇讲清视觉 token、时间压缩、3D Causal 卷积
  • AI 知识库云端搭建
  • OpenClaw安全防护指南:Qwen3-14b_int4_awq任务权限管控
  • 国内专业的铣打机厂家哪家专业
  • 实战演练:基于快马平台快速构建可部署的web版cad室内设计应用
  • 教师实用教程:HTML如何实现学生成绩单查询功能的生成与搭建
  • 2026年河北保冷管托市场深度解析:五大实力服务商综合评测与选型指南 - 2026年企业推荐榜
  • 第一次训练周赛I题分析
  • 国内流行的博客、微博汇总
  • 2026年浙江方型负压风机/屋顶负压风机厂家选择推荐 - 品牌宣传支持者
  • 2026年椭圆机选购指南:深度解析五大源头厂家,谁才是性价比之王? - 2026年企业推荐榜
  • 合肥企业保洁外包选型指南:2026年避坑与优选策略 - 2026年企业推荐榜
  • [AI/Agent/社交] AI Agent社交网络产品:MoltBook => InStreet
  • 2026年比较好的欧式悬挂起重机品牌厂家推荐 - 品牌宣传支持者
  • 企业AI定制开发:以工业场景为核心,赋能全行业数智化转型