按 ‘ Apache ’ 标签归档

专业服务器比笔记本还慢?

新到刀片服务器一台,郑重地装到了机房里,总算在公司有点产业了。

周六就放大长假,所以周四忙到半夜,周五早晨接着来,先把组里的文档管理系统从一个破破的笔记本转移到刀片上去。转移完毕,一刷浏览器,每个页面都要延迟两秒才能打开,而过去在笔记本上,文档系统的反应都是迅如疾风啊!专业大刀片和专业机房,怎么比放在邋里邋遢的办公桌上的笔记本还慢啊!!! 😕

文档管理系统是MediaWiki家的,在Apache平台上,使用PHP存取MySQL数据库。

是Apache慢么?由这个Apache管理的其它独立网页都是打开得飞快。
是PHP慢么?把那个独立网页从HTML改成PHP程序输出,还是刷屏快到连闪烁都看不出。
是MySQL慢么?从一个MySQL客户端单独访问,依然是迅雷不及掩耳盗铃。
合在一起之后的MediaWiki,却又是龟速了。

用这台机器的浏览器访问自己,也是同样的现象,这说明网络和防火墙设置不是原因。再说,如果真是网络问题,那么独立网页和MediaWiki就只是“慢”和“更慢”的区别。

后来不知怎的,就留意到MediaWiki本地配置文件LocalSettings.php里的

$wgDBServer = "localhost";

心想,如果把localhost改成绝对的IP地址——127.0.0.1——呢?这么改了一下,MediaWiki就立马变身神行太保了。

难道系统认出localhost就是127.0.0.1,还需要等两秒种?检查一下\windows\system32\drivers\etc\hosts,居然

# 127.0.0.1  localhost

真的被注释掉了!注释的前头还加了一行注释:“兹事体大,着DNS同学办理。”难怪,时间都被DNS耗费掉了! 😯

速度问题解决之后,忽然又想起一个推论:如果MySQL和Apache分装在这台刀片的两个VM上,那么,MySQL服务器的IP地址就会生写在Apache那边(俺们的系统还没复杂到要用DNS来处理),然后,当Apache来访问MySQL时,就会出现“两台机器互动”比“一台机器自己动”还快的诡异现象。 😉

http_response_code或Status code的重置问题

在写一个产生短链接的程序。短链接本身对应的文件当然不是直接存在域名根目录下的,而是通过.htaccess的404 ErrorHandler转交给检索程序,由检索程序把真正的文件输出出来。这里需要把404号Status code覆盖掉。

在家里机器上写的PHP代码是:

header("Content-type: $mime", FALSE, 200);

其中200是代表OK的状态码。

这句话在家里的机器上工作得挺好,但上传到公共网站上之后,程序工作方式就不是那么回事了。404号状态码并未被覆盖掉,如果输出文件是图像,还能勉强显示。但如果是个下载附件,就看到了404号“网页不存在”的错误信息。

经过反复调试,找到解决方法如下:

header("Status: 200 OK");    // Reset the status to OK (200).
header("Content-type: $mime", FALSE, 200);

这两句话缺一不可,如果少第一句,则公共网站上的程序不干活。如果少第一句,则家里的程序不干活。