通过 Apache 上的两个域访问 Jira

通过 Apache 上的两个域访问 Jira

我正在尝试设置我们的 Jira,以便可以从两个域访问它。虽然我知道 Atlassian 不正式支持此功能,但我确信有一个服务器配置允许这样做。

到目前为止,我能够从域 A 和域 B 成功访问页面本身,但对于域 B,我收到 403 禁止错误,针对图像等资源。

我当前的配置如下:

.conf 文件:

<VirtualHost *:443>
    ServerName domainA.com
    ServerAlias domainB.com
    ...
    

服务器.xml:

<Connector port="8101" relaxedPathChars="[]|" relaxedQueryChars="[]|{}^&#x5c;&#x60;&quot;&lt;&gt;"
                   maxThreads="150" minSpareThreads="25" connectionTimeout="20000" enableLookups="false"
                   maxHttpHeaderSize="8192" protocol="HTTP/1.1" useBodyEncodingForURI="true" redirectPort="8443"
                   acceptCount="100" disableUploadTimeout="true" bindOnInit="false" secure="true" scheme="https"
                   proxyName="domainA.com" proxyPort="443"/>
               

如果我将连接器的代理名称更改为 domainB.com,它将适用于 domainB,但不再适用于 domainA。

我尝试为 domainB 的另一个端口设置另一个连接器,如下所示,但没有成功:

<Connector port="8102" relaxedPathChars="[]|" relaxedQueryChars="[]|{}^&#x5c;&#x60;&quot;&lt;&gt;"
                   maxThreads="150" minSpareThreads="25" connectionTimeout="20000" enableLookups="false"
                   maxHttpHeaderSize="8192" protocol="HTTP/1.1" useBodyEncodingForURI="true" redirectPort="8443"
                   acceptCount="100" disableUploadTimeout="true" bindOnInit="false" secure="true" scheme="https"
                   proxyName="domainB.com" proxyPort="443"/>
               

该行为似乎与 Jira 中设置的基本 URL 无关。此外,我可以使用以下附加连接器通过 http 从内部 IP 顺利访问 Jira:

<Connector port="8301" relaxedPathChars="[]|" relaxedQueryChars="[]|{}^&#x5c;&#x60;&quot;&lt;&gt;"
                   maxThreads="150" minSpareThreads="25" connectionTimeout="20000" enableLookups="false"
                   maxHttpHeaderSize="8192" protocol="HTTP/1.1" useBodyEncodingForURI="true" redirectPort="8443"
                   acceptCount="100" disableUploadTimeout="true" bindOnInit="false" URIEncoding="UTF-8" />
               

有什么想法可以解决这个问题吗?

谢谢。

答案1

我正在尝试设置我们的 Jira,以便可以从两个域访问它”……这不受 Atlassian 官方支持……

那么作为一名专业人士你就不会去那里。

我确信有一个服务器配置允许它

看起来,即使 Atlassian 提供的“云”或“托管”版本的 Jira 似乎也不支持多租户和多域,而是根据以下情况为每个客户和每个唯一域启动一个实例:https://support.atlassian.com/organization-administration/docs/how-many-instances-of-a-product-does-my-organization-need/

因此,我怀疑对多个域的支持是一个允许您实现这一点的“未记录的”隐藏功能设置。


您想规避什么?

许多 Web 应用程序都配置了网站访问者需要使用的完全限定域名、端口和协议的设置。

该应用程序使用该信息来执行以下操作:

  • 阻止虐待和攻击.
    例如,通过设置内容安全政策每个响应中的标题。

  • 生成自引用 URL
    它们不仅用于网页的 CSS、JS 和 HTML,还用于应用程序发送的电子邮件中。

你能规避这个问题吗?

在某种程度上你可以使用反向代理修改网站访问者发送到 Web 应用程序的请求和请求标头。将其重写为 Web 应用程序 (Jira) 所需的协议、FQDN 和端口。

反向代理还需要修改 Web 应用程序设置的标头以及发送回网站访问者的所有 HTML、CSS、JS 和其他响应主体。换句话说:将 Web 应用程序 (Jira) 生成的协议、FQDN 和端口重写为网站访问者应该使用的协议、FQDN 和端口。

一种方法是:在一个服务器上运行 Jira VirtualHost,并使其正常工作,第二个域名不会被添加为ServerAlias,而是在第二个服务器上VirtualHost设置为反向代理

<VirtualHost *:443>
    ServerName jira.example.com
    ...
</VirtualHost>
<VirtualHost *:443>
    ServerName jira.example.org
    SSLProxyEngine On
    ProxyPass        / https://jira.example.com/
    ProxyPassReverse / https://jira.example.com/
    ...
    ProxyHTMLURLMap jira.example.com  jira.example.org
    ...
</VirtualHost>

有关如何反向代理的一些详细信息如下:如何使用反向代理正确处理相对 URL

相关内容