我的目标是当使用 IP 地址直接访问服务器时阻止 HTTP 和 HTTPS 流量,并强制特定站点使用 SSL。
然而,我收到了 CloudFlare 525 SSL 握手失败https://example.com
。
000-默认.conf
<VirtualHost *:80>
Redirect 403 /
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
Redirect 403 /
</VirtualHost>
</IfModule>
例如.com.conf
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example.com/html
RedirectPermanent / https://example.com
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/example.com/html
SSLEngine on
SSLCertificateFile /var/www/example.com/.ssl/example.com.crt
SSLCertificateKeyFile /var/www/example.com/.ssl/example.com.key
</VirtualHost>
</IfModule>
VirtualHost 配置
*:80 is a NameVirtualHost
default server 10.128.0.2 (/etc/apache2/sites-enabled/000-default.conf:1)
port 80 namevhost 10.128.0.2 (/etc/apache2/sites-enabled/000-default.conf:1)
port 80 namevhost examplecom (/etc/apache2/sites-enabled/example.com.conf:1)
*:443 is a NameVirtualHost
default server 10.128.0.2 (/etc/apache2/sites-enabled/000-default.conf:6)
port 443 namevhost 10.128.0.2 (/etc/apache2/sites-enabled/000-default.conf:6)
port 443 namevhost example.com (/etc/apache2/sites-enabled/example.com.conf:8)
答案1
我最终为我的 IP 地址创建了一个单独的自签名证书来解决这个问题。
000-默认.conf
<VirtualHost *:80>
Redirect 403 /
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
Redirect 403 /
SSLEngine on
SSLCertificateFile /var/www/self-signed.pem
</VirtualHost>
</IfModule>
答案2
在为 IP 地址实现 https 的 vhost 中,只需添加require all denied
而不是重定向。恐怕您对证书错误无能为力(除了获取对 IP 地址本身有效的证书),因为在 Apache 可以对请求执行任何操作之前就建立了 SSL 连接。
答案3
使用 Apache 2.4,第一个 vhost 将是通过 IP 定位的主主机,不需要“ServerName”
<VirtualHost *:80>
ServerAdmin YourEmail
DocumentRoot /home/apache/www
<Directory /home/apache/www/>
Require all denied
</Directory>
ErrorLog /var/log/apache/error.log
CustomLog /var/log/apache/access.log combined
ServerSignature Off
</VirtualHost>
Include /path/to/vhosts/*.conf