我正在尝试设置我们的 Jira,以便可以从两个域访问它。虽然我知道 Atlassian 不正式支持此功能,但我确信有一个服务器配置允许这样做。
到目前为止,我能够从域 A 和域 B 成功访问页面本身,但对于域 B,我收到 403 禁止错误,针对图像等资源。
我当前的配置如下:
.conf 文件:
<VirtualHost *:443>
ServerName domainA.com
ServerAlias domainB.com
...
服务器.xml:
<Connector port="8101" relaxedPathChars="[]|" relaxedQueryChars="[]|{}^\`"<>"
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="[]|{}^\`"<>"
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="[]|{}^\`"<>"
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