私はちょうど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>
@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つは問題なく動作します。