我已启用三个虚拟主机
- 000-default.conf (*:80) => 应该是其他任何虚拟主机中不存在的所有内容的默认值
- domain.conf (*:80 重定向到 https) => ServerAlias domain.local
- domain-le-ssl.conf (*:443)(由 certbot 制作)=> ServerAlias domain.local
我的情况是,我可以使用 IP 地址访问我的 Web 服务器并进入 000-default.conf 中的根目录,但如果我尝试任何其他域(如 example1.local),它会转到 https 并抛出 SSL 证书错误,因此我得出结论,它使用了 domain.conf 虚拟主机。
我如何确保 000-default.conf 也能捕获其他虚拟主机中没有的 ServerNames?
我尝试过的:在 000-default.conf 中
VirtualHost _default_:80>
ServerAlias *
我的三个虚拟主机:
<VirtualHost _default_:80>
ServerAlias *
ServerAdmin webmaster@localhost
DocumentRoot /var/www/dir1
<Directory /var/www/dir1>
AuthType basic
AuthName "Please login."
AuthUserFile /etc/apache2/apache.htpasswd
Require valid-user
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName www.example.be
ServerAlias example.be
ServerAdmin webmaster@localhost
DocumentRoot /var/www/example
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =example.be
RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName example.be
ServerAlias www.example.be
ServerAdmin webmaster@localhost
DocumentRoot /var/www/example
SSLCertificateFile /etc/letsencrypt/live/www.example.be/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.be/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/www.example.be/chain.pem
</VirtualHost>
</IfModule>
答案1
如果您只想在一个域上使用 SSL VirtualHost,请相应地设置ServerName
和ServerAlias
指令。任何不匹配的内容都将落入默认 VirtualHost。为了清楚起见,您可能还想用数字来标识配置文件的顺序。
笔记:如果任何流量到达 SSL VirtualHost 中配置的端口时,它将始终以 HTTPS 形式提供服务,并且如果主机名与证书不匹配,则会显示证书错误。
例如:
000-默认.conf
<VirtualHost *:80>
ServerName myserver.example.local
ServerAlias example.local
DocumentRoot /var/www/default
...
</VirtualHost>
001-域.conf
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
Redirect permanent / https://www.domain.com/
...
</VirtualHost>
002-域-ssl.conf
<VirtualHost *:443>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/example.com
...
</VirtualHost>