Java堂  


Apache中显示PHP源代码的原因

Filed under: DynamicLanguage,Tools,Web&Server — Jet @ 10:53 上午
Tags: ,
原文出处: Apache中显示PHP源代码的原因
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

通常来说如果Apache显示PHP源代码的主要原因是因为没有正确配置好PHP加载模块,最多的错误就是加载的php5_module文件位置错误,通常这种错误会导致Apache无法正常启动;另外最容易犯的就是没有增加php的文件头类型:

  1. AddType application/x-httpd-php .php .php3

但是今天我确遇到一件非常奇怪的事情,上面说的两种情况都不存在但是依然显示php源代码。后来经过长时间的排查终于发现误将放置在 VirtualHost 标签内的

  1. php_flag engine off

放到了外面,这种情况下使得针对某个站点不执行php解析的配置被设置为了全局配置了,估计这种失误比较少见,故写出来共享。

Apache2 服务因 1 (0×1) 服务性错误而停止 的问题

Filed under: OS,Web&Server — Jet @ 9:58 下午
Tags:
原文出处: Apache2 服务因 1 (0×1) 服务性错误而停止 的问题
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

在Windows下面安装Apache2之后,会创建一个Apache2的Windows NT服务。有的时候会发现启动该服务时出现“Apache2 服务因 1 (0×1) 服务性错误而停止”的错误信息。通常情况下遇到该提示信息会造成Apache2无法启动,可以从下面几个方面依次着手处理:

首先Apache开始菜单中的Configure Apache Server目录下“Test Configuration”验证Apache配置文件是否有错误,如果没有错误显示OK,否则显示错误的详细信息。

如果上一步通过的话则可能是因为Apache与操作系统运行环境相冲突,比如端口冲突、ErrorLog 路径错误等等,可以逐一做上传情况的排除。

最后还要说明一点的是,如果是Apache + PHP 或 Apache + Tomcat 等形式的组合的话,除了Apache自身的原因外,还要考虑PHP或Tomcat自身的配置文件是否正确。

参考资料:
在Windows下配置Apache的一点小体会
apache 在windows下无法启动的一个错误

PHP中出现“Unable to load dynamic library”问题的解决方法

Filed under: DynamicLanguage — Jet @ 3:15 上午
Tags: ,
原文出处: PHP中出现“Unable to load dynamic library”问题的解决方法
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

今天把一个客户的服务器上面的PHP4升级到PHP5,根据前几天写的从PHP4升级到PHP5的步骤进行升级之后,总是在错误的日志文件中出现如下提示:

startup: Unable to load dynamic library : PHP5\ext\php_mysql.dll

可是明明将extension_dir设置正确了还是提示无法找到dll文件。后来在CSDN上面找到一篇相关的文章,大体意思是php扩展目录中的模块需要依赖于一些基础的dll文件,如果系统没有找到这些基础的dll文件的话也会是扩展模块产生错误。解决的方法有两种,一种是拷贝这些dll文件到system32目录下面,另外一种方法就是将这些dll的目录设置到环境变量%PATH%中去。PHP5的话只要设置其安装目录就可以了。

但是问题是我按照上面的设置还是出现上面的提示,真的是很奇怪。后来我尝试将libmysql.dll文件拷贝到system32目录下面的时候出现是否覆盖文件的提示,这个时候我才恍然大悟,原来php4中的dll目录下面的文件都被拷贝到system32目录下面而没有被删除,所以php5误将这些文件当作基础文件了。于是使用如下的批处理命令将php4留在系统中的文件一一删除即解决了问题:

  1. @echo off
  2. echo remove php4
  3.  
  4. echo remove php.ini and php4ts.dll
  5. del %SystemRoot%\php.ini
  6. del %SystemRoot%\system32\php4ts.dll
  7.  
  8. echo remove dlls from system32...
  9. del %SystemRoot%\system32\expat.dll
  10. del %SystemRoot%\system32\FDFTK.DLL
  11. del %SystemRoot%\system32\fribidi.dll
  12. del %SystemRoot%\system32\gds32.dll
  13. del %SystemRoot%\system32\iconv.dll
  14. del %SystemRoot%\system32\libeay32.dll
  15. del %SystemRoot%\system32\libmhash.dll
  16. del %SystemRoot%\system32\libmysql.dll
  17. del %SystemRoot%\system32\mSQL.dll
  18. del %SystemRoot%\system32\ntwdblib.dll
  19. del %SystemRoot%\system32\sablot.dll
  20. del %SystemRoot%\system32\ssleay32.dll
  21. del %SystemRoot%\system32\Yaz.dll
  22.  
  23. echo done!

这样说的话php5对于查找这些基础dll文件的顺序应该跟查找php.ini文件的顺序(详细见从PHP4升级到PHP5文章中的常见问题3)相反,或者是无论如何首先查看system32目录下面是否含有这些dll文件,如果存在的话就不在查找了。

增加内容(2007.9.20):
今天将PHP5.2.3升级为5.2.4之后依然出现上述的问题(系统:win2k server),但是5.2.3版本使用的很好。后来根据参考资料所说的两种方法(一种是拷贝这些dll文件到system32目录下面,另外一种方法就是将这些dll的目录设置到环境变量%PATH%中去)中的后者将php5的安装目录添加到环境变量%PATH%中之后重新启动下就OK了。但是同样的版本我在本机(系统: winxp sp2)只要在Apache设置PHPIniDir为php5安装目录就可以了,并没有设置环境变量,不知道什么原因。

参考资料:
如何解决PHP startup: Unable to load dynamic library的错误

Apache和Resin产生大容量日志的解决办法

Filed under: JavaPlateform,Web&Server — Jet @ 8:15 上午
Tags: ,
原文出处: Apache和Resin产生大容量日志的解决办法
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

昨天服务器上网站无故无法访问,重启Apache之后过一段时间又无法访问。后来无意间看到Apache的日志文件(access.log)竟然有7G多,赶紧删除之再重启Apache就OK了。但是总是这样也不是办法,如果时间一长忘记清空日志文件的话又会造成Apache死掉,另外之前Resin也产生过这样的问题。后来综合Google后的信息采用了如下的解决方法:

1. Apache日志
减少日志大小有两种方法,一种是修改日志记录级别,可以将默认的warn级别提升为error级别;

  1. LogLevel error

另外一种方法就是将日志文件按照每天创建一个文件的方式产生,这样就不会将所有的信息写入到一个文件。在Linux下可以将 httpd.conf 中 CustomLog logs/access.log common 修改为:

  1. CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/%Y_%m_%d.access.log 86400 480" common

Windows下没有rotatelogs这个工具,但是可以下载一个cronolog的软件,进入官方下载页面下载Win 32 version (ZIP file) 版本,将压缩包中的cronolog.exe解压缩到apache安装目录的bin目录下面,然后可以将CustomLog logs/access.log common 修改为:

  1. CustomLog "|bin/cronolog.exe logs/access%Y%m%d.log" combined

这样可以达到同样的效果。需要说明的是再重启Apache之后原来的cronolog.exe进程不会自动关闭,这个应该是软件的bug。官方最新的更新日期是2002-01-24,而且最新的1.6.2 版本没有windows版本,所以要耐心等待了。

2. Resin日志
前段时间提到过因为Resin日志巨大的问题而导致出错,过了这几天又发现jvm.log文件达到1G的容量了,照这样下去如果忘记清空日志的话又会导致程序出错。无意间在一篇文章中看到这样一句话:

Resin启动时通过bin目录下的wrapper.pl文件进行控制,我们可以修改这个文件来加一些参数……

后来经过测试这样的启动方式是在Linux系统下,Windows下面修改这个文件是没有作用的。记得以前我在 Resin 3.x 经验总结文章中提到在Windows下设置jvm内存的时候可以使用下面的命令:

  1. httpd.exe -Xmn100M -Xms500M -Xmx500M

是不是上面提到的wrapper.pl文件中的httpd参数都可以这样设置呢?后来在Resin官方的新闻组里面找到了这个配置参数:

You can use -jvm-log logfile as an option to httpd.exe

这样的话就可以设置Resin不产生jvm.log日志文件,因为里面的信息在web程序中通过log4j获得了。

  1. httpd -jvm-log NUL

按照以下步骤重新按照Resin的NT服务:

  1. #1 停止Resin NT服务和Apache
  2. httpd -remove
  3. #2 安装Resin NT服务
  4. httpd -jvm-log NUL -install
  5. #3 重新启动Resin和Apache

参考资料:
解决Apache日志文件ACCESS.LOG日益膨胀的一个办法
jvm.log workarounds
resin的优化

在Apache中设置防盗链资源

Filed under: Web&Server — Jet @ 2:17 下午
原文出处: 在Apache中设置防盗链资源
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

在Apache中设置防盗链很简单,将如下的设置添加到httpd.conf文件中即可:

  1. #
  2. # 防止盗链
  3. #
  4. # 设置防止盗链的地址
  5. SetEnvIfNoCase Referer "^http://www\.yourdomain\.com/" local_ref=1
  6. SetEnvIfNoCase Referer "^http://www\.abcname\.com/" local_ref=1
  7. # 设置类型
  8. <filesmatch></filesmatch>??
  9. Order Allow,Deny
  10. Allow from env=local_ref
  11. Allow from 127.0.0.1

使Apache实现gzip压缩

Filed under: Tools,Web&Server — Jet @ 8:30 下午
原文出处: 使Apache实现gzip压缩
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

众所周知,在HTTP1.1中支持gzip压缩,这样可以缩小页面的容量从而加快页面的显示速度。可以使用这个在线的HTTP压缩测试工具来检测一下你的站点是否开始了gzip压缩。

Apache默认的http.conf配置文件中没有开启gzip压缩,apache1.3.x可以用mod_gzip进行优化网页浏览的速度,在apache2中也尝试用mod_gzip,但是配置后确发现网页不能正确显示(空白页),所以改换为mod_deflate。

下面说一下怎样在Apache2下开启gzip压缩:

  1. # 加载deflate模块
  2. LoadModule deflate_module modules/mod_deflate.so
  3. # 设置压缩频率,取值范围在 1(最低压缩率) 到 9(最高压缩率)之间
  4. # 不建议设置太高,虽然有很高的压缩率,但是占用更多的CPU资源
  5. DeflateCompressionLevel 3
  6. # Compress everything except images
  7. <Location />
  8. # 插入过滤器
  9. SetOutputFilter DEFLATE
  10.  
  11. # Netscape 4.x 有一些问题...
  12. BrowserMatch ^Mozilla/4 gzip-only-text/html
  13. # Netscape 4.06-4.08 有更多的问题
  14. BrowserMatch ^Mozilla/4\.0[678] no-gzip
  15. # MSIE 会伪装成 Netscape ,但是事实上它没有问题
  16. BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
  17. # 不压缩图片
  18. SetEnvIfNoCase Request_URI \\.(?:gif|jpe?g|png)$ no-gzip dont-vary
  19. </Location>

通过上述的设置之后就在Apache中开启的HTTP压缩,试一下页面显示速度是不是提升了很多?

参考资料:
使用mod_deflate提升网页浏览的速度
Apache Module mod_deflate

Apache Tomcat 发布6.0正式版

Filed under: JavaPlateform,Tools,Web&Server — Jet @ 3:03 下午
Tags: ,
原文出处: Apache Tomcat 发布6.0正式版
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

Apache Tomcat 近日发布了6.0正式版,版本号为6.0.10。新的版本开始支持Servlet 2.5 和 JavaServer Pages 2.1,另外增加了一些新的功能,具体看这里的Changelog

Apache Tomcat version 6.0 implements the Servlet 2.5 and JavaServer Pages 2.1 specifications from the Java Community Process, and includes many additional features that make it a useful platform for developing and deploying web applications and web services.

让Apache支持asp的iASP

Filed under: OS,Web&Server — Jet @ 1:39 下午
Tags: ,
原文出处: 让Apache支持asp的iASP
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

可能有的人觉得Apache支持asp没有这个必要,但想想的话有的时候还是需要的,至少比用Apache代理IIS解析ASP程序的效率要高很多。其中iASP就是之中比较出色的一款软件,使用的方法比较简单,大家可以搜下。
好不容易从网上找到了iASP2.1.01的下载,现在发布在网上供大家下载。

名称:iASP2.1.01
大小:10.5 MB
下载地址:本地下载

Apache2安全配置

Filed under: Web&Server — Jet @ 12:28 下午
Tags: ,
原文出处: Apache2安全配置
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

整理了一些Apache2的安全和优化配置

1.修改Apache返回的头部信息

ServerTokens Prod

这样可以在Apache的配置文件里面作如下设置让它返回的关于服务器的信息减少到最少。

2. 设置每个连接的最大请求数

修改MaxKeepAliveRequests,默认的值为100,意思是如果同时请求数达到100就不再响应这个连接的新请求,保证了系统资源不会被某个连接大量占用。但是在实际配置中要求尽量把这个数值调高来获得较高的系统性能。NT环境,只能配置这个参数来提供性能。

3. 设置session的持续时间

KeepAlive on
KeepAliveTimeout 15

  这样就能限制每个session的保持时间是15秒。session的使用可以使得很多请求都可以通过同一个tcp连接来发送,节约了网络资源和系统资源。

4. 对客户端进行域名验证

HostnameLookups on|off|double

如果是使用on,那么只有进行一次反查,如果用double,那么进行反查之后还要进行一次正向解析,只有两次的结果互相符合才行,而off就是不进行域名验证。

如果为了安全,建议使用double;为了加快访问速度,建议使用off。

5. Server-Pool大小设定(针对MPM的)

  1. # prefork MPM
  2. # StartServers:启动时服务器启动的进程数
  3. # MinSpareServers:保有的备用进程的最小数目
  4. # MaxSpareServers:保有的备用进程的最大数目
  5. # MaxClients:服务器允许启动的最大进程数
  6. # MaxRequestsPerChild:一个服务进程允许的最大请求数
  7. <ifmodule></ifmodule>
  8. StartServers 5
  9. MinSpareServers 5
  10. MaxSpareServers 10
  11. MaxClients 150
  12. MaxRequestPerChild 0
  13.  
  14. # worker MPM
  15. # StartServers:服务器启动时的服务进程数目
  16. # MaxClients:允许同时连接的最大用户数目
  17. # MinSpareThreads:保有的最小工作线程数目
  18. # MaxSpareThreads:允许保有的最大工作线程数目
  19. # ThreadsPerChild:每个服务进程中的工作线程常数
  20. # MaxRequestsPerChild:服务进程中允许的最大请求数目
  21. <ifmodule></ifmodule>
  22. StartServers 2
  23. MaxClients 150
  24. MinSpareThreads 25
  25. MaxSpareThreads 75
  26. ThreadsPerChild 25
  27. MaxRequestsPerChild 0
  28.  
  29. # perchild MPM
  30. # NumServers:服务进程数量
  31. # StartThreads:每个服务进程中的起始线程数量
  32. # MinSpareThreads:保有的最小线程数量
  33. # MaxSpareThreads:保有的最大线程数量
  34. # MaxThreadsPerChild:每个服务进程允许的最大线程数
  35. # MaxRequestsPerChild:每个服务进程允许连接的最大数量
  36. <ifmodule></ifmodule>
  37. NumServers 5
  38. StartThreads 5
  39. MinSpareThreads 5
  40. MaxSpareThreads 10
  41. MaxThreadsPerChild 20
  42. MaxRequestsPerChild 0
  43.  
  44. # WinNT MPM
  45. # ThreadsPerChild:服务进程中工作线程常数
  46. # MaxRequestsPerChild:服务进程允许的最大请求数
  47. <ifmodule></ifmodule>
  48. ThreadsPerChild 250
  49. MaxRequestsPerChild 0
  50.  
  51. #每个进程的线程数,最大1920。NT只启动父子两个进程,不能设置启动多个进程
  52. ThreadsPerChild 1900
  53. 每个子进程能够处理的最大请求数
  54. MaxRequestsPerChild 10000

参考资料:
Apache 2.0手册中文版
http://kajaa.bbs.us/ApacheManual/

« 上一页