Apache ssl-enabled vhost返回随机400错误请求

问题描述 投票:4回答:2

我为billing.example.com设置了两个本地虚拟主机(http和自签名https),并在firefox中使用firebug进行尝试。 Http vhost唯一目的是将所有请求重定向到https。

几乎每次我从https请求页面时,一个或两个带有相关资源的文件(图像,js,css等等),有时php页面本身在firebug窗口中返回400个错误请求,有时一个或两个文件显示为加载很长时间。当我点击firebug中的问题链接时,文件会按原样加载。此外,糟糕的请求或未加载的文件几乎每次我加载页面时都会更改。

有任何想法吗?

服务器:Ubuntu 10.04,带有mod_ssl的Apache / 2.2.14

虚拟主机:

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>

Rest是ubuntu apache2的默认设置。

ssl https apache2 vhosts mod-ssl
2个回答
0
投票

我有apache 2.2.9这个问题,升级到apache 2.2.22解决了我的问题。

我会在一些页面请求上获得随机的400响应代码。有时是图像,有时是AJAX请求。有时,页面本身会随着此消息返回400。

错误请求您的浏览器发送了此服务器无法理解的请求。请求标头字段缺少':'分隔符。生活

我发现以下地毯报告似乎有关。该漏洞修复了apache 2.2.15:https://bugzilla.redhat.com/show_bug.cgi?id=652335

我认为这个错误是导致使用https时出现大量随机错误的原因:您的浏览器发送了一个请求,说明此服务器无法理解请求标头字段缺少':'分隔符。

所以我想我会尝试使用最新的mod_ssl更新到最新的apache - 这似乎有效。


0
投票

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

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

RewriteEngine  On
RewriteRule    ^/(.*) http://billing.example.com/$1 [L,R]
© www.soinside.com 2019 - 2024. All rights reserved.