Apache 截断一些静态内容

Apache 截断一些静态内容

我正在尝试在运行 Apache 2.2.17 的 Windows 2008 Server 上将 MoinMoin 设置为办公 wiki。最初我以为一切都运行正常,只是出于某种原因图像无法正常显示。结果发现,我所有静态提供的内容都被截断了(最多 800 个字符),我正在尝试找出原因。

错误日志未显示任何内容,访问日志显示文件传送为 200 OK 或 304 Unchanged。

所有动态内容似乎都显示正常且未被截断,并且我在同一台服务器上安装了 Django,它也正常工作。

是什么导致了这种奇怪的行为?一个奇怪的数学问题,我认为这指向一个编码问题 - 对于所有文本文件,缺失的字符数等于文件截断版本中的换行符数。更改文件本身的编码似乎没有帮助,但如果我将所有内容放在一行上,它就会正常显示。虽然这似乎可以解决这个问题,但更改所有文件会有点麻烦,我不知道如何对图像进行更改。

附录:这是我使用 Wireshark 的跟踪 TCP 流功能在客户端上看到的内容。我注意到的主要一点是动态内容 (/bgcwiki) 有许多换行符,后面跟着 0,而静态内容并不总是有换行符。特别是,.png 在其内容结尾和下一个 GET 请求之间没有任何空格。

GET /bgcwiki HTTP/1.1
Host: msdc2
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: sessionid=6e2eaf00d5f8f22b576ed232d4f2fafb; csrftoken=8eb6a8ed71814c2c037532ed51cc2f81; MOIN_SESSION_80_ROOT_bgcwiki=95631c8ede11697138a37901afe53fc38b412812

HTTP/1.1 404 NOT FOUND
Date: Thu, 12 Jan 2012 15:04:39 GMT
Server: Apache
Vary: Cookie,User-Agent,Accept-Language
Set-Cookie: MOIN_SESSION_80_ROOT_bgcwiki=95631c8ede11697138a37901afe53fc38b412812; expires=Sun, 09-Jan-2022 15:04:00 GMT; Max-Age=315360000; Path=/
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8

1386
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<meta name="edit_on_doubleclick" content="/bgcwiki">
<meta name="robots" content="index,nofollow">

<title>bgcwiki - Boys &amp; Girls Club of Thunder Bay</title>
<script type="text/javascript" src="/bgcwiki/moin_static193/common/js/common.js"></script>

<!-- snip -->

14
</body>
</html>


0

GET /bgcwiki/moin_static193/common/js/common.js HTTP/1.1
Host: msdc2
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7
Accept: */*
Referer: http://msdc2/bgcwiki
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: sessionid=6e2eaf00d5f8f22b576ed232d4f2fafb; csrftoken=8eb6a8ed71814c2c037532ed51cc2f81; MOIN_SESSION_80_ROOT_bgcwiki=95631c8ede11697138a37901afe53fc38b412812

HTTP/1.1 200 OK
Date: Thu, 12 Jan 2012 15:04:40 GMT
Server: Apache
Etag: "wzsdm-1326330976-29032-305726357"
Cache-Control: max-age=43200, public
Expires: Fri, 13 Jan 2012 03:04:40 GMT
Content-Length: 29032
Last-Modified: Wed, 11 Jan 2012 20:16:16 GMT
Keep-Alive: timeout=5, max=98
Connection: Keep-Alive
Content-Type: application/x-javascript

//
// MoinMoin commonly used JavaScript functions
//

/* snip */

runASAP(runScrollTextareaInitOnce);
// ensure init will be run by obsolete browsers
addLoadEvent(runScrollTextareaInitOnce);
GET /bgcwiki/moin_static193/smallbgclogo.png HTTP/1.1
Host: msdc2
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7
Accept: */*
Referer: http://msdc2/bgcwiki
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: sessionid=6e2eaf00d5f8f22b576ed232d4f2fafb; csrftoken=8eb6a8ed71814c2c037532ed51cc2f81; MOIN_SESSION_80_ROOT_bgcwiki=95631c8ede11697138a37901afe53fc38b412812

HTTP/1.1 200 OK
Date: Thu, 12 Jan 2012 15:04:40 GMT
Server: Apache
Etag: "wzsdm-1326230173-7814-930940522"
Cache-Control: max-age=43200, public
Expires: Fri, 13 Jan 2012 03:04:40 GMT
Content-Length: 7814
Last-Modified: Tue, 10 Jan 2012 16:16:13 GMT
Keep-Alive: timeout=5, max=97
Connection: Keep-Alive
Content-Type: image/png

.PNG

...
IHDR.......Z.............sRGB.........bKGD..............pHYs.................tIME...
..

/* snip */

...(Fg.1......(F1.Q.b....(F1.Q.b.......P.Yg[XB.....IEND.B`.GET /bgcwiki/moin_static193/modern/css/print.css HTTP/1.1
Host: msdc2
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7
Accept: text/css,*/*;q=0.1
Referer: http://msdc2/bgcwiki
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: sessionid=6e2eaf00d5f8f22b576ed232d4f2fafb; csrftoken=8eb6a8ed71814c2c037532ed51cc2f81; MOIN_SESSION_80_ROOT_bgcwiki=95631c8ede11697138a37901afe53fc38b412812

HTTP/1.1 200 OK
Date: Thu, 12 Jan 2012 15:04:41 GMT
Server: Apache
Etag: "wzsdm-1277603206-811-309986213"
Cache-Control: max-age=43200, public
Expires: Fri, 13 Jan 2012 03:04:41 GMT
Content-Length: 811
Last-Modified: Sat, 26 Jun 2010 21:46:46 GMT
Keep-Alive: timeout=5, max=96
Connection: Keep-Alive
Content-Type: text/css

/*  print.css - MoinMoin Default Styles
Copyright (c) 2001, 2002, 2003 by Juergen Hermann
*/

/* snip */

#header, #sidebar, #footer, #timings, #credits, #interwiki, #pagelocation {
    display: none;
}

MoinMoin 的 Apache 配置文件(非常标准?):

Alias /moin_static160/ "C:/Djangostack/python/Lib/site-packages/MoinMoin/web/static/htdocs/"
ScriptAlias /bgcwiki "C:/Djangostack/Moin/bgcwiki/moin.cgi"

<Directory 'C:/Djangostack/Moin/bgcwiki/' >
  Order allow,deny
  Allow from all
</Directory>
<Directory 'C:/Djangostack/python/Lib/site-packages/MoinMoin/web/static/htdocs/' >
  Order allow,deny
  Allow from all
</Directory>

答案1

如果您发现静态文件被截断,请尝试关闭 EnableSendfile 和 EnableMMAP。

答案2

这确实是一个编码问题,也是 MoinMoin 而不是 Apache 的配置问题。

问题在于配置文件,而不是任何静态文件本身。我怀疑由于在 Windows 机器上编辑最初基于 Unix 的文件,整个文件的编码不一致。我的编辑器甚至不会说出编码是什么!

在我将整个配置文件转换为 Unicode(或者,实际上转换为任何一致的格式)后,一切都开始正常工作。不过,我有点不明白这如何导致了这个特定的问题。

相关内容