我想设置我的 linux 机器,以便任何访问端口 80 的东西都会被简单地告知询问 443。我希望它与域、IP 或任何可能存在的特定细节无关。如果可以请求端口 80,则应告知不可以。我们在 443 上这样做。
我将在 443 上使用 Apache,因此可以很容易地将其绑定到 80,但不要认为解决方案必须在端口 80 上包含 Apache。
需要明确的是,我正在寻找一种不需要更改虚拟主机的解决方案。我了解可以通过继承传递的全局重定向。这需要虚拟主机更改。我正在寻找更包罗万象且不易出现“糟糕,我忘记了那条线,现在端口 80 正在暴露我的未加密数据”的东西。
你将如何解决这个问题?iptables、apache、带有 netcat 的自定义 shell 脚本和一些让它成为 SSL 的魔法?
尝试将其添加到您的 httpd.conf;
从这里 - > http://www.sslshopper.com/apache-redirect-http-to-https.html
这使用了 mod_rewrite,所以请确保您事先安装了它。
推荐的方法是按照您的说明在每个站点的 VHOST 文件中进行设置,如此处所述;
http://wiki.apache.org/httpd/RedirectSSL
但是,Apache wiki 确实更详细地记录了上述重写方法;
http://wiki.apache.org/httpd/RewriteHTTPToHTTPS
使用 iptables 将端口 80 重定向到 443 是微不足道的,但根据您的描述,您显然不想在端口 443 上运行 http:您希望人们从 http 重定向到 https。
您清楚地知道这可以在 Apache 中为每个虚拟主机完成,但您不希望使用它来避免配置错误;否则我会推荐 sgtbeano 的解决方案。
基于此,我建议您停止在端口 80 上使用 Apache,并在端口 80 上运行另一个执行简单重定向的网络服务器。
您甚至可以使用不同的配置目录在端口 80 上运行单独的 Apache 实例。这也将避免配置错误,但可能更难维护(没有多少人期望同一主机上的 2 个不同的 Apache 实例具有 2 组不同的配置文件)。在这种情况下,您可以将 sgtbeano 的配置用于端口 80 实例。
由于 HTTP 和 HTTPS 是两种不同的协议,您不能简单地将 iptables tcp/80 重定向到 tcp/443,因为 apache 无法理解 tcp/443 上的 HTTP
所以 HTTP 请求必须到达 apache/nginx/etc,然后在应用层被“重定向”。这将在 nginx 上使用“redirect / https://domain.name/ ”或在 apache 上使用重写规则来完成