使用docker-compose实现Jenkins的HTTP自动重定向至HTTPS
你当前配置中JENKINS_OPTS设置了--httpPort=-1,直接禁用了Jenkins的HTTP监听端口,宿主机映射的80端口无服务响应,无法实现HTTP自动跳转HTTPS,以下是两种可直接落地的配置方案:
方案一:使用Jenkins原生重定向(无额外组件,配置最简)
该方案利用Jenkins内置跳转能力,无需额外部署反向代理,适配你已准备好JKS格式证书的场景:
- 修改docker-compose.yml内的
JENKINS_OPTS配置,开启HTTP端口监听,启用强制HTTPS跳转,补全JKS证书加载参数,将原有配置:
JENKINS_OPTS: --httpPort=-1 --httpsPort=8443
替换为:
JENKINS_OPTS: --httpPort=80 --httpsPort=8443 --httpsKeyStore=/var/lib/jenkins/dcsjenkins.jks --httpsKeyStorePassword=替换为你实际的JKS证书密码 --httpRedirectToHttps=true
若你的JKS证书配置了非默认别名,追加参数
--httpsKeyStoreAlias=你的证书别名即可
- 保存配置后,在docker-compose.yml所在目录执行以下命令重启服务:
docker-compose up -d - 验证:访问
http://你的服务域名/实例公网IP,会自动返回302状态码跳转到HTTPS地址。
若跳转后地址携带
:8443端口号,登录Jenkins后进入「系统管理-系统配置」,将Jenkins URL修改为https://你的服务域名/保存即可。
注意:提前确认GCP实例的VPC防火墙、系统内部防火墙(如firewalld/ufw)已放开80、443、50000端口的入站规则
方案二:使用Nginx反向代理实现跳转(配置灵活,适合自定义安全策略场景)
如果需要配置HSTS、安全响应头、多服务转发等能力,可新增Nginx层统一处理HTTPS终止和跳转,Jenkins仅监听内部HTTP端口:
- 调整Jenkins服务的端口映射,不直接暴露80/443到公网,仅保留内部通信端口,将ports配置修改为:
ports: - "127.0.0.1:8080:8080" - "50000:50000"
同时将JENKINS_OPTS修改为:
JENKINS_OPTS: --httpPort=8080
- 在docker-compose.yml中新增Nginx服务,配置80端口自动跳转HTTPS、443端口反向代理到Jenkins,Nginx可直接使用PEM格式证书,无需转换为JKS:
services: nginx: image: nginx:alpine container_name: jenkins-nginx restart: always ports: - "80:80" - "443:443" volumes: - ./nginx/conf.d:/etc/nginx/conf.d - ../opt/cert:/etc/nginx/cert # 原有jenkins服务配置保留即可
在./nginx/conf.d目录下新建jenkins.conf配置文件,参考内容如下:
server { listen 80; server_name 你的服务域名; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name 你的服务域名; ssl_certificate /etc/nginx/cert/你的证书公钥文件.pem; ssl_certificate_key /etc/nginx/cert/你的证书私钥文件.key; # 可按需追加SSL协议版本、加密套件等优化配置 location / { proxy_pass http://jenkins:8080; 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 https; } }
- 执行
docker-compose up -d启动新增的Nginx服务、重启调整后的Jenkins服务即可生效。
内容的提问来源于stack exchange,提问作者Malith Ileperuma
相关产品推荐
相关产品推荐

