我正在尝试让 apache 从 http 重定向到 https,但我希望它们都位于同一个端口(20100,但我怀疑这是否重要)。基本上发生了什么这里但我这样做不是为了 webmin。目前我已将其配置为提供 HTTPS 服务,当我使用 HTTP 访问时,我得到:
Your browser sent a request that this server could not understand.
Reason: You're speaking plain HTTP to an SSL-enabled server port.
Instead use the HTTPS scheme to access this URL, please.
似乎有很多类似的问题,但我找不到真正回答我的问题的问题。
答案1
Apache 无法做到这一点。Apache 无法在同一端口上运行 HTTPS 和 HTTP。
我知道有几种端口多路复用器的设计目的是HTTPS/OpenVPN 和SSH在同一端口上运行,但这些需要额外的软件。
- SSLH:http://www.rutschle.net/tech/sslh.shtml
- 多路复用:http://www.pond-weed.com/multiplex/(似乎已经死了)
答案2
可以通过重定向到自定义“400 - 错误请求”页面并使用重写规则修改重定向来实现此目的。在以下示例中,我请求
http://test.mydomain.com:27000
并重定向至
https://test.mydomain.com:27000
有一个虚拟主机。
代码:
ErrorDocument 400 /
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{SERVER_NAME}:27000/$1 [R,L]
或者您直接重定向到该页面的 HTTPS 版本。
代码:
ErrorDocument 400 https://test.mydomain.com:27000
但您将失去在真正的“错误请求”页面上重定向的能力。