web-dev-qa-db-ja.com

基本認証とSSLを使用した複数のApache仮想ホスト

私はちょうどApacheを使い始めたばかりで、私はほとんどすべてが私が望むように設定されており、1つの側面に問題があります。簡単な概要:「/ var/www」というドキュメントルートがある場合、「/ var/www/site1」と「/ var/www/site2」に2つのサイトがあります。両方のサイトにSSLがあり、単純なhtpasswdファイルを使用して認証し、2つの異なるポート(443および444)で実行します。すべてが期待どおりに機能し、認証とSSLの両方が正常に機能します。唯一の問題は、特定の条件下でパスワードなしで「site2」にアクセスできることです。

https://10.0.0.13:444/site2 」を参照すると、SSLおよび認証プロンプトが表示され、ログインでき、すべて正常に機能します。 「site1」についても同じことが言え、SSLと認証の両方が正しく機能します。ただし、「 https://10.0.0.13/site2 」を参照すると、Apacheはパスワードなしで「site2」にアクセスできます。 site1およびsite2 DNSの両方がサーバーのIPアドレスに解決されます。 vhostsの設定では理解できないことがあるはずです。私は多くのことをいじってみましたが、機能するようには見えませんし、オンラインでそれを理解するのに役立つ例も見つけられません。どんな助けも大歓迎です!私が使用している現在の「default-ssl」仮想ホスト設定は次のとおりです。

<VirtualHost *:443>
        ServerName  site1.domain.com
        ServerAdmin site1@localhost

        SSLEngine on
        SSLCertificateFile /etc/Apache2/site1.pem

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

        ErrorLog /var/log/Apache2/error.log
        LogLevel warn
        CustomLog /var/log/Apache2/access.log combined

    <Location /site1>
        AuthType Digest
        AuthName "site1"
        AuthDigestDomain /var/www/site1/ http://site1.domain.com/site1

        AuthDigestProvider file
        AuthUserFile /etc/Apache2/htpasswd
        Require valid-user
        SetEnv R_ENV "/var/www/site1"
     </Location>
</VirtualHost>

<VirtualHost *:444>
        ServerName  site2.domain.com
        ServerAdmin site2@localhost

        SSLEngine on
        SSLCertificateFile /etc/Apache2/site2.pem

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

        ErrorLog /var/log/Apache2/error.log
        LogLevel warn
        CustomLog /var/log/Apache2/access.log combined

    <Location /site2>
        AuthType Digest
        AuthName "site2"
        AuthDigestDomain /var/www/site2/ http://site2.domain.com/site2

        AuthDigestProvider file
        AuthUserFile /etc/Apache2/htpasswd
        Require valid-user
        SetEnv R_ENV "/var/www/site2"
     </Location>
</VirtualHost>
3
Cragmuer

@Cragmuerあなたがしたいのが、別々のユーザー認証で2つの異なるディレクトリをホストするだけなら、別の<location>ディレクティブをサイト設定に追加するだけです。 ports.confファイルが正しく設定されていると仮定しますが、とにかくサンプルを含めます。設定例は次のようになります。

/ etc/Apache2/sites-available

<VirtualHost *:443>
        SSLEngine on
        SSLCertificateFile /etc/Apache2/cert-file.pem

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

        ErrorLog /var/log/Apache2/error.log
        LogLevel warn
        CustomLog /var/log/Apache2/access.log combined

    <Location /site1>
        AuthType Digest
        AuthName "site1"
        AuthDigestDomain /var/www/site1/ http://10.0.0.13/site1

        AuthDigestProvider file
        AuthUserFile /etc/Apache2/htpasswd
        Require valid-user
        SetEnv R_ENV "/var/www/site1"
     </Location>

    <Location /site2>
        AuthType Digest
        AuthName "site2"
        AuthDigestDomain /var/www/site2/ http://10.0.0.13/site2

        AuthDigestProvider file
        AuthUserFile /etc/Apache2/htpasswd
        Require valid-user
        SetEnv R_ENV "/var/www/site2"
    </Location>
</VirtualHost>

/ etc/Apache2/ports.conf

<IfModule mod_ssl.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>

さらにディレクトリを追加する場合は、別の<location>ディレクティブを挿入するだけです。異なるドキュメントルートを持つ個別のドメインを実際にホストする場合は、NamedVirtualHostディレクティブの使用を検討する必要があります。また、投稿した構成に2つの異なる証明書ファイルは必要ありません。1つは問題なく動作します。

3
mosipd