我花了几个小时试图解决这个问题,但我根本就没有任何头绪——所以在此先向任何能帮助我解决这个问题的人表示衷心的感谢。
这是我收到的 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
希望你的问题能够得到解决。