如何强制HTTPS连接?

我在Ubuntu 14.04家庭服务器上运行apache。 服务器位于路由器的后面,因此所有端口都需要转发以供使用。

我已经转发了端口443 HTTPS,但没有转发端口80,因为我认为它会更安全。 然而,现在我遇到这样的问题:每当我忘记inputhttps://input服务器的URL时(比如通过浏览器访问Web界面时),我毫不奇怪地得到一个“服务器没有响应”的错误。

我真正想要发生的事情是:服务器从不通过端口80发送任何信息,如果有人试图通过http连接,它们会自动redirect到https地址。

是否有可能做到这一点?

而且,即使我(或任何预期的用户)非常小心地不要通过HTTP进行通信,仅仅是HTTPS,开放端口80本身也具有安全风险。

由于所有的浏览器都会假设http:// urls的端口为80,所以没有端口80打开的情况下无法进行redirect。

也就是说,将端口80打开并仅对 https站点进行redirect的安全问题非常less。 许多网站都这样做。

在Apache中,你可以添加像这样的东西到你的端口80(非SSL)虚拟主机:

 Redirect permanent / https://example.com/ 

另外,看看HSTS的安全游戏。

我在这个EEAA上,但作为替代,你可以使用HTML代替下面的代码。 创build一个HTML页面,并把它放在里面:

 <META HTTP-EQUIV="Refresh" CONTENT="5; URL=https://someurl"> 

这样您就不会做任何端口转发或通过任何configuration更改redirect。 只需简单地创build一个HTML文件,在您访问HTTP的HTTP端时将其redirect到HTTPS。