よくある1サーバーでConfluenceを複数稼働させたい場合のリバースProxy設定ですね。
こんな感じ。
あるいは、iptablesで無駄にポートを開けたくない場合とか。
で、内輪向けのConfluenceなんで、Basic認証をかければゼロデイアタックとかも多少は防げるんじゃないかって思ってBasic認証つけたかったんです。
Basic認証は通るけど、ConfluenceでAuthエラー
余裕じゃん・・と思ってこんな感じでProxy設定にBasic認証の設定をかけたわけです。
<VirtualHost *:80>
<Location />
Order deny,allow
Allow from all
AuthType Basic
AuthName "Authentication"
AuthUserFile /etc/apache2/htpasswd
Require valid-user
</Location>
ProxyTimeout 8000
ProxyRequests Off
ProxyPreserveHost On
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
ProxyPass / http://localhost:8090/ retry=1 acquire=3000 timeout=600 Keepalive=On
ProxyPassReverse / http://localhost:8090/
</VirtualHost>
すると、こんなエラーが出る。
HTTPステータス 401 - Basic Authentication Failure - Reason : AUTHENTICATION_DENIED
type ステータスレポート
メッセージ Basic Authentication Failure - Reason : AUTHENTICATION_DENIED
説明 This request requires HTTP authentication.
Apache Tomcat/8.0.50
なんでTomcat側でエラーが出るんだ????
と思い、Tomcat使ってるのはConfluenceなのでこちら側を疑う。Confluenceで一旦ログイン後に、ApacheのBasic認証をつけるとこのエラーは出ない。
ということは、Confluenceは
- COOKIEによる認証を試みる
- COOKIE認証に失敗した場合、Basic認証のAuthorization ヘッダから認証を試みる
となっているのではないか???
余計なことしてほしくないなぁ…と思い、そのAuthenticateをしているだろうプラグインを探す。
なんとなくこいつっぽいなーって思い、「無効」にしたが全然だめだった。
Confファイルを探すもなんか見つからない…。
だったら、Proxyする際にAuthenticationヘッダを送らなければいいんじゃんって思って、Apacheにmod_headersを導入
# a2enmod headers
した後に、apache.conf(debianなんでsites-enables内だけど)を書き換えて
RequestHeader unset Authorization
を追加。
すると問題なくConfluence側がBasic認証をやめてくれた。
Confluence、REST and os_authTypeとか読むとquery stringsにos_authType=basicって入れないとBasic認証ヘッダをスルーしてくれそうなんだけどな。ま、いいや。。