Nginx反向代理Jenkins配置求助:端口丢失与跳转异常
解决Jenkins反向代理(Nginx)的重定向与配置警告问题
从你的描述和日志来看,核心问题是Jenkins的URL配置与Nginx的反向代理头部未正确对齐,导致登录重定向丢失端口、反向代理检测警告,以及页面加载异常。下面是分步解决方案:
1. 修正Jenkins的根URL配置
首先确保Jenkins的JenkinsLocationConfiguration.xml里的jenkinsUrl完全匹配外部访问地址,包括端口和末尾的斜杠:
<jenkins.model.JenkinsLocationConfiguration> <adminAddress>[my mail address]</adminAddress> <jenkinsUrl>http://www.devportal.org:90/ci/</jenkinsUrl> </jenkins.model.JenkinsLocationConfiguration>
注意末尾的
/,要和Nginx的location /ci/路径保持一致,避免路径拼接错误。
修改后重启Jenkins容器:
docker restart jenkins_ci
2. 调整Nginx反向代理配置
你的Nginx配置里几个关键头部和路径匹配需要修正,以下是完整的正确配置:
server { listen 90; server_name www.devportal.org; access_log /var/log/nginx/reverse-access.log; error_log /var/log/nginx/reverse-error.log; # 处理Jenkins静态资源的重写(优化资源加载) location ~ "^/ci/static/[0-9a-fA-F]{8}\/(.*)$" { rewrite "^/ci/static/[0-9a-fA-F]{8}\/(.*)" /ci/$1 last; } location /ci/ { # 确保proxy_pass的路径末尾和location一致,避免路径截断 proxy_pass http://jenkins_ci:8080/ci/; # 传递正确的Host头部,包含端口 proxy_set_header Host $host:$server_port; # 传递真实客户端IP proxy_set_header X-Real-IP $remote_addr; # 传递代理链IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递协议(后续HTTPS配置时保持$scheme即可) proxy_set_header X-Forwarded-Proto $scheme; # 关键:传递包含端口的转发主机,解决Jenkins检测警告 proxy_set_header X-Forwarded-Host $host:$server_port; # 延长超时时间,避免Jenkins页面加载超时 proxy_read_timeout 120; # 修正重定向:将Jenkins内部的URL替换为外部访问地址 proxy_redirect http://jenkins_ci:8080/ci/ http://www.devportal.org:90/ci/; # 支持Jenkins HTTP CLI的必要配置 proxy_http_version 1.1; proxy_request_buffering off; proxy_set_header Connection ""; } }
关键配置说明:
proxy_pass路径对齐:location /ci/和proxy_pass http://jenkins_ci:8080/ci/都以/结尾,确保请求路径正确传递(比如/ci/login会转发到http://jenkins_ci:8080/ci/login)。X-Forwarded-Host包含端口:之前的配置里X-Forwarded-Host只传了$host,导致Jenkins生成的URL丢失端口,现在改成$host:$server_port,让Jenkins知道外部访问的完整地址。proxy_redirect精准匹配:替换Jenkins内部返回的重定向地址,确保跳转时带上正确的端口和路径。
3. 验证配置并重启服务
检查Nginx配置语法:
docker exec nginx_revproxy nginx -t
如果无错误,重启Nginx:
docker exec nginx_revproxy nginx -s reload
问题根源复盘
- 登录重定向丢端口:因为Jenkins收到的
X-Forwarded-Host没有端口,生成的重定向URL缺省了90端口。 - 反向代理配置警告:Jenkins的反向代理检测会对比请求头部的
X-Forwarded-Host和自身配置的jenkinsUrl,两者不一致就会触发警告。 - 系统配置页加载不全:路径匹配错误或超时时间过短,导致部分静态资源请求失败或超时。
按照上述配置调整后,应该能解决所有三个问题。
内容的提问来源于stack exchange,提问作者JiElPe-Fr38
相关产品推荐
相关产品推荐

