secretRequired の設定により、Jira Server で AJP が開始に失敗する
問題
Jira が Apache Tomcat 8.5.51 以降 (Jira 8.11 以降にバンドル) で AJP プロトコルを使って実行するように構成されているときに、コネクタが開始に失敗し、サーバー ログに次の例外が返される ($Jira_INSTALL/logs フォルダ)。
16-Aug-2020 23:56:00.578 SEVERE [main] org.apache.catalina.core.StandardService.startInternal Failed to start connector [Connector[AJP/1.3-9165]]
org.apache.catalina.LifecycleException: Protocol handler start failed
at org.apache.catalina.connector.Connector.startInternal(Connector.java:1102)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:440)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:766)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup.Catalina.start(Catalina.java:688)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
Caused by: java.lang.IllegalArgumentException: The AJP Connector is configured with secretRequired="true" but the secret attribute is either null or "". This combination is not valid.
at org.apache.coyote.ajp.AbstractAjpProtocol.start(AbstractAjpProtocol.java:274)
at org.apache.catalina.connector.Connector.startInternal(Connector.java:1100)
... 12 more
ご利用の Jira にバンドルされている Tomcat のバージョンが不明な場合はこちらのページをご確認ください。
原因
このエラーは、Apache Tomcat 8.5.51 以降では secretRequired
パラメーターがデフォルトで true に設定されているために発生します。secretRequired
が true
の場合、AJP/1.3 Connector は、secret
属性が非 null のゼロ長ではない文字列に構成されている場合を除き、開始しません。
ソリューション
server.xml
で AJP コネクタに secret
を提供し、それがプロキシ レベルで既存の AJP 構成に一致する必要があります。この構成の詳細については公式の mod_proxy_ajp ドキュメントをご確認ください。この secret のパスワードはリバース プロキシ (例: proxypass) でも定義されている必要があり、このオプションは Apache HTTPD バージョン 2.5 以降で利用できることにご注意ください。もう 1 つの潜在的なソリューションとして、server.xml
で secretRequired="false"
を指定することで、この要件を無効化できます。ただし、これはセキュリティ上の懸念により推奨されません。
To be clear:
Options such as the secret option of Tomcat... can just be added as a separate parameter at the end of ProxyPass or BalancerMember. This parameter is available in Apache HTTP Server 2.4.42 and later.