ASi

VirtualHost と Location の関係

Location を VirtualHost の中に書けば、その内容は該当の VirtualHost にだけ効く。

Listen 60080

<VirtualHost *:60080>
  ProxyPass /somewhere/ http://www.somewhere.co.jp
  <Location /somewhere/>
    AuthType       Basic
    AuthName       "OSXLogin"
    AuthUserFile   /etc/apache2/users/passwords
    Require        valid-user
  </Location>
</VirtualHost>

これを例えば下記のようにしていると、

Listen 60080

<VirtualHost *:60080>
  ProxyPass /somewhere/ http://www.somewhere.co.jp
</VirtualHost>

<Location /somewhere/>
    AuthType       Basic
    AuthName       "OSXLogin"
    AuthUserFile   /etc/apache2/users/passwords
    Require        valid-user
</Location>

port 80 でも 60080 でも somewhere に Basic auth が掛かる。しかし、ProxyPass は 60080 にしか設定していないので、auth に通過した後で NotFound になる。


仮に 80 を public、60080 を private のような使い分けをする場合に、public の 80 の Basic auth が攻撃の糸口にならないとも限らないので、注意が必要。