次のサーバー設定があります。
http:// <server-ip>:8081/tickets
)http://<server-ip>/tickets
)ここで、基本認証を設定して、システム全体(つまり、http://<server-ip>/*
)へのアクセスを制限したいと思います。
有効なApacheサイト構成は次のようになります。
<VirtualHost *:80> <Proxy *> すべての許可が必要 </ Proxy> ProxyRequests Off [ .________________ <場所/> AllowOverrideAuthConfig AuthType Basic AuthName "Restricted Content" AuthUserFile /etc/Apache2/.htpasswd ユーザーmyuser </ Location> </ VirtualHost> を要求する
しかし、この設定では、ログインしようとすると問題が発生します。ログインデータを入力すると、ログインウィンドウがポップアップして再度ログインを要求します。 3回試行すると、Tomcatから401エラーが返されます。 Apacheではなくアプリケーション。
このリクエストのApacheのaccess.logにもerror.logにもエントリはありません。ただし、Apacheは間違った資格情報でリクエストをログに記録します。
/tickets/*
にアクセスするときにクライアントに認証を強制しながら、すべての/*
要求をTomcatにプロキシするようにApacheを構成するにはどうすればよいですか?
Tomcatアプリケーションから401エラーが発生したのではないかと疑われました。 Apacheは承認リクエストを転送したようですが、そうすべきではありません。リクエストヘッダーから"Authorization"
パラメータを削除する必要がありました。
これをする。 ProxyPassディレクティブの直前にmod_headers
を有効にし、RequestHeader unset "Authorization"
を追加しました。
したがって、私の設定は次のようになります。
<VirtualHost *:80> ProxyRequests Off ProxyPreserveHost On RequestHeader unset "Authorization" &ltLocation "/tickets/rest/"> すべてを満たす 注文を許可、拒否 すべてから許可 </ Location> <Location/> AuthTypeBasic AuthName "Restricted Content" AuthUserFile/etc/Apache2/.htpasswd Requireuser myuser </ Location> ProxyPass /ticketshttp://localhost:8081/tickets ProxyPassReverse/ticketshttp://localhost:8081/tickets </ VirtualHost>
編集:
Jiraはガジェットに独自のREST-APIを使用するため、/tickets/rest
パスのLocation-Tagを定義する必要がありました。
問題を解決するためのアイデアを得ました:
Require user myuser
をRequire valid-user
に置き換える必要があります
削除します
<Proxy *>
Require all granted
</Proxy>