【问题标题】:Need help about nginx reverse proxy (and jenkins ?) configuration需要有关 nginx 反向代理(和 jenkins ?)配置的帮助
【发布时间】:2019-07-19 12:42:44
【问题描述】:

我正在尝试使用 2 个 docker 容器设置一个基本模型(用于培训):

  • 一个与 nginx 的
  • 詹金斯一个

nginx 用作反向容器(下一步将是 https 前端)。 jenkins 应该可以作为 www.devportal.org:90/ci 公开访问

我已经部分成功了。我的意思是我可以使用给定的地址访问它。但是……

  • 当我尝试与管理员用户连接时,我得到了登录页面。但是在填写用户/密码时,我被重定向到http://www.devportal.org/ci/。

  • 如果我将端口添加到此地址,我将获得实例主页,以管理员用户身份连接。

  • 当我选择管理页面时,我看到一条警告消息,指出我的反向代理配置已损坏。

  • 另外,在配置系统时,页面会显示,但一直加载不完。

我尝试了 nginx 的各种配置,但都没有给我正确的结果。 Jenkins Location URL 设置为 nginx 已知的实例地址。 至于两者都在链接到专用 docker 网络的容器中,jenkins 被称为 jenkins_ci,地址是http://jenkins_ci:8080/ci/。 如果我运行: docker exec nginx_revproxy wget http://jenkins_ci:8080/ci/ 我实际上得到了主页。

这是我的 nginx 配置(在:/etc/nginx/conf.d/reverse_proxy.conf)

# Reverse proxy configuration for one jenkins server
# Nginx listen public traffic on port 90 and forward to jenkins container address on port 8080
server {
        listen 90;

        access_log /var/log/nginx/reverse-access.log;
        error_log /var/log/nginx/reverse-error.log;

        location ^~ /ci/ {
                proxy_set_header        Host $host:$server_port;
                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_pass http://jenkins_ci:8080/ci/;

                # Fix the "It appears that your reverse proxy set up is broken" error.
                proxy_set_header X-Forwarded-Host $host;
                proxy_read_timeout  90;
                proxy_redirect      http://jenkins_ci:8080/ http://www.devportal.org:90/;
                # Required for new HTTP-based CLI
                proxy_http_version 1.1;
                proxy_request_buffering off;
        }
}

当在 connexion 获得错误页面时,我在 nginx 容器日志中看到了这个

172.17.0.1 - - [19/Jul/2019:12:32:04 +0000] "GET /ci/ HTTP/1.1" 404 153 "http://www.devportal.org:90/ci/login?from=/ci/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0" "-" 2019/07/19 12:32:04 [error] 7#7: *40 "/usr/share/nginx/html/ci/index.html" is not found (2: No such file or directory), client: 172.17.0.1, server: localhost, request: "GET /ci/ HTTP/1.1", host: "www.devportal.org", referrer: "http://www.devportal.org:90/ci/login?from=/ci/"

在 jenkins 容器日志上,我还有: Jul 19, 2019 2:18:25 PM hudson.diagnosis.ReverseProxySetupMonitor getTestForReverseProxySetup WARNING: http://www.devportal.org/ci/manage vs. http:

附加信息 使用 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;

    location ~ "^/static/[0-9a-fA-F]{8}\/(.*)$" {
        #rewrite all static files into requests to the root
        #E.g /static/12345678/css/something.css will become /css/something.css
        rewrite "^/static/[0-9a-fA-F]{8}\/(.*)" /$1 last;
     }

        location /ci/ {
        proxy_pass      http://jenkins_ci:8080;
        proxy_set_header        Host $host:$server_port;
        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;
        # Fix the "It appears that your reverse proxy set up is broken" error.
        proxy_set_header X-Forwarded-Host $host;
        proxy_read_timeout  90;
        proxy_redirect      http://jenkins_ci:8080/ http://www.devportal.org:90/;
            # Required for new HTTP-based CLI
        proxy_http_version 1.1;
        proxy_request_buffering off;
        proxy_set_header Connection ""; # Clear for keepalive
    }
}

和

<jenkins.model.JenkinsLocationConfiguration>
  <adminAddress>[my mail address]</adminAddress>
  <jenkinsUrl>http://www.devportal.org:90/ci</jenkinsUrl>
</jenkins.model.JenkinsLocationConfiguration>

在

jenkins.model.JenkinsLocationConfiguration.xml

我在 jenkins 日志中的错误消息方面取得了一些进展:

Jul 22, 2019 11:59:35 AM hudson.diagnosis.ReverseProxySetupMonitor getTestForReverseProxySetup
WARNING: http://www.devportal.org/ci/manage vs. http://www.devportal.org:90/ci/manage

现在,我只丢失了端口号(我之前丢失了整个域名)。 注意,有无proxy_redirect都是一样的。

【问题讨论】:

  • 我已经阅读了相关的jenkins page 消除了与https相关的内容。我也在这里看到了关于 nginx 反向代理的各种答案......但一直无法找到解决方案。

标签: docker jenkins configuration nginx-reverse-proxy


【解决方案1】:

所以 Jenkins URL 应该设置为您的用户在描述中看到的内容:

Optionally specify the HTTP address of the Jenkins installation, such as 
http://yourhost.yourdomain/jenkins/. This value is used to let Jenkins know how 
to refer to itself, ie. to display images or to create links in emails. This is 
necessary because Jenkins cannot reliably detect such a URL from within itself

所以在你的情况下:http://www.devportal.org:90/

该行可能应该删除,因为我认为不需要它:

proxy_redirect http://jenkins_ci:8080/ http://www.devportal.org:90/;

你应该像这样从代理通道中删​​除'/ci'

proxy_pass http://jenkins_ci:8080;

【讨论】:

  • 嗯,谢谢你的帮助。由于我已将 jenkins 实例设置为 /ci 并且容器以 JENKINS_OPTS="--prefix /ci" 启动(它出现在 ps cmde 结果中),我猜配置中的 jenkins URL 应该是:@987654325 @ 尽管如此,我在应用您的建议方面没有任何进展。我添加了另一个错误的行为。断开连接时,我被重定向到 www.devportal.org/ci。端口号丢失。
猜你喜欢
  • 2023-03-19
  • 2012-01-07
  • 1970-01-01
  • 2021-06-11
  • 1970-01-01
  • 2017-03-20
  • 2011-05-24
  • 2023-04-03
  • 1970-01-01
相关资源
最近更新 更多