【问题标题】:Nginx 502 Bad Gateway when Jenkins pipeline is running a docker for React app当 Jenkins 管道为 React 应用程序运行 docker 时,Nginx 502 Bad Gateway
【发布时间】:2019-10-12 14:20:25
【问题描述】:

我有一个 Ubuntu 18.04 服务器在使用 SSL 保护的 Droplet (DigitalOcean) 中运行并使用 Nginx 反向代理。还有 Jenkins 在我的服务器中运行(而不是在任何 docker 中)并配置为在我为其创建的域下访问:jenkins.testdomain.com(所有这些步骤都遵循 DO 文档)

所以目标是稍后管理 Node.js-React 应用程序的部署到我的 testdomain.com,现在,我只想创建 dist在“npm build”之后生成的文件夹,在 /var/lib/jenkins/workspace/ 中,就是这样。

现在,我可以访问我的 jenkins.testdomain.com 站点,在推送到我的 repo 后触发管道启动流程,并开始运行阶段;但是当 nginx 开始失败时,当管道到达交付阶段(让我们阅读“npm build”阶段),有时在构建阶段(“npm install”)时,它就在这里。

此时,读取 Jenkins 控制台输出时我看到它卡住并最终显示 502 Bad Gateway 错误。我需要在我的服务器控制台中运行命令systemctl restart Jenkins 才能再次访问。重新启动后,管道恢复工作,似乎完成了工作:/

在 /var/log/nginx/error.log 中我可以阅读 nginx:

*1 connect() 在连接上游时失败(111:连接被拒绝),客户端:85.146.85.194,服务器:jenkins.testdomain.com, 请求:“GET /job/Basic%20NodeJS-React%20app/8/console HTTP/1.1”, 上游:“https: //127.0.0.1:8080/job/Basic%20NodeJS-React%20app/8/console",主机: “jenkins.testdomain.com”,引用者:“https: //jenkins.testdomain.com/job/Basic%20NodeJS-React%20app/8/"

*1 SSL 握手时 SSL_do_handshake() 失败(SSL:错误:1408F10B:SSL 例程:ssl3_get_record:错误的版本号) 到上游,客户端:85.146.85.194,服务器:jenkins.testdomain.com, 请求:“GET /favicon.ico HTTP/1.1”,上游:“https: //127.0.0.1:8080/favicon.ico", 主机: "jenkins.testdomain.com", 推荐人:“https: //jenkins.testdomain.com/job/Basic%20NodeJS-React%20app/8/console" ...

在我的 node-js-react 应用程序 (from jenkins repo) 的 Jenkinsfile 中,代理如下所示:

pipeline {
    agent {
        docker {
            image 'node:6-alpine' 
            args '-p 3000:80' 
        }
    }
    environment {
            CI = 'true'
    }
    stages {
            // Build, Test, and Deliver stages
    }
}

而我的 jenkins.testdomain.com 配置(/etc/nginx/sites-available/jenkins.testdomain.com)是这样的(通过 nginx -t 的测试):

server {
    listen 80;

    root /var/www/jenkins.testdomain.com/html;
    server_name jenkins.testdomain.com www.jenkins.testdomain.com;

    location / {
      proxy_set_header    Host $host;
      proxy_set_header    X-Real-IP $remote_addr;
      proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;

      # Fix the "It appears that your reverse proxy set up is broken" error.
      proxy_pass          http://localhost:8080;

      # High timeout for testing
      proxy_connect_timeout 1200s;
      proxy_send_timeout 1200s;
      proxy_read_timeout 1200s;

      proxy_redirect      http://localhost:8080 https://jenkins.testdomain.com;

      # Required for new HTTP-based CLI
      proxy_http_version 1.1;
      proxy_request_buffering off;

      # Required for HTTP-based CLI to work over SSL
      proxy_buffering off;
    }

    # Certbot auto-generated lines...
}

任何帮助都将受到非常欢迎 3 天努力解决这个问题并使用来自 nginx 的不同 proxy_ 指令等等...... 提前致谢!

【问题讨论】:

  • 从错误日志看来,您的问题源于使用 HTTP 端口 8080 而不是 HTTPS URL 的 443。请参阅此线程以获取类似的问题解决方案stackoverflow.com/questions/53245818/…
  • 在尝试将端口从代理通道更改为 443 后,还使用上游作为您的链接 @DibakarAditya 建议.. 它显示了不同的错误,要么不允许我访问显示 500 Internal 的站点服务器错误,或者说我正在尝试将请求从 HTTP 发送到 HTTPS,因此尚未找到解决方案。

标签: node.js reactjs docker nginx jenkins-pipeline


【解决方案1】:

好吧,在我最新发布的几天后添加一个更新,我意识到服务器出现故障的主要原因和唯一原因是 droplet 中缺乏资源。

所以我使用了一个具有 1GB RAM、25GB HD 等的 Droplet(最基本的),所以我选择更新它以使用至少 2GB 的 RAM,确实,这使它像我一样工作期待。到目前为止一切正常,并且该问题没有再次发生。

如果有人遇到同样的问题,希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-18
    • 2020-04-22
    • 2014-08-04
    • 2017-07-31
    • 2020-12-14
    • 1970-01-01
    • 2019-08-10
    • 2021-03-29
    相关资源
    最近更新 更多