Jira をリバース プロキシ (またはロード バランサ) の背後で実行しているときにカスタマー ポータルを読み込めない
プラットフォームについて: Server および Data Center のみ。この記事は、Server および Data Center プラットフォームのアトラシアン製品にのみ適用されます。
Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Fisheye および Crucible は除く
症状
Jira Service Management のカスタマー ポータルにアクセスしたときにポータルが読み込まれず、代わりに空白のページが表示される。
予想される結果
カスタマー ポータルが読み込まれる。
診断
- Jira がロード バランサまたはリバース プロキシの背後で実行されている
- SSL プロトコルがロード バランサ (またはリバース プロキシ) レベルで構成されている
問題を再現しているときに収集した HAR ファイル (またはブラウザのネットワーク タブ) を見ると、Jira のベース URL が HTTPS を使用して構成されているにもかかわらず、Jira Service Management が何らかの Javascript を HTTP の URL 経由で読み込もうとしている
コンソール ログを確認すると、ページが "mixed content" によってブロックされた旨のエラーがある
1:4 Mixed Content: The page at 'https://JIRA_DOMAIN/servicedesk/customer/portal/1' was loaded over HTTPS, but requested an insecure script 'http://JIRA_DOMAIN/s/f4cbae4fba07da7db5e0b98c8ce4618e-CDN/wmo8yh/813000/6411e0087192541a09d88223fb51a6a0/add9c254b8e5b2bbfdb57038dcb349ab/_/download/contextbatch/js/jira.webresources:almond,customerportal,com.atlassian.analytics.analytics-client:js-events/batch.js?locale=en-US'. This request has been blocked; the content must be served over HTTPS.
<JIRA_INSTALLATION_FOLDER>/conf/server.xml ファイルにプロキシされた Tomcat コネクタが存在し、それがパラメーター scheme="https" なしで構成されている
<Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" port="8082" protocol="HTTP/1.1" redirectPort="8443" relaxedPathChars="[]|" relaxedQueryChars="[]|{}^\`"<>" useBodyEncodingForURI="true" proxyName="somehostname.com" proxyPort="443"/>
原因
Javascript の URL を構築する Jira Service Management のコードは、Jira で定義されたベース URL (HTTPS を利用) のプロトコルではなく、Tomcat コネクタから渡されたプロトコル (HTTP) を使います。
Tomcat コネクタが HTTPS スキームのパラメーターで構成されていないため、構築されるすべての Javascript URL が HTTPS ではなく HTTP を使用しています。カスタマー ポータルはブラウザで HTTPS 経由でアクセスされるため、コンテンツの混在が発生し、ポータルの読み込みがブラウザによって自動的にブロックされました。
回避策
Jira アプリケーション (Jira Data Center を使用している場合はクラスタのそれぞれの Jira ノード) の server.xml に scheme="https" を追加します
<Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" port="8082" protocol="HTTP/1.1" redirectPort="8443" relaxedPathChars="[]|" relaxedQueryChars="[]|{}^\`"<>" useBodyEncodingForURI="true" proxyName="somehostname.com" proxyPort="443" scheme="https"/>
- Jira アプリケーション (Jira Data Center を使用している場合はクラスタの Jira ノード) を再起動します