Atlassian 应用程序允许在我们的产品内使用反向代理,但 Atlassian 支持部门不提供相关配置帮助。因此,Atlassian 不能保证为它们提供任何支持。
如果需要相关配置帮助,请在 Atlassian Answers 上提问。
步骤 1:配置 Tomcat
- 关闭 JIRA。
编辑 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>
确保
path
值的前面带有正斜杠 (/
)。例如,应为path="/jira"
而不是path="jira"
。编辑 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" />
- 启动 JIRA。
- 测试 JIRA 是否可通过标准连接器访问,如果适用,请使用上下文路径(如
http://jiraserver:8081/jira
)进行测试。 - 通过相应的代理连接器访问 JIRA,测试新连接器是否已生效。操作结果因上下文路径而异:
- 如果上下文路径为空或根目录 (
/
),则通过代理连接器(如http://jiraserver:8080/
)访问 JIRA 将转到 JIRA 并显示以下警告: - 如果上下文路径不为空或根目录 (
/
),如/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
Windows/其他操作系统
2.2 配置 Apache 以使用这些模块
Debian/Ubuntu
Windows/其他操作系统
步骤 3:配置 JIRA
- 如配置 JIRA 选项中所述,将 Use gzip compression 设置为 OFF。众所周知,GZIP 压缩在使用反向代理时会导致性能问题,特别是在代理还压缩流量的情况下更是如此。
- 将 Base URL 设置为要通过其访问 JIRA 的 FQDN,例如 http://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>
另请参见
- 使用 SSL 将 JIRA 与 Apache 集成
- 使用 AJP 协议配置 Apache 反向代理
- 有关更多高级
mod_webapp
配置(例如SSL),请参见此 mod_proxy 指南。 - Apache 虚拟主机文档