我有一台装有 apache 2.4 web 服务器的 ubuntu 服务器,原始域正在使用 SSL 运行。有人将他们的域指向我的服务器,并在我的虚拟主机中指定了服务器名称和服务器别名,因此它应该只接受来自原始域的连接,下面是虚拟主机
<IfModule mod_ssl.c>
<VirtualHost *:443>
DocumentRoot /var/www/interoptive.com
ServerName interoptive.com
ServerAlias interoptive.com
<Directory /var/www/interoptive.com>
AllowOverride All
allow from all
Options -Indexes
</Directory>
ErrorLog /var/www/interoptive.com/apache.error.log
CustomLog /var/www/interoptive.com/apache.access.log common
php_flag log_errors on
php_flag display_errors off
php_value error_reporting 2147483647
php_value error_log /var/www/interoptive.com/php.error.log
Include /etc/letsencrypt/options-ssl-apache.conf
ServerAlias interoptive.com
SSLCertificateFile /etc/letsencrypt/live/interoptive.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/interoptive.com/privkey.pem
RewriteEngine on
RewriteCond %{SERVER_NAME} =interoptive.com
</VirtualHost>
</IfModule>
原始域名是 interoptive.com,另一个域名是 ecomprime.com。如何配置 apache 以仅接受来自原始域的连接并丢弃来自其他域的所有连接?
尝试了互联网上的资源,但似乎都不起作用。非常感谢您的帮助、建议和推荐。提前致谢。
答案1
这是 Apache 的正常现象虚拟主机匹配对于基于名称的虚拟主机:
如果有多个
VirtualHost
指令列出确定为最佳匹配的 IP 地址和端口组合,则剩余步骤中的“列表”是指匹配的虚拟主机列表,按照它们在配置文件中的顺序排列。- -配置文件中具有指定 IP 地址的第一个 vhost 具有最高优先级,并会捕获对未知服务器名称的任何请求 - -
放置一个万能塞VirtualHost *:443
前实际VirtualHost *:443
操作就是你想要的。由于它是 TLS 虚拟主机,因此你还需要一个证书,但你可以使用已有的证书,因为主机名无论如何都不会匹配。
<VirtualHost *:443>
ServerName catchall
Redirect 404 /
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/interoptive.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/interoptive.com/privkey.pem
</VirtualHost>
<VirtualHost *:443>
ServerName interoptive.com
DocumentRoot /var/www/interoptive.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/interoptive.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/interoptive.com/privkey.pem
</VirtualHost>