虚拟主机 / apache2 / ssl 配置 - 从 80 自动重定向到 443 不起作用 - 错误请求 400 错误

虚拟主机 / apache2 / ssl 配置 - 从 80 自动重定向到 443 不起作用 - 错误请求 400 错误

我花了几个小时试图解决这个问题,但我根本就没有任何头绪——所以在此先向任何能帮助我解决这个问题的人表示衷心的感谢。

这是我收到的 Bad Request 400 错误:

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.

这是我的 vhosts 文件:

<Directory /var/www/sub1>
   Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

<VirtualHost *:80>
    ServerName  sub1.site1.com
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

</VirtualHost>

<VirtualHost *:443>
    ServerName sub1.site1.com
    DocumentRoot /var/www/sub1
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/sub1.site1.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/sub1.site1.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/sub1.site1.com/chain.pem
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

奇怪的是,只要我在 URL 末尾指定端口 80,它就可以正常工作。如果我不在 URL 前面输入 http://,它就可以正常工作。-但是-如果我输入http://sub1.site1.com- 它引发上述错误。

我不确定我的 apache2 配置或者我在 ubuntu 服务器上使用 certbot 的事实是否与这个奇怪的错误有关,但我已经尝试了所有能想到的方法来修复它。

那么为什么呢:

sub1.site1.com
sub1.site1.com:443
https://sub1.site1.com
http://sub1.site1.com:80

一切正常,但是

http://sub1.site1.com 

抛出上述错误而不是自动重定向到 4 个正常运行的 URL 之一?

答案1

请删除您已创建的现有 Virtualhost conf 文件。然后site1.conf/etc/apache2/sites-available/文件夹中创建一个新文件

cd /etc/apache2/sites-available/
sudo nano site1.conf

site1.conf按如下方式写入文件 -

<VirtualHost *:80>
    ServerName sub1.site1.com
    DocumentRoot /var/www/sub1

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/sub1>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    RewriteEngine On
    RewriteCond %{SERVER_PORT} 80
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

<VirtualHost *:443>
    ServerName sub1.site1.com
    DocumentRoot /var/www/sub1

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/sub1.site1.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/sub1.site1.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/sub1.site1.com/chain.pem
</VirtualHost>

启用虚拟主机 conf 文件,禁用默认配置文件并重新启动 apache 服务

cd /etc/apache2/sites-available/
sudo a2ensite site1.conf
sudo a2dissite 000-default.conf
sudo systemctl restart apache2

希望你的问题能够得到解决。

相关内容