2010-10-27 118 views
4

我已经为billing.example.com设置了两个本地虚拟主机(http和自签名https)并在firefox中用萤火虫尝试它们。 Http虚拟主机的唯一目的是将所有请求重定向到https。Apache SSL启用虚拟主机返回随机400错误请求

几乎每次我从https请求页面,一个或两个文件与相关的资源(图像,JS,CSS等),有时PHP页面本身返回400错误的请求在萤火虫窗口,有时一个或两个文件显示为已加载很长时间。 当我点击萤火虫中的问题链接时,文件会按照它应该加载的方式加载。 此外,差错请求或未加载的文件几乎每次我加载页面时都会发生变化。

任何想法?

服务器:Ubuntu的10.04,阿帕奇/ 2.2.14的mod_ssl与

虚拟主机:

Listen 80 
<VirtualHost *:80> 
    ServerName billing.example.com 
    UseCanonicalName On 
    DocumentRoot /code/site/billing 
    ... 
    RewriteEngine On 
    RewriteRule ^/(.*)$ https://billing.example.com/$1 
</VirtualHost> 

Listen 443 
<VirtualHost *:443> 
    ServerName billing.example.com 
    UseCanonicalName On 
    DocumentRoot /code/site/billing 
    ... 
    SSLEngine On 
    SSLCertificateFile /code/site/ssl/example.crt 
    SSLCertificateKeyFile /code/site/ssl/example.key 
</VirtualHost> 

其余来自Ubuntu的Apache2默认设置。

+1

如果你直接访问'https:// billing.example.com /',你可能会更好的在serverfault.com上询问这个问题 – 2010-10-27 17:18:02

+0

它可以工作吗?我不确定我是否会将整个URI空间完全重写为HTTP到HTTPS:它会使通过HTTP进行的所有请求都像通过HTTPS一样工作,并且人们倾向于关闭通知,告诉他们要去从HTTPS到HTTP,所以他们不会注意到(不安全的)重定向。如果使用HTTP(或至少将所有内容重定向到“root”:https:// billing.example.com /'),最好使它失败。 – Bruno 2010-10-27 17:23:50

+0

serverfault上的类似问题。没有解决方案,虽然:(http:// serverfault。com/questions/226040 /间歇性400-bad-request-header-field-is-missing-with-apache-and-ssl – theon 2012-08-21 16:29:35

回答

0

对于ssl部分,您可能需要转向UseCanonicalName Off对于虚拟主机,您可能使用的是与主服务器不同的域,这可能会导致您在虚拟主机之外查找文件。

为了完整性在端口80上,我将[R,L]添加到重定向中。

RewriteEngine On 
RewriteRule ^/(.*) http://billing.example.com/$1 [L,R] 
0
我是有这个问题与Apache 2.2.9升级到Apache 2.2.22

解决了这个问题对我来说。

我会在一些页面请求中随机获得400个响应代码。有时候会有图片,有时候是AJAX请求有时候,页面本身会随着这条消息返回400。

坏请求 您的浏览器发送该服务器无法理解的请求。 请求标题字段缺少':'分隔符。 活

我发现以下地毯报告似乎有关。该错误是固定在阿帕奇2.2.15:https://bugzilla.redhat.com/show_bug.cgi?id=652335

我认为使用HTTPS时,这个错误是很多随机误差的原因: 您的浏览器发送的请求,该服务器无法理解 请求头字段缺少':'分隔符。

所以想到我会尝试更新到最新的Apache与最新的mod_ssl - 这似乎工作。