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_http
    Considering 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.so
    LoadModule 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           Off
    ProxyPreserveHost       On
    ProxyPass               /       http://jiraserver:8080/
    ProxyPassReverse        /       http://jiraserver:8080/

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

    使用以下上下文路径:
    # JIRA Proxy Configuration:
    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>
    
    ProxyRequests           Off
    ProxyPreserveHost       On
    ProxyPass               /jira       http://jiraserver:8080/jira
    ProxyPassReverse        /jira       http://jiraserver:8080/jira

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

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

    # a2ensite jira
    Enabling 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           Off
    ProxyPreserveHost       On
    ProxyPass               /       http://jiraserver:8080/
    ProxyPassReverse        /       http://jiraserver:8080/

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

    使用以下上下文路径:

    # JIRA Proxy Configuration:
    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>
    
    ProxyRequests           Off
    ProxyPreserveHost       On
    ProxyPass               /jira       http://jiraserver:8080/jira
    ProxyPassReverse        /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>

另请参见