关于如何让NGINX与Jenkins合作,我至少尝试了六个示例。我最近的NGINX配置基于以下示例:
https://wiki.jenkins.io/display/JENKINS/Running+Jenkins+behind+Nginx
无论如何我都不会尝试,詹金斯一直在说It appears that your reverse proxy set up is broken.
,我希望有人能找出问题所在,因为我花了很多时间试图解决这个问题。
谢谢!
upstream cicd {
keepalive 32;
server 127.0.0.1:8080;
}
server {
listen 443 ssl;
listen [::]:443 ssl ipv6only=on;
server_name cicd.domain.com;
root /var/run/jenkins/war/;
access_log /var/log/nginx/jenkins/access.log;
error_log /var/log/nginx/jenkins/error.log;
ssl_certificate /etc/letsencrypt/live/cicd.domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/cicd.domain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
#static files
location ~ "^/static/[0-9a-fA-F]{8}\/(.*)$" {
rewrite "^/static/[0-9a-fA-F]{8}\/(.*)" /$1 last;
}
#user content
location /userContent {
root /var/lib/jenkins/;
if (!-f $request_filename){
rewrite (.*) /$1 last;
break;
}
sendfile on;
}
#cicd
location @cicd {
sendfile off;
proxy_pass http://cicd;
proxy_redirect http://localhost:8080 https://cicd.domain.com;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_max_temp_file_size 0;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffering off;
proxy_request_buffering off;
proxy_set_header Connection "";
}
#optional
location / {
if ($http_user_agent ~* '(iPhone|iPod)') {
rewrite ^/$ /view/iphone/ redirect;
}
try_files $uri @cicd;
}
}
答案 0 :(得分:4)
这不是NGINX问题。
在Jenkins内部,您需要配置Jenkins URL。如果未正确设置,则会出现您观察到的错误。
检查Jenkins->管理Jenkins->配置系统=> Jenkins URL。
答案 1 :(得分:1)
对我来说,URL已正确配置。我不得不更改Nginx配置以包括一些额外的标题:
server {
listen 443 ssl;
server_name my-subdomain.main-domain.com; # this is the url domain of the proxy (Load balancer in front of Jenkins)
ssl_certificate /etc/nginx/certs/ssl_certificate.crt;
ssl_certificate_key /etc/nginx/certs/ssl_key.pem;
location / {
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Host my-subdomain.main-domain.com; # this is the url domain of the proxy (Load balancer in front of Jenkins)
proxy_pass http://${JENKINS_PRIVATE_IP}:${JENKINS_PORT};
}
}
答案 2 :(得分:0)
对于Linux(Ubuntu)用户,请检查/ etc / default / jenkins文件。
在该文件中,查找 JENKINS_ARGS ,然后复制 httpListenAddress 并将其粘贴到您的Jenkins URL中。
我正在使用带有 Lets Encrypt 加密的Nginx,我的/ etc / default / jenkins文件是这样的 JENKINS_ARGS =“-webroot = / var / cache / $ NAME / war- -httpPort = $ HTTP_PORT --httpListenAddress = 127.0.0.1“
我认为您也可以将localhost:[您的端口]或127.0.0.1:[您的端口]