我以为我在将 HTTP 流量重定向到 HTTPS 时遵循了公认的智慧,但是在今天出现 DNS 问题之后,不得不使用 IP 地址而不是 URL,我意识到有些不对劲。
配置文件:
<VirtualHost *:80>
ServerName 127.0.0.1
DocumentRoot /var/www/web
</VirtualHost>
<VirtualHost _default_:443>
ServerName example.com
DocumentRoot /var/www/web
SSLEngine On
SSLCertificateFile /etc/ssl/local_certs/example.com.pem
SSLCertificateKeyFile /etc/ssl/local_certs/example.com.pem.key
Header set Access-Control-Allow-Origin "*"
</VirtualHost>
<VirtualHost *:80>
ServerName example.com
Redirect permanent "/" "https://example.com/"
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
鉴于上述,我对几点感到困惑:
1) 如果我们现在使用 IP 地址,为什么上述 ServerName 特定虚拟主机中的任何一个都为页面提供服务?如果我当前使用的 IP 地址对应于域名(应该,但今天没有,DNS 问题),这会减少我的困惑。
2) 鉴于我使用的 IP 地址不是 127.0.0.1,为什么我允许访问端口 80?
解释一下 127.0.0.1 主机,这是一个本地 apt 存储库的方便。我知道 ServerName 不是 100% 安全的,但这不是一个紧迫的问题。
当我通过 IP 浏览网站时会发生什么:
首先,我被重定向到同一 IP 地址上的 HTTPS,这正是我所期望的。但是,如果我返回浏览器中的地址栏并从 https 中删除“s”,它会在没有重定向的情况下将我导航到端口 80 上的页面,并且我可以继续浏览不安全的站点。 …