web-dev-qa-db-ja.com

Tomcatを使用した基本認証Apache

次のサーバー設定があります。

  • AtlassianのJiraを実行しているApacheTomcat 7(http:// <server-ip>:8081/tickets
  • 現時点ではjiraアプリケーションのみを提供するリバースプロキシとしてのApache2.4 Webサーバーですが、今後さらに増える予定です(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を構成するにはどうすればよいですか?

4
twenty7

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を定義する必要がありました。

  • プロキシタグを削除しました
  • jira-restAPIのLocation-Tagを追加しました

問題を解決するためのアイデアを得ました:

1
twenty7

Require user myuserRequire valid-userに置き換える必要があります

削除します

    <Proxy *>
        Require all granted
    </Proxy>
0
Froggiz