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

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

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

本页介绍了如何利用 mod_proxymod_ssl,将 Apache HTTP Server(也称为 httpd)与 JIRA 集成,以便 Apache 通过 HTTPS 作为反向代理运行。如果需要 HTTP 配置,请参见我们的将 JIRA 与 Apache 集成文档。通过配置 Apache,您可以在非标准 HTTP 端口(如 8080)上运行 JIRA,并且用户能够通过标准 HTTPS 访问 JIRA,因为他们的通信将通过代理传送并在网络外部加密。

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

这意味着 SSL 证书将在 Apache 而不是 Tomcat 中进行管理,此外,Apache 和 Tomcat 之间的连接也不会加密。但浏览器和外部网络之间的连接将被加密。这适用于 JIRA 服务器与 Apache 服务器位于同一网络内的配置,如下所示:

客户端浏览器 -> HTTPS -> Apache 代理 -> HTTP -> Tomcat (JIRA)

本页内容:

这是具有多个 SSL 证书和/或 Web 应用,并且都在一个位置 (Apache) 进行管理的网络的通用配置。

如果需要更复杂的解决方案,请参见 Apache HTTP Server 版本文档、咨询组织内的 Apache SME,如果需要,还可以在 Atlassian Answers 上提问,或与我们的 Atlassian 专家联系。

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

开始之前

(warning) 预计在配置 Apache 之前,SSL 证书已经过 CA 签名并采用 PEM 格式。有关准备和生成 SSL 证书方面的帮助,请咨询 SSL 供应商(例如,GoDaddy、Verisign、RapidSSL)。

确定是否使用域、子域或上下文路径在很大程度上取决于所提供的 SSL 证书类型以及有关网站配置的所有业务规则。要准确无误地运行 SSL,域就必须与证书的通用名称 (CN) 相匹配。

下表说明了哪些 URL 可与证书 CN 一起使用,还推荐了可以使用的 URL。

CN 中带有星号 (*) 的证书是通配符证书,可以支持该域的任何子域。如果您不确定要使用的 URL,请咨询系统管理员和提供证书的 SSL 供应商。

步骤 1:配置 Tomcat

  1. 关闭 JIRA。
  2. (可选:如果 JIRA 不需要上下文路径,请跳过此步骤。)

    编辑 Tomcat 的 server.xml,使其包含所需的 JIRA 上下文路径。下面的示例使用了 path="jira",这意味着,如果采用的是默认 JIRA 端口,即可通过 http://jiraserver:8080/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,使其包含用于代理请求的单独的连接器。这需要 schemeproxyName 和 proxyPort 属性。将这些属性替换为代理的相应域和端口,如下例所示:

    <Service name="Catalina"> 	<!-- Apache Proxy Connector with values for scheme, proxyName and proxyPort -->        <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"             scheme="https" proxyName="jira.atlassian.com" proxyPort="443"/> 	<!-- 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. 禁止在 Tomcat 内重定向到 HTTPS(如果已启用)- 例如,在通过 SSL 或 HTTPS 运行 JIRA 应用 中对 WEB-INF/web.xml 做出的变更将导致使用 Apache 时发生错误。
  5. 启动 JIRA。
  6. 测试 JIRA 是否可通过标准连接器访问,如果适用,请使用上下文路径(如 http://jiraserver:8081/jira)进行测试。
  7. 通过相应的代理连接器访问 JIRA,测试新连接器是否已生效。具体行为取决于上下文路径:
    1. 如果上下文路径为空或根 (/) 路径,则通过代理连接器(例如 http://jiraserver:8080/)访问 JIRA 时,您会在进入 JIRA 时收到警告:
    2. 如果上下文路径不为空或根目录 (/),如 /jira,则通过代理连接器(如 http://jiraserver:8080/jira)访问 JIRA 会将您重定向到已配置的代理(如 https://jira.atlassian.com/jira)。

为了在 JIRA 上进行测试,我们使用两个不同的 Tomcat 连接器并在需要时绕过代理,因为这在故障排除时会很有用。预计无法从网络外对标准连接器进行外部访问(防火墙不会向其转发任何端口)。

步骤 2:配置 Apache HTTP Server

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

2.1 启用代理模块

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

    $ sudo a2enmod proxy_http sslConsidering dependency proxy for proxy_http:Enabling module proxy.Enabling module proxy_http.Enabling module ssl.See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates.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.soLoadModule ssl_module modules/mod_ssl.so
  2. 重新启动 Apache。

2.2 配置 Apache 以使用这些模块

Debian/Ubuntu
  1. 切换到用户 root
  2. 备份现有实例或创建新实例。本文档不涵盖有关创建新实例的内容(复制默认实例应该足够了)。
  3. 修改 $APACHE_INSTALL/sites-available 中的现有实例,如 default-ssl
  4. 将以下内容添加到 VirtualHost 中,将 jiraserver 替换为 JIRA 服务器的主机名并修改端口(若需要)。

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

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

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

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

  5. 按照以下方式启用实例:

    # a2ensite default-sslEnabling site default-ssl.To activate the new configuration, you need to run:  service apache2 reload
  6. 将证书和私有密钥复制到相应目录中。
  7. 按照以下方式将其包含在 Apache 配置中,位于 VirtualHost 内:

    SSLCertificateFile    /etc/ssl/certs/jira.crtSSLCertificateKeyFile /etc/ssl/private/jira.key
  8. (可选):SSLCertificateChainFile 的配置将包含由 CA 供应商提供并签字的中间证书。请咨询 CA 供应商以确认这是否有必要。

    SSLCertificateChainFile /etc/ssl/certs/jiraintermediate.crt
  9. 重新加载 Apache 配置。
  10. 进行测试,方法是通过 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>SSLProxyEngine          OnProxyRequests           OffProxyPreserveHost       OnProxyPass               /       http://jiraserver:8080/ProxyPassReverse        /       http://jiraserver:8080/

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

    使用上下文路径:

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

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

  3. 将证书和私有密钥复制到相应目录中。
  4. 按照以下方式将其包含在 Apache 配置中,位于 VirtualHost 内:

    SSLCertificateFile /etc/ssl/certs/jira.crtSSLCertificateKeyFile   /etc/ssl/private/jira.key
  5. (可选):SSLCertificateChainFile 的配置将包含由 CA 供应商提供并签字的中间证书。请咨询 CA 供应商以确认这是否有必要。

    SSLCertificateChainFile /etc/ssl/certs/jiraintermediate.crt
  6. 重新启动 Apache。
  7. 进行测试,方法是通过 Apache 访问 JIRA,例如 http://jira.comhttp://atlassian.com/jira

2.3 将 HTTP 重定向到 HTTPS

可以通过以下任一方法执行此操作:

  • 设置 HTTP VirtualHost 以跳转到同一 Tomcat 连接器。Tomcat 将使用 schemeproxyName 和 proxyPort 参数重定向到 HTTPS。这可以按照将 JIRA 与 Apache 集成文档中所述来实现。
  • 使用 mod_rewrite(此模块可能需要启用),将以下内容添加到 HTTP VirtualHost 中:

    RewriteEngine OnRewriteCond %{HTTPS} offRewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

步骤 3:配置 JIRA

  1. 配置 JIRA 选项中所述,将 Use gzip compression 设置为 OFF。众所周知,GZIP 压缩在使用反向代理时会导致性能问题,特别是在代理还压缩流量的情况下更是如此。
  2. 将 Base URL 设置为 JIRA 将要访问的 FQDN,例如 https://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