我正在尝试在 nginx 后面运行 Jenkins。Jenkins 在 Docker 容器中运行,从目录 /jenkins 监听端口 8080。我的 nginx 容器将此 Jenkins 容器链接为主机名“jenkins”,因此在其上下文中,Jenkins 可通过以下方式访问http://詹金斯:8080/詹金斯。
我按照以下步骤操作从具有 TLS 加密的文件夹运行 Jenkins因此我的site-config
包含以下内容:
location ^~ /jenkins/ {
sendfile off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://jenkins:8080/jenkins/;
proxy_redirect http:// https://;
proxy_max_temp_file_size 0;
client_max_body_size 64m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
我现在尝试从本地主机访问 nginx,并调用https://localhost/jenkins向我展示了 Jenkins。但是,当我转到“管理 Jenkins”时,我收到消息说我的反向代理设置不正确。我试过
curl -k -iL -e https://localhost/jenkins/manage \
https://localhost/jenkins/administrativeMonitor/hudson.diagnosis.ReverseProxySetupMonitor/test
这给了我一个 404 http://localhost/jenkins/manage vs. https:
。
当我添加
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header X-Forwarded-Ssl on;
消息更改为https://localhost/jenkins/manage vs. https:
我错过了什么?
答案1
我刚才遇到了类似的问题,解决该问题的方法如下:https://stackoverflow.com/a/20514632/1446479
我的不工作配置使用了这一行:
proxy_pass http://127.0.0.1:8015/jenkins/;
但我的工作配置现在如下所示:
location /jenkins/
{
proxy_pass http://127.0.0.1:8015$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
port_in_redirect off;
proxy_redirect http://my.host/jenkins /jenkins;
proxy_connect_timeout 300;
}