有没有办法将发送到我服务器的所有网站请求从端口 80 重定向到端口 443没有需要 Apache 监听端口 80?这样就可以释放端口 80 供其他用途。我在想,就像某种本地代理一样,它可以检测传入的请求是否针对某个站点,如果是,则只需将其指向端口 443 上的 https 站点。如果不是,则让它继续浏览端口 80 上运行的其他任何程序。谢谢。
答案1
在我看来,您正在寻找的是一个协议多路复用器,而我发现有用的尝试是sslh
:
https://github.com/yrutschle/sslh
它非常容易安装和配置,并且可以通过分析第一个数据包来检测某些应用程序并执行端口转发。
查看以下链接的示例:
https://www.eigenmagic.com/2017/08/21/how-to-share-one-port-number-https-ssh-and-openvpn/
我自己还没有测试过,并且也不会推荐在生产环境中使用这样的东西。
答案2
您需要在端口 80 上安装一些可以理解纯 HTTP 的东西,否则连接那里的浏览器将被拒绝或忽略(取决于您的防火墙)。
您必须将 Apache 配置为监听端口 80,并将所有请求重定向到此端口(例如:在端口 80 和端口 443 上有不同的 VirtualHosts)
您可以在端口 80 上使用重写模块来处理 HTTP 请求:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://your.server.com%{REQUEST_URI}
这会将所有请求重定向到同一个 URL,但使用 https://(也可以重定向到另一台服务器)。例如:
http://your.server.com/foo/bar -> https://your.server.com/foo/bar
如果您希望将端口 80 保留用于其他用途,则可以微调重写规则以仅重写某些请求并为其余请求提供服务,或者将其余请求重写到其他服务。但显然您必须决定在端口 80 上侦听的是 Apache 还是其他服务。
更多信息请见Apache mod_rewire 文档。