Jenkins经Nginx反向代理无法加载静态资源,求配置修正方案
解决Jenkins通过Nginx反向代理后静态资源无法加载的问题
我之前踩过完全一样的坑!你的问题核心是Jenkins不知道自己是通过/jenkins子路径被反向代理的,导致它生成的静态资源URL还是用根路径(比如/resource.css),而Nginx没正确映射这些请求,加上原配置缺少关键的代理头信息,才会出现直接能访问资源但页面加载失败的情况。下面给你分步解决的方案:
第一步:修改Jenkins的上下文路径(关键)
因为你是用rpm包安装的Jenkins,配置文件在/etc/sysconfig/jenkins,打开这个文件找到JENKINS_ARGS这一行,在后面加上--prefix=/jenkins,修改后大概是这样:
JENKINS_ARGS="--prefix=/jenkins --httpPort=8080"
修改完成后重启Jenkins服务:
systemctl restart jenkins
这一步是让Jenkins知道自己的访问根路径是/jenkins,这样它生成的所有静态资源、接口URL都会自动带上这个前缀,从根源上解决路径不匹配的问题。
第二步:更新Nginx的代理配置
你的原配置只做了基础的转发,缺少必要的代理头和路径匹配规则,把location /jenkins块替换成下面的配置:
location /jenkins { # 注意这里要和Jenkins的prefix对应,末尾不要加斜杠 proxy_pass http://127.0.0.1:8080/jenkins; # 传递真实的请求头,让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; # 支持WebSocket,Jenkins的实时日志、构建状态更新需要这个 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 延长超时时间,避免长构建任务时连接被Nginx断开 proxy_connect_timeout 10s; proxy_read_timeout 3600s; proxy_send_timeout 3600s; }
为什么原配置不行?
- 原
proxy_pass http://127.0.0.1:8080/会把/jenkins/resource.css转换成/resource.css发给Jenkins,但Jenkins现在已经设置了/jenkins作为前缀,它只会处理/jenkins/resource.css的请求,所以路径不匹配。 - 缺少
Host等代理头,Jenkins会误以为自己是被直接访问127.0.0.1:8080,生成的资源URL会是http://127.0.0.1:8080/resource.css,浏览器自然加载不到。
第三步:验证配置
更新Nginx配置后,重载生效:
nginx -s reload
现在访问http://1.2.3.4/jenkins,应该就能看到正常加载CSS、图片的Jenkins页面了,直接访问资源URL也依然有效。
备选方案(不推荐)
如果暂时不能重启Jenkins,可以尝试用Nginx的sub_filter替换Jenkins输出中的根路径,但这种方法容易漏掉动态生成的URL,可靠性不如修改Jenkins前缀:
location /jenkins { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; sub_filter 'href="/' 'href="/jenkins/'; sub_filter 'src="/' 'src="/jenkins/'; sub_filter_once off; # 加上其他必要的代理头和WebSocket配置 }
还是优先推荐修改Jenkins前缀的方案,一劳永逸。
内容的提问来源于stack exchange,提问作者xring
相关产品推荐
相关产品推荐

