Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

Error rendering macro 'viewport-redirect'

null

Atlassian 应用程序允许在我们的产品内使用反向代理,但 Atlassian 支持部门不提供相关配置帮助。因此,Atlassian 不能保证为它们提供任何支持

如果需要相关配置帮助,请在 Atlassian Answers 上提问。

本页介绍了如何使用 mod_proxy 将 Apache HTTP Server(也称为 httpd)与 JIRA 集成,这样,Apache 便可通过 HTTP 作为反向代理运行。如果需要 HTTPS 配置,请参见我们的使用 SSL 将 JIRA 与 Apache 集成文档。配置 Apache 可让 JIRA 能够通过非标准 HTTP 端口(如 8080)运行,而且用户可以通过标准 HTTP 访问 JIRA,因为流量将通过代理进行路由。

您可以配置 Apache 以允许通过以下任一方式访问 JIRA:

本文档将介绍如何使用以上三种配置简单直接地实施 mod_proxy。如果需要更复杂的解决方案,请参阅 Apache HTTP Server 版本文档或咨询贵组织中的 Apache SME;如果需要,也可以在 Atlassian Answers 上提问或联系我们的 Atlassian Expert

  1. JIRA 在 LAN 内一个服务器的 8080 端口上运行,该服务器无法从外部访问(路由器/防火墙不会将 8080 端口的流量转发给它)。
  2. Apache 安装在可通过 HTTP (80) 从外部访问的另一个服务器(或 JIRA 所在的服务器)上。
  3. 然后,系统通过 HTTP 使用相应的 URL (VirtualHost) 访问 Apache,从而将流量路由到 JIRA 服务器或从中路由出来。

本页内容:

步骤 1:配置 Tomcat

  1. 关闭 JIRA。
  2. 编辑 Tomcat 的 server.xml,使其包含所需的 JIRA 上下文路径。下面的示例使用了 path="jira",这意味着,如果采用的是默认 JIRA 端口,即可通过 http://jiraserver:8080/jira 访问 JIRA。

    只有设置为通过上下文路径(如 http://atlassian.com/jira)访问 JIRA 时,才需要执行此步骤。如果不需要,可跳过这一步。

    <Engine defaultHost="localhost" name="Catalina">            <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">                <Context docBase="${catalina.home}/atlassian-jira" path="/jira" reloadable="false" useHttpOnly="true">                    <!--                     ====================================================================================                     Note, you no longer configure your database driver or connection parameters here.                     These are configured through the UI during application setup.                     ====================================================================================                    -->                    <Resource auth="Container" factory="org.objectweb.jotm.UserTransactionFactory" jotm.timeout="60" name="UserTransaction" type="javax.transaction.UserTransaction"/>                    <Manager pathname=""/>                </Context>            </Host>

    (info) 确保 path 值的前面带有正斜杠 (/)。例如,应为 path="/jira" 而不是 path="jira"

  3. 编辑 Tomcat 的 server.xml,使其包含用于代理请求的单独的连接器。此操作需要使用 proxyName 和 proxyPort 属性。将这些属性替换为代理的相应域和端口,如下例所示:

    <Service name="Catalina"> 	<!-- Apache Proxy Connector -->        <Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" port="8080" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"             proxyName="jira.atlassian.com" proxyPort="80"/> 	<!-- Standard HTTP Connector -->        <Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" port="8081" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true" />
  4. 启动 JIRA。
  5. 测试 JIRA 是否可通过标准连接器访问,如果适用,请使用上下文路径(如 http://jiraserver:8081/jira)进行测试。
  6. 通过相应的代理连接器访问 JIRA,测试新连接器是否已生效。操作结果因上下文路径而异:
    1. 如果上下文路径为空或根目录 (/),则通过代理连接器(如 http://jiraserver:8080/)访问 JIRA 将转到 JIRA 并显示以下警告:


    2. 如果上下文路径不为空或根目录 (/),如 /jira,则通过代理连接器(如 http://jiraserver:8080/jira)访问 JIRA 会将您重定向到已配置的代理(如 https://jira.atlassian.com/jira)。

步骤 2:配置 Apache HTTP Server

本文档未介绍如何安装 Apache 和配置 DNS。此外,文档假设已针对 JIRA 域安装了 Apache 2.2 并配置了 DNS 条目。由于 Apache 的配置特定于所使用的操作系统,因此本文档只提供了部分发行版及其配置。

2.1 启用代理模块

Debian/Ubuntu
  1. 按照以下方式启用模块:

    $ sudo a2enmod proxy_httpConsidering dependency proxy for proxy_http:Enabling module proxy.Enabling module proxy_http.To activate the new configuration, you need to run:  service apache2 restart
  2. 重新启动 Apache。
Windows/其他操作系统
  1. 找到并编辑 httpd.conf 文件,添加以下命令行:

    LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_http_module modules/mod_proxy_http.so
  2. 重新启动 Apache。

2.2 配置 Apache 以使用这些模块

Debian/Ubuntu
  1. 切换到用户 root
  2. 备份现有实例或创建一个新实例。本文档未介绍如何创建新实例(复制默认实例即可)。
  3. 修改 $APACHE_INSTALL/sites-available 中的现有实例,如 default
  4. 将以下内容添加到 VirtualHost 中,将 jiraserver 替换为 JIRA 服务器的主机名并修改端口(若需要)。

    在其自己的域或子域中访问:
    # JIRA Proxy Configuration:<Proxy *>        Order deny,allow        Allow from all</Proxy>ProxyRequests           OffProxyPreserveHost       OnProxyPass               /       http://jiraserver:8080/ProxyPassReverse        /       http://jiraserver:8080/

    (info) 如果 URL 末尾缺少正斜杠,则会出现代理错误,因此请确保正确添加正斜杠!

    使用以下上下文路径:
    # JIRA Proxy Configuration:<Proxy *>        Order deny,allow        Allow from all</Proxy>ProxyRequests           OffProxyPreserveHost       OnProxyPass               /jira       http://jiraserver:8080/jiraProxyPassReverse        /jira       http://jiraserver:8080/jira

    (info) 使用的路径必须与 Tomcat 上下文路径相同。例如,将 /jira 转发到 /jira520 必须使用大量的重写规则,而这些规则有时并不可靠。

  5. (可选):使用以下命令启动实例:

    # a2ensite jiraEnabling site jira.To activate the new configuration, you need to run:  service apache2 reload

    (info) 只有在创建新实例而不是使用默认实例时才需要执行此步骤。

  6. 重新加载 Apache 配置。
  7. 进行测试,方法是通过 Apache 访问 JIRA,例如 http://jira.comhttp://atlassian.com/jira
Windows/其他操作系统
  1. 找到并编辑 httpd.conf 文件。
  2. 将以下内容添加到 VirtualHost 中,将 jiraserver 替换为 JIRA 服务器的主机名并修改端口(若需要)。

    在其自己的域或子域中访问:

    # JIRA Proxy Configuration:<Proxy *>        Order deny,allow        Allow from all</Proxy>ProxyRequests           OffProxyPreserveHost       OnProxyPass               /       http://jiraserver:8080/ProxyPassReverse        /       http://jiraserver:8080/

    (info) 如果 URL 末尾缺少正斜杠,则会出现代理错误,因此请确保正确添加正斜杠!

    使用以下上下文路径:

    # JIRA Proxy Configuration:<Proxy *>        Order deny,allow        Allow from all</Proxy>ProxyRequests           OffProxyPreserveHost       OnProxyPass               /jira       http://jiraserver:8080/jiraProxyPassReverse        /jira       http://jiraserver:8080/jira

    (info) 使用的路径必须与 Tomcat 上下文路径相同。例如,将 /jira 转发到 /jira520 必须使用大量的重写规则,而这些规则有时并不可靠。

  3. 重新启动 Apache。
  4. 进行测试,方法是通过 Apache 访问 JIRA,例如 http://jira.comhttp://atlassian.com/jira

步骤 3:配置 JIRA

  1. 配置 JIRA 选项中所述,将 Use gzip compression 设置为 OFF。众所周知,GZIP 压缩在使用反向代理时会导致性能问题,特别是在代理还压缩流量的情况下更是如此。
  2. 将 Base URL 设置为要通过其访问 JIRA 的 FQDN,例如 http://jira.atlassian.com。同样可参见配置 JIRA 选项
    (warning)只能将 JIRA 配置为响应单个 URL,并且基本 URL(如配置 JIRA 选项中所述)必须与最终用户访问的 URL 一致。配置错误可能会导致 JIRA 内出现严重问题,例如活动流和仪表盘小工具无法正常工作。
  3. 通过在 FQDN 上访问 JIRA 进行测试(例如:https://jira.atlassian.com),确保可以访问 JIRA ,并且所有仪表盘小工具都能正确显示。

故障排除

  • 劫持会话:一些用户报告了用户会话会在 mod_cache 模块启用的情况下被劫持的问题。如果遇到了这些问题,请尝试禁用 mod_cache 模块。
    (info)在一些 Apache HTTP Server 版本 2 发行版中,默认情况下该模块处于启用状态。
  • 在使用 SELinux 的 Linux 发行版上启用 mod_proxy(和 mod_jk)时发生拒绝访问错误:用户报告在尝试运行 mod_proxy(和 mod_jk)时会出现“拒绝访问”错误。禁用 SELinux (/etc/selinux/config) 似乎可以解决这个问题。
  • 运行 Mac OS X:禁用 webperfcache,因为它默认会代理到 80 端口。报告这一情况的用户认为这可能会导致 JIRA 的会话问题:用户的身份会被混淆,如下所示。
    (warning)此外,我们不建议使用 Mac OS X,因为它不受支持,具体请参见 支持的平台

默认情况下,OSX 服务器会为虚拟主机启用 webperfcache,这非常适合静态内容,但对于动态实例(我们所有的实例都是动态实例)来说,这很糟糕,会导致许多问题。
最近发现的是 jira 会话问题。另请参见:
http://developer.apple.com/documentation/Darwin/Reference/ManPages/man8/webperfcache.8.html
遗憾的是,即使您为某个实例禁用了 webperfcache,但如果有一个实例被启用,那么所有实例都会通过 webperfcache 进行代理,从而导致会话问题。

  • 重定向太多:当 Tomcat 和 Apache 中只有一个应当重定向时,两者同时进行了重定向。在 Tomcat 中禁用重定向(按照通过 SSL 或 HTTPS 运行 JIRA 中所述还原所有变更),并确保 Apache 中只有一个重定向。
  • 一般问题:
    1. 清除浏览器缓存,然后重试。
    2. 确保当绕过 Apache 而从 Tomcat 直接访问 JIRA 时,JIRA 运行正常。例如,访问 http://jiraserver:8080 而不是 http://jira.atlassian.com
    3. 提高 Apache 的 LogLevel,以进行调试并重新启动。
    4. 尝试访问 JIRA 并检查 Apache 日志文件是否存在任何错误。
    5. 在 Atlassian Answers 上提问以获取帮助。
  • 403 Forbidden 错误:
    • 将 RequestHeader unset Authorization 行添加到 Apache 配置页面中以禁用授权标头。

      <Location /jira>  RequestHeader unset Authorization  ProxyPreserveHost On  ProxyPass http://jiraserver/jira  ProxyPassReverse http://jiraserver/jira</Location>

另请参见

  • No labels