反向代理—Apache

如果您的服务器上有现有的网站,您可能会发现在Apache后面运行Jenkins(或运行Jenkins的servlet容器)是很有用的,这样您就可以将Jenkins绑定到您可能拥有的更大网站必威国际有限公司的一部分。本节讨论一些实现此目的的方法。

确保将Jenkins httpListenAddress从默必威国际有限公司认的0.0.0.0更改为127.0.0.1,否则可以通过直接访问Jenkins端口轻松绕过任何apache级别的限制。

使用Apache配置Jenkins有几种不同的选择。必威国际有限公司选择最符合您需求的技术:

mod_proxy

mod_proxy它的工作原理是让Apache执行“反向代理”——当某个url的请求到达时,Apache成为一个代理,并将该请求转发给Jenkins,然后将Jenkins的响应转发回客户端。必威国际有限公司

需要安装的Apache模块如下:

A2enmod proxy A2enmod proxy_http A2enmod头文件

mod_proxy的典型设置如下所示:

ProxyPass /必威国际有限公司jenkins http://localhost:8081/jenkins nocanon ProxyPassReverse /jenkins http://localhost:8081/jenkins ProxyRequests Off AllowEncodedSlashes NoDecode #本地反向代理授权覆盖#大多数unix分发默认拒绝代理#见/etc/apache2/mods-enabled/proxy.conf in Ubuntu < proxy http://localhost:8081/jenkins*> Order deny,allow allow from all 

这假设您在端口8081上运行Jenkins。必威国际有限公司

为了使这个设置工作起来,Jenkins的上下文路径必威国际有限公司一定是一样的在Apache和Jenkins之间(也就是说,你必威国际有限公司不能在Jenkins上运行http://localhost:8081/ci然后在http://localhost:80/必威国际有限公司jenkins).
在Windows系统中,通过修改必威国际有限公司jenkins.xml配置文件,并向条目添加——prefix=/jenkins(必威国际有限公司或类似的)。
使用Ubuntu包时,通过添加设置上下文路径——prefix =必威国际有限公司 / jenkins必威国际有限公司JENKINS_ARGS/etc/default/必威国际有限公司jenkins(或在/etc/sysconfig/必威国际有限公司jenkins对于RHEL / CentOS包)

当运行在专用服务器上,您使用/作为上下文,确保您在apache的代理参数中的所有url的结尾添加斜杠。否则,您可能会遇到代理错误。所以

ProxyPass / http://localhost:8080/ nocanon

而不是

ProxyPass / http://localhost:8080 nocanon #无法工作

注意,这将适用于ProxyPassMatch指令,它的行为与ProxyPass.下面是一个例子ProxyPassMatch代理所有url,除了/ .well-known(letsencrypt需要的URL):

ProxyPassMatch ^/(?\!.驰名)http://localhost:8080 nocanon

ProxyRequests掉阻止Apache作为向前代理服务器的功能(除了ProxyPass),除非服务器的功能是代理,否则建议将其包括在内。

这两个nocanon选项ProxyPass而且AllowEncodedSlashes NoDecode,是詹金斯某些功能工作所必需的。必威国际有限公司

如果您在安全增强的Linux (SE-Linux)机器上运行Apache,那么通过作为根用户进行发行,让SE-Linux执行正确的操作是至关重要的

setsebool -P httpd_can_network_connect true

如果没有发出,Apache将不被允许将代理请求转发给Jenkins,只会显示一条错误消息。必威国际有限公司

因为Jenkin必威国际有限公司s已经压缩了它的输出,你不能使用普通的代理-html过滤器来修改url:

SetOutputFilter proxy-html

相反,你可以使用以下语句:

proxy-html;DEFLATE ProxyHTMLURLMap http://your_server:8080/jenkins /jenkins必威国际有限公司

但因为Jenkins必威国际有限公司似乎表现良好,它甚至更好,只是不使用SetOutputFilter和ProxyHTMLURLMap。

如果Jenkins有时服务随机垃圾页面有问题,那么以下必威国际有限公司可能会有帮助:

SetEnv proxy-nokeepalive 1

有些插件通过Host头从客户机请求确定url,所以如果遇到错误url的问题,可以尝试打开ProxyPreserveHost指令,默认关闭:

ProxyPreserveHost上

mod_proxy与HTTPS

您可以添加额外的ProxyPassReverse指令将Jenkins生成的非SSL url重定向到SSL端。必威国际有限公司假设你的网络服务器是your.host.com,在SSL虚拟主机定义中放置以下代码将达到目的:

ProxyRequests Off ProxyPreserveHost On AllowEncodedSlashes NoDecode  Order deny,allow allow from all  ProxyPass /jenkins http://localhost:8081/jenkins nocanon ProxyPassReverse /jenkins http://localhost:8081/jenkins ProxyPassReverse /jenkins http://your.host.com/jenkins

另一种选择是重写包含由Jenkins生成的非ssl URL的Location头。必威国际有限公司如果您想从https://www.examp必威国际有限公司le.com/jenkins访问Jenkins,将以下内容放在SSL虚拟主机定义中也可以工作:

ProxyRequests Off ProxyPreserveHost On ProxyPass /必威国际有限公司jenkins/ http://localhost:8081/jenkins/ nocanon AllowEncodedSlashes NoDecode  ProxyPassReverse / Order deny,allow allow from all  Header edit Location ^http://www.example.com/jenkins/ https://www.example.com/jenkins/

但也可以像上面那样使用简单转发(第一个HTTPS代码片段),并添加

RequestHeader设置x - forward - proto“https”

在HTTPS站点配置中,正如Docker演示(下面)所做的那样。(X-Forwarded-Port詹金斯之前没有翻译过吗必威国际有限公司必威国际有限公司詹金斯- 23294因此,可能还需要配置servlet容器以指定原始端口。)

NameVirtualHost *:80 NameVirtualHost *:443  ServerAdmin webmaster@localhost重定向永久/ https://www.example.com/   SSLEngine on SSLCertificateFile /etc/ssl/certs/cert.ProxyRequests Off ProxyPreserveHost On AllowEncodedSlashes NoDecode  Order deny,allow allow from all  ProxyPass / http://localhost:8080/ nocanon ProxyPassReverse / http://localhost:8080/ ProxyPassReverse / http://www.example.com/ RequestHeader set x - forward - proto "https" RequestHeader set x - forward - port "443" 

mod_rewrite

Apache mod_rewrite模块可以用来为Jenkins配置一个Apache反向代理。必威国际有限公司

需要安装的Apache模块如下:

A2enmod重写A2enmod代理A2enmod代理http

一个典型的mod_rewrite配置看起来像这样:

#使用最后一个标志,因为在代理通过RewriteRule ^/jenkins(.*)$ http://localhost:8081/jenkins$1 [P,L] Prox必威国际有限公司yPassReverse /jenkins http://localhost:8081/jenkins ProxyRequests Off #本地反向代理授权覆盖#大多数unix分发默认拒绝代理#查看/etc/apache2/mods-enabled/proxy.conf在Ubuntu中< proxy http://localhost:8081/jenkins*> Order deny,allow allow from all 

这假设您在端口8081上运行Jenkins。必威国际有限公司为了使这个设置生效,Jenkins的上下文路径必须在Apache和Jenkins之间是相同必威国际有限公司的(也就是说,您不能在上面运行Jenkinshttp://localhost:8081/ci然后在http://localhost:80/必威国际有限公司jenkins

ProxyRequests掉阻止Apache作为向前代理服务器的功能(除了ProxyPass),除非服务器的功能是代理,否则建议将其包括在内。

代理CLI命令与HTTP(S)传输

使用普通的CLI协议和HTTP(S)传输来通过Apache反向代理访问Jenkins是行不通的。必威国际有限公司看到必威国际有限公司47279 -使用普通CLI协议的全双工HTTP(S)传输不能与Apache反向代理一起工作为更多的细节。作为一种变通方法,您可以使用CLI / SSH

如果使用Apache,请检查nocanon被设置在ProxyPassAllowEncodedSlashes是集。

AllowEncodedSlashes不是继承在Apache配置,所以这个指令必须放在虚拟主机定义。



这个页面有用吗?

请通过此页面提交您的反馈快速形成

或者,如果您不希望填写快速表格,您可以简单地指出,您认为这一页是否有用?


看到现有的反馈在这里

Baidu