Atlassian Companion アプリで特定の特殊文字を含むファイルの編集に失敗する
プラットフォームについて: 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 は除く
要約
ユーザーが Companion アプリを使い、特殊文字を含むファイルを編集できない。画面に "予期せぬ応答 ステータス コード 401" エラーが表示される場合もあります。
環境
- Confluence Server または Data Center (任意のバージョン)
- リバース プロキシ
- Apache
- Apache で AJP プロトコルを利用
- NGINX
診断
- リバース プロキシをバイパスするとファイルを編集できる。
atlassian.confluence.log
に次のエラーが返される。
2020-08-06 11:56:34,513 WARN [http-nio-8098-exec-25] [jwt.internal.sal.DefaultAuthenticationResultHandler] createAndSendFailure Failure during JWT authentication
-- url: /confluence/download/attachments/1966122/test%20(11).txt | traceId: 6c24626ada0a25e6
com.atlassian.jwt.exception.JwtInvalidClaimException: Expecting claim 'qsh' to have value 'f3c8cf84498c36b0e1b82a372f6d918b8ff6f1d9466e7a3c33c9a7ee3cc9b3f2' but instead it has the value '15a0eca3badc559bfe79955f7bc3201a4538ad171f8e85f9bbc8eedc4da78f96'
原因
プロキシが処理する URI はデフォルトで正規化に従います。これは、正規化が不要である、特殊文字を含むファイルで問題になります。リバース プロキシに次の変更を行い、常に元の URI を利用するようにします。
ソリューション
AJP プロトコルを使用する Apache リバース プロキシ
httpd.conf.local
ファイルに次の JkOption が存在する可能性があります。
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
Confluence 5.10.x では +ForwardURICompat パラメーターを +ForwardURICompatUnparsed に変更する必要があります。例:
JkOptions +ForwardKeySize +ForwardURICompatUnparsed -ForwardDirectories
Apache リバース プロキシ
Apache のリバース プロキシについては、次のものが存在することを確認します。
ProxyPass /confluence http://localhost:8090/confluence nocanon
NGINX
Nginx の場合、nginx.conf ファイルを編集して proxy_pass ディレクティブに $request_uri;
を追加します (ロケーションとコンテキスト パスが同一である場合)。例:
location /<context-path> {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://<base-url>/<context-path>$request_uri;
}
これが動作しないかエラーを返す場合 (上記の変更を行うと 502 エラーが返されるお客様がいらっしゃいます) は次の構成を利用してください。
location /<context-path> {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
if ($request_uri ~* "/<context-path>(/.*)") {
proxy_pass http://<base-url>/<context-path>$1; break;
}
proxy_pass http://<base-url>/<context-path>;
}
いずれの場合であっても、変更を反映するためにプロキシを再起動する必要があります。