将 http 重定向到不同端口上的 https apache

将 http 重定向到不同端口上的 https apache
<VirtualHost *:82>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/cert.pem
DocumentRoot "/var/www/site"
<Directory "/var/www/site">
allow from all
Options -Indexes
</Directory>
</VirtualHost>

这是我的虚拟主机配置。其 SSL 在端口 82 上运行。

我的问题是,当我尝试通过 http 获取此页面时,它返回如下错误页面:

Bad Request

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.
Hint: https://localhost:82/

因此,我只想将 http 重定向到端口 82 上的 https。我尝试添加:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

但它不起作用,因为它首先需要 http。

我怎样才能做到这一点?

谢谢。

答案1

我知道你可以将 80 重定向到 443 ssl,它们是不同的端口。但就我而言,我想通过 ssl 在该端口 (82) 上提供所有内容。也许可以通过播放自定义错误页面来实现,因为当我在此端口上使用 http 时它会显示错误页面,但我不知道该怎么做

您不能在同一端口上同时托管加密和纯文本。如果有人连接到纯文本端口(例如端口 80 或 81),那么您可以将他们转发到 HTTPS 端口(本例中为 82)。因此,类似下面的方法应该可以解决问题:

# Plain-text rewrite:
<VirtualHost *:81>
DocumentRoot "/var/www/site"
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}:82%{REQUEST_URI}
<Directory "/var/www/site">
allow from all
Options -Indexes
</Directory>
</VirtualHost>

# SSL config
<VirtualHost *:82>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/cert.pem
DocumentRoot "/var/www/site"
<Directory "/var/www/site">
allow from all
Options -Indexes
</Directory>
</VirtualHost>

在这种情况下,任何连接到端口 81 的用户都将被转发到端口 82。任何连接到端口 82 的人都将通过 SSL。

答案2

在 httpd-ssl 文件中,8085 是我的自定义端口,添加“ErrorDocument 400https://您的网站:8085/“到虚拟主机配置

<VirtualHost _default_:8085>
    ErrorDocument 400 "https://your_website:8085/"
    ...

相关内容