web-dev-qa-db-ja.com

基本認証を使用して、Apache2仮想ホストで逆プロキシされたTomcat Webアプリケーションを保護するにはどうすればよいですか?

本番Webサーバーで実行されている開発テスト環境をパスワードで保護するために基本HTTP認証を追加する方法を理解するのに問題があります。メインサイトとテスト環境はどちらも、AJPプロキシを使用してTomcatWebアプリケーションの個別のインスタンスを提供する仮想ホストです。 Tomcat環境でweb.xmlを変更せずに、一般の人々がテスト環境にアクセスできないようにする必要があります。保護は、TomcatではなくApacheで実現する必要があります。ただし、仮想ホストのProxyPassおよびProxyPassReverseディレクティブは、.htaccessまたは<Directory>コントロールブロックに配置したものの使用をオーバーライドしているようですが、<VirtualHost>コントロールの本体ではAuthTypeのようなディレクティブを使用できないようです。横にブロックします。私はApache(またはTomcat)の経験があまりなく、どのディレクティブをどこに適用でき、どのディレクティブが他のディレクティブをオーバーライドする可能性があるのか​​わかりません。変更は本番サーバーで行う必要があるため、ダウンタイムが発生することを恐れて簡単に実験することはできません。

Httpd.conf自体は非常に単純です。

LoadModule  proxy_http_module   /usr/lib/Apache2/modules/mod_proxy_http.so
LoadModule  headers_module      /usr/lib/Apache2/modules/mod_headers.so

LoadFile    /usr/lib/libxml2.so

関連する仮想ホストファイル/ etc/Apache2/sites-available/dev443は次のとおりです。

<IfModule mod_ssl.c>
<VirtualHost dev.mydomain.com:80443>
    ServerName  dev.mydomain.com:80443
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/dev

    ProxyPass / ajp://127.0.0.1:8010/
    ProxyPassReverse / ajp://127.0.0.1:8010/

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/dev/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All 
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog /var/log/Apache2/error.log

    LogLevel info

    CustomLog /var/log/Apache2/ssl_access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

    SSLEngine on

    SSLCertificateFile    /etc/ssl/certs/server.crt
    SSLCertificateKeyFile /etc/ssl/private/server.key
    SSLCACertificateFile  /etc/ssl/certs/intermediate.crt

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
        SSLOptions +StdEnvVars
    </Directory>

    BrowserMatch "MSIE [2-6]" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0
    BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

</VirtualHost>
</IfModule>

記録のために、次のバージョンが含まれています:Apache:2.2.14/Tomcat:7.0.23/Java:SE 1.6.0_26-b03/OS:Ubuntu 10.04 LTS

5
Joe Carroll

ご存知のとおり、ローカルディレクトリではなくプロキシサーバーからコンテンツを提供しているため、<Directory>ブロックは適用されません。

代わりに<Location>を試してください。

<Location />
    ProxyPass ajp://127.0.0.1:8010/
    ProxyPassReverse ajp://127.0.0.1:8010/
    AuthType Basic
    AuthName "something"
    AuthUserFile /path/to/htpasswd
    Require valid-user
</Location>
3
Shane Madden