使用Apache和mod_proxy_ajp提供静态Jenkins内容
环境:使用Apache和mod_proxy_ajp提供静态Jenkins内容,apache,jenkins,mod-proxy,static-content,Apache,Jenkins,Mod Proxy,Static Content,环境: 新手用户(就是我)在所有提到的要点上 CentOS 6.4 x86_64 OpenJDK 1.7.0_65 Apache httpd 2.2.15+mod_ssl 2.2.15-使用 mod_proxy_ajp,没有其他Web应用程序 Jenkins 1.562-仅在ajp端口8009上运行,无网络前缀 我可以访问URLhttps://host/我看到了詹金斯的用户界面。 [我没有添加allowencodedslass NoDecode,ProxyRequests Off或nocanon
https://host/
我看到了詹金斯的用户界面。
[我没有添加allowencodedslass NoDecode
,ProxyRequests Off
或nocanon
,但它似乎起作用了……但考虑到它们的重要性,我将搜索/问另一个问题。]
这是我添加到/etc/httpd/conf.d/ssl.conf
的唯一一行(就在
之前,与
匹配):
我的印象是,让Jenkins使用ApacheHTTPD将意味着
ProxyPass /static !
与
但这导致了一个不寻常的页面(很难识别为詹金斯…我没有测试链接)。当我为Jenkins启用访问日志(通过/etc/sysconfig/Jenkins
)时,出现了这样的条目(仅摘录如下):
重新启动Jenkins服务时,会显示不同的文本。我们如何配置apachehttpd以发送静态内容
我还尝试在默认HTTP连接器端口8080(即没有mod_proxy_ajp)上托管tomcat上的jenkins.war(通过yum部署的tomcat6包)。每次重新启动tomcat时,static
之后的URL元素都不同
PS:没有足够的积分来创建标记mod_proxy_ajp,而是使用mod_proxy。不过,我可以提供50个学分的奖励。如果您认为这是真正的努力,请投票支持该问题。您想使用
ProxyPassMatch
而不是ProxyPass
,如:
ProxyPassMatch ^/(?!static/) ajp://localhost:8009/
这应该只代理不在/static中的内容。请注意,您可能需要为静态内容设置web根目录(但首先,您可能需要检查它是否工作)。正如我在对您的问题的评论中提到的,您建议的设置可能不会降低Jenkins的负载
您可以通过将Apache(或其他类似Web服务器或类似代理的服务器)配置为一个服务器来减少Jenkins上的负载。这可能(您必须测试)会从jenkins移除部分负载。但是,由于Jenkins默认情况下不会为对工件的请求在将来的某个地方设置过期日期,因此代理在将内容提供给客户端之前,仍然必须与Jenkins进行检查(希望返回304而不是完整文件)。您是否考虑过改为使用on
/static
?这似乎比让Apache为分解后的WAR目录中的静态内容提供服务更容易。也许您只是想了解如何做到这一点,但除此之外:通过使用Apache提供静态文件服务,您想解决什么问题?詹金斯进程/机器的负载真的要求你需要吗?@JohnR-不,我没有试过。鉴于我是Web服务器配置方面的新手,我将阅读并尝试一下。谢谢您的评论。@SimonGroenewolt-在我的例子中,构建工件和日志的大小很大(经常高达500MB,分别接近50MB)。减少生成详细信息不是一个选项。鉴于Jenkins服务器是跨大陆访问的,是的,我确实注意到在下载大文件时性能会下降(但我没有关于并发下载等的统计数据)。@ParagDoke我明白你的意思,而apache可能会提高性能,我不认为使用AJP或反向代理的设置在任何方面都是为了提高性能,但更多的是为了通过一个通用的命名方案访问多个站点。对不起,我不这么认为。每次重新启动Jenkins服务时,我都会在/static之后看到一个不同的URL元素(根据我的问题,“6a3788e2”部分)。
DocumentRoot "/var/cache/jenkins/war"
/static/6a3788e2/scripts/yui
/static/6a3788e2/css/
/adjuncts/6a3788e2/lib/layout/breadcrumbs.css
ProxyPassMatch ^/(?!static/) ajp://localhost:8009/