将 JIRA 与 Apache 集成
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:
- 在其自己的域中直接访问:http://jira.com
- 作为其他域的子域访问:http://jira.atlassian.com
- 通过域或子域的上下文路径访问:http://atlassian.com/jira
本文档将介绍如何使用以上三种配置简单直接地实施 mod_proxy
。如果需要更复杂的解决方案,请参阅 Apache HTTP Server 版本文档或咨询贵组织中的 Apache SME;如果需要,也可以在 Atlassian Answers 上提问或联系我们的 Atlassian Expert。
- JIRA 在 LAN 内一个服务器的 8080 端口上运行,该服务器无法从外部访问(路由器/防火墙不会将 8080 端口的流量转发给它)。
- Apache 安装在可通过 HTTP (80) 从外部访问的另一个服务器(或 JIRA 所在的服务器)上。
- 然后,系统通过 HTTP 使用相应的 URL (
VirtualHost
) 访问 Apache,从而将流量路由到 JIRA 服务器或从中路由出来。
本页内容:
步骤 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>
HTML/XML确保
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" />
HTML/XML- 启动 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
按照以下方式启用模块:
$ 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
BASH- 重新启动 Apache。
Windows/其他操作系统
找到并编辑
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
CODE- 重新启动 Apache。
2.2 配置 Apache 以使用这些模块
Debian/Ubuntu
- 切换到用户
root
。 - 备份现有实例或创建一个新实例。本文档未介绍如何创建新实例(复制默认实例即可)。
- 修改
$APACHE_INSTALL/sites-available
中的现有实例,如default
。 将以下内容添加到
VirtualHost
中,将jiraserver
替换为 JIRA 服务器的主机名并修改端口(若需要)。在其自己的域或子域中访问:
# JIRA Proxy Configuration:<Proxy *> Order deny,allow Allow from all</Proxy>ProxyRequests OffProxyPreserveHost OnProxyPass / http://jiraserver:8080/ProxyPassReverse / http://jiraserver:8080/
如果 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
使用的路径必须与 Tomcat 上下文路径相同。例如,将
/jira
转发到/jira520
必须使用大量的重写规则,而这些规则有时并不可靠。(可选):使用以下命令启动实例:
# a2ensite jiraEnabling site jira.To activate the new configuration, you need to run: service apache2 reload
CODE只有在创建新实例而不是使用默认实例时才需要执行此步骤。
- 重新加载 Apache 配置。
- 进行测试,方法是通过 Apache 访问 JIRA,例如 http://jira.com 或 http://atlassian.com/jira。
Windows/其他操作系统
- 找到并编辑
httpd.conf
文件。 将以下内容添加到
VirtualHost
中,将jiraserver
替换为 JIRA 服务器的主机名并修改端口(若需要)。在其自己的域或子域中访问:
# JIRA Proxy Configuration:<Proxy *> Order deny,allow Allow from all</Proxy>ProxyRequests OffProxyPreserveHost OnProxyPass / http://jiraserver:8080/ProxyPassReverse / http://jiraserver:8080/
如果 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
使用的路径必须与 Tomcat 上下文路径相同。例如,将
/jira
转发到/jira520
必须使用大量的重写规则,而这些规则有时并不可靠。- 重新启动 Apache。
- 进行测试,方法是通过 Apache 访问 JIRA,例如 http://jira.com 或 http://atlassian.com/jira。
步骤 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,因为它不受支持,具体请参见 Jira安装环境要求。
默认情况下,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>
CODE
另请参见
- 使用 SSL 将 JIRA 与 Apache 集成
- 使用 AJP 协议配置 Apache 反向代理
- 有关更多高级
mod_webapp
配置(例如SSL),请参见此 mod_proxy 指南。 - Apache 虚拟主机文档