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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:21:53