如果用户访问http://example.com:443之类的网站,我如何给用户一个连接重置错误,而不是给出以下错误:
错误的请求
您的浏览器发送了此服务器无法理解的请求。
原因:您对启用 SSL 的服务器端口使用纯 HTTP。
请改用 HTTPS 方案访问此 URL。
上面的错误是 Apache 提供给我不想要的用户的。相反,我只想停止连接,而不是给出文本响应。这可能吗,应该是,因为很多网站都有这个功能。提前致谢。(此外,我自己无法尝试任何事情,因为我不知道它是如何工作的,所以如果可以的话,我可以自己实现它)。
在某种程度上类似,但无论如何都没有回答我的问题: Serving port 443 over http 创建 400 Bad Request Error 而不是 redirect,但提到:“如果您尝试与其他服务器进行此类请求,那么他们将关闭连接而不会出现任何错误完全挂起或者只是挂起,因为他们仍然希望从客户端获得 TLS 握手” ,所以我的问题是如果用户访问http://example.com:443如何关闭连接。
以防万一:
请注意,当用户访问 http:// 而不是 https:// 上的端口 443 时,我想关闭连接。我不希望 apache 显示错误请求消息。我想关闭连接,因为有人提到无法将 http:// 上的 443 重定向到 https://。如果有任何方法可以做到这一点,请告诉我(除了 HSTS,我不愿意信任)。我认为这将使用防火墙来完成(不确定)。我也见过 cPanel 这样做,但我没有将 cPanel 用于其他目的,所以请不要要求我这样做。
还:
除非您修改 Apache 的源代码,否则无法更改 400 bad request 页面,因此无法从 http 重定向到 https。我不认为我被允许修改 Apache 的源代码。
我还看到运行curl http://www.google.com:443
说curl: (52) Empty reply from server
,所以发送一个空回复应该足以停止连接对吧?我不知道。但也许是的,如果是这样,怎么办?(如果有不同的连接断开方法,请不要回答这个问题)。
需要明确的是:我要求的是sudo ufw deny out 443 http
(可能无效)之类的东西。
有趣的。像这样的东西怎么样:
这将拒绝除 localhost 之外的任何端口 443 的流量。
但实际上我认为您可能想要做的(?)只是将所有 http 请求重定向到 https。重定向后 443 将是多余的。
我在 Apache 源代码目录中编辑了一个文件
./modules/ssl/ssl_engine_kernel.so
。在该文件中,您可以找到一行内容:
请改用 HTTPS 方案访问此 URL,请.....`。
将其更改为:
然后,重新编译 Apache。你应该很好:)