You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确配置NGINX反向代理运行Docker部署的Jenkins服务

问题根因

出现这个问题是两个配置缺失叠加Docker网络特性导致的:

  • Jenkins默认以根路径/作为服务上下文,所有页面跳转、静态资源请求都会生成根路径下的地址,请求不会带上/jenkins前缀,自然会匹配到NGINX上部署在/路径的Next.js应用,返回Next.js的404响应
  • 现有NGINX反代配置缺少必要的请求头传递、路径匹配规则,且127.0.0.1在Docker容器语境下指向NGINX容器自身的回环地址,默认无法直接访问宿主机或其他容器上的8080端口

分步修复方案

1. 配置Jenkins服务上下文路径

首先要让Jenkins明确自己被部署在/jenkins子路径下,根据你的部署方式调整:
如果是docker run启动Jenkins,启动命令追加环境变量参数:

-e JENKINS_OPTS="--prefix=/jenkins"

如果是docker-compose部署,在Jenkins服务的配置块中添加环境变量:

environment:
  - JENKINS_OPTS=--prefix=/jenkins

配置完成后重启Jenkins容器,先验证容器内部访问http://<Jenkins容器IP>:8080/jenkins可以正常加载Jenkins页面,确认配置生效。

2. 修复Docker网络连通性

不要在NGINX配置中使用127.0.0.1作为Jenkins服务地址:

  • 推荐创建自定义Docker桥接网络,将NGINX和Jenkins容器都接入该网络,反代地址直接写Jenkins的容器名(比如Jenkins容器名为jenkins,则反代地址为http://jenkins:8080)
  • 如果不想调整网络,也可以将Jenkins的8080端口映射到宿主机,反代地址写宿主机的Docker网桥IP(通常为172.17.0.1)
    如果要实现Jenkins仅能通过NGINX访问,不要将Jenkins的8080端口映射到公网网卡,只保留容器网络或宿主机本地的访问能力即可。

3. 替换为完整的NGINX反代配置

location /jenkins/ {
    # 注意proxy_pass末尾必须带/jenkins/路径和尾斜杠
    proxy_pass http://<替换为实际的Jenkins访问地址>:8080/jenkins/;
    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;
    proxy_redirect default;
    sendfile off;
    client_max_body_size 1024m; # 适配大文件上传、插件安装场景
}

配置完成后执行nginx -t检查语法无误,重载NGINX配置即可。


验证与排错
  • 首次验证建议使用浏览器无痕模式,避免缓存旧的302跳转规则导致异常
  • 如果仍然返回404,先检查NGINX的access.log,确认请求路径是否正确转发到Jenkins的/jenkins前缀下
  • 后续配置SSL时,只需要给NGINX的443端口配置证书即可,Jenkins侧不需要额外调整SSL配置

内容的提问来源于stack exchange,提问作者Alex Bran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 23:57:14