【发布时间】: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