Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Apache和mod_proxy_ajp提供静态Jenkins内容_Apache_Jenkins_Mod Proxy_Static Content - Fatal编程技术网

使用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

环境:

  • 新手用户(就是我)在所有提到的要点上
  • 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上运行,无网络前缀
  • 我可以访问URL
    https://host/
    我看到了詹金斯的用户界面。 [我没有添加
    allowencodedslass NoDecode
    ProxyRequests Off
    nocanon
    ,但它似乎起作用了……但考虑到它们的重要性,我将搜索/问另一个问题。]

    这是我添加到
    /etc/httpd/conf.d/ssl.conf
    的唯一一行(就在
    之前,与
    匹配):

    我的印象是,让Jenkins使用ApacheHTTPD将意味着

  • 用于处理远程连接部分的本机二进制文件(而不是Java字节码)
  • 能够在不增加Jenkins服务器流程负担的情况下提供静态内容(图像、构建工件、控制台日志)
  • 如果这种理解是正确的,那么我正在寻找能够使apachehttpd服务于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/