我在 Ubuntu 14.04 家庭服务器上运行 apache。该服务器位于路由器后面,因此需要转发所有端口才能使用。
我已经为 HTTPS 转发了端口 443,但没有转发端口 80,因为我认为这样更安全。但是,现在我遇到了一个问题,每当我在https://
输入服务器的 URL 时忘记输入时(例如通过浏览器访问 Web 界面时),我都会毫不意外地收到“服务器无响应”错误。
我真正希望发生的情况是:服务器永远不会通过端口 80 发送任何信息,并且如果有人尝试通过 http 连接,他们会被自动重定向到 https 地址。
是否有可能做到这一点?
此外,即使我(或任何目标用户)非常小心,从不通过 HTTP 进行通信,只通过 HTTPS 进行通信,打开端口 80 本身是否也存在安全风险?
答案1
由于所有浏览器都假设http://
URL 使用端口 80,因此如果不打开端口 80,就无法进行重定向。
尽管如此,保持 80 端口开放几乎没有什么安全问题,仅有的重定向到 https 站点。很多站点都这样做。
在 apache 中,您可以向端口 80(非 SSL)vhost 添加类似这样的内容:
Redirect permanent / https://example.com/
另外,研究 HSTS 来提高您的安全性。
答案2
在这一点上我同意 EEAA,但作为替代方案,您也可以使用 HTML 执行以下操作。创建一个 HTML 页面并将其放入其中:
<META HTTP-EQUIV="Refresh" CONTENT="5; URL=https://someurl">
这样,您就无需通过任何配置更改进行任何端口转发或重定向。只需创建一个 HTML 文件,当您访问 HTTP 端时,该文件会将您重定向到 HTTPS。