使用Apache和mod_proxy_ajp提供静态Jenkins内容

时间:2014-09-05 05:47:05

标签: apache jenkins mod-proxy static-content

环境:

  1. 新手用户(那就是我)所有提到的要点
  2. CentOS 6.4 x86_64
  3. OpenJDK 1.7.0_65
  4. Apache httpd 2.2.15 + mod_ssl 2.2.15 - 作为代理使用 mod_proxy_ajp,没有其他webapp
  5. Jenkins 1.562 - 仅在ajp端口8009上运行,没有网络前缀
  6. 我可以访问网址https://host/,我看到了jenkins用户界面。 [我没有添加AllowEncodedSlashes NoDecodeProxyRequests Offnocanon,但它似乎有效...但对于那些重要性,我会搜索/提出另一个问题。]

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

    ProxyPass / ajp://localhost:8009/
    

    我的印象是,使用Apache httpd面向Jenkins意味着

    1. 处理远程连接部分的本机二进制文件(而不是Java字节码)
    2. 能够在不增加Jenkins服务器进程负担的情况下提供静态内容(图像,构建工件,控制台日志)
    3. 如果理解是正确的,我正在寻找Apache httpd配置规则,这将使Apache httpd能够提供来自Jenkins的静态内容。我已经尝试过了:

      ProxyPass /static !
      

      使用

      DocumentRoot "/var/cache/jenkins/war"
      

      但这导致了一个不寻常的页面(难以识别为Jenkins ......我没有测试链接)。当我为Jenkins启用访问日志时(通过/etc/sysconfig/jenkins),这些条目出现了(仅在下面复制了摘录):

      /static/6a3788e2/scripts/yui
      /static/6a3788e2/css/
      /adjuncts/6a3788e2/lib/layout/breadcrumbs.css
      

      重新启动Jenkins服务时,会显示另一个文本。我们如何配置Apache httpd来发送静态内容?

      我还尝试在默认HTTP连接器端口8080(即没有mod_proxy_ajp)的tomcat(通过yum部署的tomcat6包)上托管jenkins.war。每次重新启动tomcat时,static之后的URL元素都会不同。

      PS:没有足够的积分来创建标签mod_proxy_ajp,而是使用mod_proxy。但是,我可以提供50个学分的赏金。如果您认为有真正的努力,请将问题投票。

2 个答案:

答案 0 :(得分:0)

您希望使用ProxyPassMatch代替ProxyPass,例如:

ProxyPassMatch ^/(?!static/) ajp://localhost:8009/

这应该只代理不在/ static中的东西。请注意,您可能需要为静态内容设置Web根目录(但首先,您可能需要检查它是否有效)。

答案 1 :(得分:0)

正如我在对您的问题的评论中提到的,您建议的设置可能不会导致Jenkins的负载降低。

您可以通过配置Apache(或其他网络服务器,如ngix或代理,如squid)来减少Jenkins的负担,例如caching proxy。这可能(您将不得不测试)从jenkins中删除部分负载。但是,由于Jenkins默认情况下不会在未来的某个地方为工件请求设置过期日期,因此在将内容提供给客户端之前,代理仍然需要使用jenkins进行检查(希望返回304而不是完整文件)

相关问题