虽然我不是Ubuntu的专家,但我已经有两台服务器运行了几年没有问题。
昨晚,当试图访问其中一个网站时,我收到了错误:
**Bad Request**
Your browser sent a request that this server could not understand.
Additionally, a 400 Bad Request error was encountered while trying to use an ErrorDocument to handle the request.
经过几个小时的挫折并没有成功,我重建了服务器。当Ubuntu正在安装时,我去了另一台服务器并得到了完全相同的错误。 第一台服务器现在已经重建,并显示相同的错误。
我关闭了网络上的每台计算机。关闭路由器并重新启动。
除了两台服务器外,网络还包括三台Windows机器和一台Ubuntu桌面。
我尝试将机器与互联网隔离,我尝试过有线和无线客户端。
转到服务器上的localhost会显示Ubuntu Apache Default页面。
问题开始时唯一发生的事情是Windows决定关闭此计算机以进行更新。我不知道这是如何导致问题的,但我已将此机器与网络隔离,并且存在问题。
我清除了Cookie,使用了五种不同的浏览器,它们都报告了相同的错误。我想出了一些想法,并寻找任何建议。
答案 0 :(得分:57)
就我而言,它实际上是DocumentRoot中的下划线 _
导致问题和数小时的调试。一旦我从DocumentRoot路径中删除它,一切正常。
答案 1 :(得分:6)
对于较新的httpd版本,不支持URL中的连字符,在这种情况下,您必须将http不安全的HttpProtocolOptions添加到httpd.conf文件中,之后它可以正常工作。
答案 2 :(得分:4)
好的,我99.99%肯定在 Capsule 的帮助下找到了问题。成功的关键是将Apache的错误级别改为调试。这给了我一个起点,从那里得到了一些试验和错误,一切都很好。
我有两台服务器B777和B767用于本地开发。对于开发网站,我使用了像www.something.767和www.something.777这样的东西。所有站点都列在主机文件中。
几年来,这个工作得很好。出于某些原因,我可能永远不会理解,昨晚,我开始在服务器和我今晚建造的另一台服务器上得到上述错误。
似乎问题是在域名中使用数字。我一旦将域名从www.something.767更改为www.something.local(或者显然是任何其他非数字域名)一切都恢复正常了。
答案 3 :(得分:1)
我不得不从_
指令中删除下划线(ServerName
)以及/etc/hosts
中的主机名。
不过,DocumentRoot
中的下划线很好。
因此,/etc/hosts
中的相关行如下所示:
127.0.0.1 mycoolsite.localhost
/etc/apache2/extra/httpd-vhosts.conf
中的相关块如下所示:
<VirtualHost *:80>
DocumentRoot "/Users/satoshi/Sites/my_cool_site"
ServerName mycoolsite.localhost
ErrorLog "/private/var/log/apache2/my_cool_site.localhost-error_log"
CustomLog "/private/var/log/apache2/my_cool_site.localhost-access_log" common
</VirtualHost>
进行更改后,请不要忘记运行apachectl restart
。
答案 4 :(得分:0)
This error haunted me for days, untill I finally got it.
In my case, I was making a CURL to an URL that has an empty space at the end. Can you believe it? Removing the space was enough to work fine.
答案 5 :(得分:0)
在Docker Compose中,如果使用允许您使用容器名称作为来回通信的url /主机的网络,则需要确保名称中不使用下划线(每个Nero's answer )。
这使我花了很多时间进行调试,因此,我再次在下面包括了初始错误文本,以便希望Google将这个问题提供给下一个尝试在docker网络上修复php curl的人。
400错误请求错误请求
您的浏览器发送了该服务器无法理解的请求。
此外,尝试使用ErrorDocument处理请求时遇到了400 Bad Request错误。
答案 6 :(得分:0)
对我来说,这个问题是Nginx服务器的上游后端定义包含一个下划线。我很难检测到,因为centos1
和centos
是运行Nginx服务器的远程主机,而最后一个服务器是localhost
httpd服务器。两个远程服务器可以很好地实现负载平衡,但是最后一个则不能,这使得很难弄清楚问题所在是_
下划线。
之前
location / {
proxy_pass http://server_group;
}
upstream server_group {
server centos1;
server centos2;
server localhost:8085;
}
之后
location / {
proxy_pass http://servergroup;
}
upstream servergroup {
server centos1;
server centos2;
server localhost:8085;
}
答案 7 :(得分:-1)
尝试再次检查您的URL。可能缺少斜线。 :-)