Nginx 1.12/Jenkins 2.151:您的反向代理设置似乎已损坏
Ngnix 1.12/Jenkins 2.151: It appears that your reverse proxy set up is broken
我正在尝试在 Centos 7.5 服务器上使用 nginx-1.12.2 为 Jenkins 2.151 配置反向代理。我的 Jenkins 运行 在端口 8080 上,前缀为 /Jenkins。当我去管理配置时使用下面的 nginx 配置文件总是得到 It appears that your reverse proxy set up is broken
。尝试了几个不同的选项无法修复。
已经尝试过这两个推荐,没有运气
https://wiki.jenkins.io/display/JENKINS/Jenkins+behind+an+NGinX+reverse+proxy
现在正在寻求帮助。
worker_processes 1;
events { worker_connections 1024; }
http {
log_format compression '$remote_addr - $remote_user [$time_local] '
'"$request" $status $upstream_addr '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443 http2 ssl;
server_name jenkins-dev.test.com;
access_log /var/log/nginx/access.log compression;
error_log /var/log/nginx/error.log ;
ignore_invalid_headers off;
location ^~ /jenkins/ {
proxy_pass http://localhost:8080/jenkins/;
proxy_redirect http:// https://;
sendfile off;
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 https;
proxy_set_header X-Forwarded-Port 443;
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_temp_file_write_size 64k;
proxy_http_version 1.1;
proxy_request_buffering off;
}
ssl on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_certificate /etc/pki/tls/certs/server.crt;
ssl_certificate_key /etc/pki/tls/certs/server.key;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:20m;
ssl_session_tickets off;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'HIGH:AES-GCM:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-CBC-SHA:ECDHE-RSA-AES128-GCM-SHA256:!SSLv3:!SSLv2:!EXPORT:!DH:!DES:!3DES:!MD5:!DHE:!ADH:!EDH';
ssl_ecdh_curve secp384r1;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
}
}
谢谢
SR
确保您用来访问 jenkins 的 url 和设置 Jenkins URL 相同。
例如。我使用 http://example.com
通过浏览器访问我的詹金斯,所以我将我的詹金斯 URL 设置为 http://example.com
。例如,如果将其设置为 http://<IP_address>
,您将看到报告的错误。
如果您使用 nginx
进行反向代理,则需要适当地设置 Jenkins URL
并且您必须重写 headers 以通过下面的 nginx
配置进行匹配一个例子:
location / {
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Host $host;
proxy_pass http://localhost:8080;
}
也许不是最好的解决方案,但解决方法是 OS 级端口转发,从 80
到 8080
。这更像是一个 hack。
将端口 80
重定向到端口 8080
用于 TCP 流量:
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
保留新设置。
firewall-cmd --runtime-to-permanent
验证端口重新路由:
firewall-cmd --list-all
注意:您也可以重新启动,以确保万无一失。
我正在尝试在 Centos 7.5 服务器上使用 nginx-1.12.2 为 Jenkins 2.151 配置反向代理。我的 Jenkins 运行 在端口 8080 上,前缀为 /Jenkins。当我去管理配置时使用下面的 nginx 配置文件总是得到 It appears that your reverse proxy set up is broken
。尝试了几个不同的选项无法修复。
已经尝试过这两个推荐,没有运气
https://wiki.jenkins.io/display/JENKINS/Jenkins+behind+an+NGinX+reverse+proxy
现在正在寻求帮助。
worker_processes 1;
events { worker_connections 1024; }
http {
log_format compression '$remote_addr - $remote_user [$time_local] '
'"$request" $status $upstream_addr '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443 http2 ssl;
server_name jenkins-dev.test.com;
access_log /var/log/nginx/access.log compression;
error_log /var/log/nginx/error.log ;
ignore_invalid_headers off;
location ^~ /jenkins/ {
proxy_pass http://localhost:8080/jenkins/;
proxy_redirect http:// https://;
sendfile off;
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 https;
proxy_set_header X-Forwarded-Port 443;
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_temp_file_write_size 64k;
proxy_http_version 1.1;
proxy_request_buffering off;
}
ssl on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_certificate /etc/pki/tls/certs/server.crt;
ssl_certificate_key /etc/pki/tls/certs/server.key;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:20m;
ssl_session_tickets off;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'HIGH:AES-GCM:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-CBC-SHA:ECDHE-RSA-AES128-GCM-SHA256:!SSLv3:!SSLv2:!EXPORT:!DH:!DES:!3DES:!MD5:!DHE:!ADH:!EDH';
ssl_ecdh_curve secp384r1;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
}
}
谢谢 SR
确保您用来访问 jenkins 的 url 和设置 Jenkins URL 相同。
例如。我使用 http://example.com
通过浏览器访问我的詹金斯,所以我将我的詹金斯 URL 设置为 http://example.com
。例如,如果将其设置为 http://<IP_address>
,您将看到报告的错误。
如果您使用 nginx
进行反向代理,则需要适当地设置 Jenkins URL
并且您必须重写 headers 以通过下面的 nginx
配置进行匹配一个例子:
location / {
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Host $host;
proxy_pass http://localhost:8080;
}
也许不是最好的解决方案,但解决方法是 OS 级端口转发,从 80
到 8080
。这更像是一个 hack。
将端口
80
重定向到端口8080
用于 TCP 流量:firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
保留新设置。
firewall-cmd --runtime-to-permanent
验证端口重新路由:
firewall-cmd --list-all
注意:您也可以重新启动,以确保万无一失。