Atlassian 应用程序允许在我们的产品内使用反向代理,但 Atlassian 支持部门不提供相关配置帮助。因此,Atlassian 不能保证为它们提供任何支持。
如果需要相关配置帮助,请在 Atlassian Answers 上提问。
这是具有多个 SSL 证书和/或 Web 应用,并且都在一个位置 (Apache) 进行管理的网络的通用配置。
如果需要更复杂的解决方案,请参见 Apache HTTP Server 版本文档、咨询组织内的 Apache SME,如果需要,还可以在 Atlassian Answers 上提问,或与我们的 Atlassian 专家联系。
开始之前
预计在配置 Apache 之前,SSL 证书已经过 CA 签名并采用 PEM 格式。有关准备和生成 SSL 证书方面的帮助,请咨询 SSL 供应商(例如,GoDaddy、Verisign、RapidSSL)。
确定是否使用域、子域或上下文路径在很大程度上取决于所提供的 SSL 证书类型以及有关网站配置的所有业务规则。要准确无误地运行 SSL,域就必须与证书的通用名称 (CN) 相匹配。
CN 中带有星号 (*) 的证书是通配符证书,可以支持该域的任何子域。如果您不确定要使用的 URL,请咨询系统管理员和提供证书的 SSL 供应商。
步骤 1:配置 Tomcat
- 关闭 JIRA。
(可选:如果 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>
确保
path
值的前面带有正斜杠 (/
)。例如,应为path="/jira"
而不是path="jira"
。编辑 Tomcat 的
server.xml
,使其包含用于代理请求的单独的连接器。这需要scheme
、proxyName
和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" />
- 禁止在 Tomcat 内重定向到 HTTPS(如果已启用)- 例如,在通过 SSL 或 HTTPS 运行 JIRA 应用 中对
WEB-INF/web.xml
做出的变更将导致使用 Apache 时发生错误。 - 启动 JIRA。
- 测试 JIRA 是否可通过标准连接器访问,如果适用,请使用上下文路径(如
http://jiraserver:8081/jira
)进行测试。 - 通过相应的代理连接器访问 JIRA,测试新连接器是否已生效。具体行为取决于上下文路径:
- 如果上下文路径为空或根 (
/
) 路径,则通过代理连接器(例如http://jiraserver:8080/
)访问 JIRA 时,您会在进入 JIRA 时收到警告: - 如果上下文路径不为空或根目录 (
/
),如/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
Windows/其他操作系统
2.2 配置 Apache 以使用这些模块
Debian/Ubuntu
Windows/其他操作系统
2.3 将 HTTP 重定向到 HTTPS
可以通过以下任一方法执行此操作:
- 设置 HTTP
VirtualHost
以跳转到同一 Tomcat 连接器。Tomcat 将使用scheme
、proxyName
和proxyPort
参数重定向到 HTTPS。这可以按照将 JIRA 与 Apache 集成文档中所述来实现。 使用 mod_rewrite(此模块可能需要启用),将以下内容添加到 HTTP
VirtualHost
中:RewriteEngine OnRewriteCond %{HTTPS} offRewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
步骤 3:配置 JIRA
- 如配置 JIRA 选项中所述,将 Use gzip compression 设置为 OFF。众所周知,GZIP 压缩在使用反向代理时会导致性能问题,特别是在代理还压缩流量的情况下更是如此。
- 将 Base URL 设置为 JIRA 将要访问的 FQDN,例如 https://jira.atlassian.com。同样可参见配置 JIRA 选项。
只能将 JIRA 配置为响应单个 URL,并且基本 URL(如配置 JIRA 选项中所述)必须与最终用户访问的 URL 一致。配置错误可能会导致 JIRA 内出现严重问题,例如活动流和仪表盘小工具无法正常工作。 - 通过在 FQDN 上访问 JIRA 进行测试(例如:https://jira.atlassian.com),确保可以访问 JIRA ,并且所有仪表盘小工具都能正确显示。
故障排除
- 劫持会话:一些用户报告了用户会话会在 mod_cache 模块启用的情况下被劫持的问题。如果遇到了这些问题,请尝试禁用
mod_cache
模块。
在一些 Apache HTTP Server 版本 2 发行版中,默认情况下该模块处于启用状态。 - 在使用 SELinux 的 Linux 发行版上启用
mod_proxy
(和mod_jk
)时发生拒绝访问错误:用户报告在尝试运行mod_proxy
(和mod_jk
)时会出现“拒绝访问”错误。禁用 SELinux (/etc/selinux/config
) 似乎可以解决这个问题。 运行 Mac OS X:禁用 webperfcache,因为它默认会代理到 80 端口。报告这一情况的用户认为这可能会导致 JIRA 的会话问题:用户的身份会被混淆,如下所示。
此外,我们不建议使用 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 中只有一个重定向。
- 一般问题:
- 清除浏览器缓存,然后重试。
- 确保当绕过 Apache 而从 Tomcat 直接访问 JIRA 时,JIRA 运行正常。例如,访问
http://jiraserver:8080
而不是 http://jira.atlassian.com。 - 提高 Apache 的 LogLevel,以进行调试并重新启动。
- 尝试访问 JIRA 并检查 Apache 日志文件是否存在任何错误。
- 在 Atlassian Answers 上提问以获取帮助。
- 403 Forbidden 错误:
将
RequestHeader unset Authorization
行添加到 Apache 配置页面中以禁用授权标头。<Location /jira> RequestHeader unset Authorization ProxyPreserveHost On ProxyPass http://jiraserver/jira ProxyPassReverse http://jiraserver/jira</Location>
另请参见
- 将 JIRA 与 Apache 集成
- 使用 AJP 协议配置 Apache 反向代理
- 有关更多高级
mod_webapp
配置(例如SSL),请参见此 mod_proxy 指南。 - Apache 虚拟主机文档