2008/11/16 22:05
2008/11/16 18:14
凡是做站的几乎都碰到过被人侵入,被加入恶意代码。现在一般要加,就是批量加,一下子网站几百上千,有的上万的文件全部被加了恶意代码,要清除这些东东,还真是麻烦。
上月,有朋友Linux服务器上的站被批量加入恶意代码。linux命令不熟,只好写了一个批量替换的程序,来替换到这些恶意代码。
调试程序中,由于没做好,还把本机和服务器上的程序都清空了一次。。。
后来,终于写完,非常快的批量清除了这些代码。
最近,又碰到一个站需要更改网站标题,其实内容是不用变的,有十几万静态页面,后台全部生成怀疑要一天。想想上次的代码好像就可以用,于是找出来,化了点时间修改了下。本机测试好后,传到服务器上更改。发现不行,原来UTF8的页面,又复制了一份存入UTF8格式。完成,十几万的文件替换也就化了几分钟,比我后台重新生成这些文件不知道要快多少倍!
代码也稍微整理了下,但还是很粗糟,但基本能用。
在google创建了此项目:http://code.google.com/p/batch-replace/,以便存放。
程序下载地址:http://code.google.com/p/batch-replace/downloads/list
上月,有朋友Linux服务器上的站被批量加入恶意代码。linux命令不熟,只好写了一个批量替换的程序,来替换到这些恶意代码。
调试程序中,由于没做好,还把本机和服务器上的程序都清空了一次。。。
后来,终于写完,非常快的批量清除了这些代码。
最近,又碰到一个站需要更改网站标题,其实内容是不用变的,有十几万静态页面,后台全部生成怀疑要一天。想想上次的代码好像就可以用,于是找出来,化了点时间修改了下。本机测试好后,传到服务器上更改。发现不行,原来UTF8的页面,又复制了一份存入UTF8格式。完成,十几万的文件替换也就化了几分钟,比我后台重新生成这些文件不知道要快多少倍!
代码也稍微整理了下,但还是很粗糟,但基本能用。
在google创建了此项目:http://code.google.com/p/batch-replace/,以便存放。
程序下载地址:http://code.google.com/p/batch-replace/downloads/list
2008/11/13 21:31
先说下好处:文本页面(htm/css/js等)启用压缩后,一般可以压缩70%左右。即50K的文件,实际只需传输15K到客户端,由客户端解压显示。
另外,实践证明,启用Gzip压缩后,不会对搜索引擎收录有影响。
在Apache1.3时代,有一个mod_gzip的模块,但Apache2.x系列已经内置了Deflate模块,因此,只需要安装Deflate模块即可。
一般默认没有装Deflate,最直接的方法就是重装Apache,在原来的配置文件后加上 --enable-deflate --enable-headers 。
如果不想重装,就单独编译,mod_deflate.c在源文件目录的modules/filters下,mod_hearders.c则在modules/metadata目录下。如果用apxs -i -a -c的方法不行,请参考下面的办法,以安装mod_headers为例。
cd modules/metadata/
apxs -i -a -c mod_headers.c
参照http://www.9enjoy.com/post/215/的说明,
gcc -shared -o mod_headers.so mod_headers.o
cp mod_headers.so /usr/local/apache2.2.0/modules
/usr/local/apache2.2.0/bin/apxs -i -a -c mod_headers.c
安装成功了。
另网上有一种方法,我还没试过:
编辑apache2安装目录/bin/apr-config(我的机子看了下应该是apr-1-config)文件修改其中的 LDFLAGS 值为 "-lz",然后再重新编译。
装完后,其在conf/httpd.conf中加了如下两句:
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
其实安装deflate时mod_headers并不是必须,那为什么要安装呢?主要是其官方配置文件中使用了header模块来确保不会发送错误的内容。
另有一种简单的设置:
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php
AddOutputFilter DEFLATE css js
很好理解,可以放在Directory,Virtualhost,Location任意地方。
怎么看是否生效了呢?来记录下日志:
大部分CSS,htm页面都可以压缩到30%,即文章开头我提到的能压缩70%。
参考文档:
Apache模块 mod_deflate
http://www.itlearner.com/code/apache2.2/mod/mod_deflate.html
Apache deflate模块配置说明
http://www.itlearner.com/article/2007/3819.shtml
横向阅读:
mod_deflate/ob_gzhandler/zlib 横向测试
另外,实践证明,启用Gzip压缩后,不会对搜索引擎收录有影响。
在Apache1.3时代,有一个mod_gzip的模块,但Apache2.x系列已经内置了Deflate模块,因此,只需要安装Deflate模块即可。
一般默认没有装Deflate,最直接的方法就是重装Apache,在原来的配置文件后加上 --enable-deflate --enable-headers 。
如果不想重装,就单独编译,mod_deflate.c在源文件目录的modules/filters下,mod_hearders.c则在modules/metadata目录下。如果用apxs -i -a -c的方法不行,请参考下面的办法,以安装mod_headers为例。
cd modules/metadata/
apxs -i -a -c mod_headers.c
Warning! dlname not found in /usr/local/apache2.2.0/modules/mod_headers.la.
Assuming installing a .so rather than a libtool archive.
chmod 755 /usr/local/apache2.2.0/modules/mod_headers.so
chmod: 无法访问‘/usr/local/apache2.2.0/modules/mod_headers.so’: 没有那个文件或目录
apxs:Error: Command failed with rc=65536
Assuming installing a .so rather than a libtool archive.
chmod 755 /usr/local/apache2.2.0/modules/mod_headers.so
chmod: 无法访问‘/usr/local/apache2.2.0/modules/mod_headers.so’: 没有那个文件或目录
apxs:Error: Command failed with rc=65536
参照http://www.9enjoy.com/post/215/的说明,
gcc -shared -o mod_headers.so mod_headers.o
cp mod_headers.so /usr/local/apache2.2.0/modules
/usr/local/apache2.2.0/bin/apxs -i -a -c mod_headers.c
Warning! dlname not found in /usr/local/apache2.2.0/modules/mod_headers.la.
Assuming installing a .so rather than a libtool archive.
chmod 755 /usr/local/apache2.2.0/modules/mod_headers.so
[activating module `headers' in /usr/local/apache2.2.0/conf/httpd.conf]
Assuming installing a .so rather than a libtool archive.
chmod 755 /usr/local/apache2.2.0/modules/mod_headers.so
[activating module `headers' in /usr/local/apache2.2.0/conf/httpd.conf]
安装成功了。
另网上有一种方法,我还没试过:
编辑apache2安装目录/bin/apr-config(我的机子看了下应该是apr-1-config)文件修改其中的 LDFLAGS 值为 "-lz",然后再重新编译。
装完后,其在conf/httpd.conf中加了如下两句:
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
其实安装deflate时mod_headers并不是必须,那为什么要安装呢?主要是其官方配置文件中使用了header模块来确保不会发送错误的内容。
<Location />
# 插入过滤器
SetOutputFilter DEFLATE
# Netscape 4.x 有一些问题...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 有更多的问题
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE 会伪装成 Netscape ,但是事实上它没有问题
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# 不压缩图片
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
# 确保代理不会发送错误的内容
Header append Vary User-Agent env=!dont-vary
</Location>
# 插入过滤器
SetOutputFilter DEFLATE
# Netscape 4.x 有一些问题...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 有更多的问题
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE 会伪装成 Netscape ,但是事实上它没有问题
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# 不压缩图片
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
# 确保代理不会发送错误的内容
Header append Vary User-Agent env=!dont-vary
</Location>
另有一种简单的设置:
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php
AddOutputFilter DEFLATE css js
很好理解,可以放在Directory,Virtualhost,Location任意地方。
怎么看是否生效了呢?来记录下日志:
#声明输入流的byte数量
DeflateFilterNote Input instream
#声明输出流的byte数量
DeflateFilterNote Output outstream
#声明压缩的百分比
DeflateFilterNote Ratio ratio
#声明日志类型
LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
CustomLog logs/deflate_log deflate
DeflateFilterNote Input instream
#声明输出流的byte数量
DeflateFilterNote Output outstream
#声明压缩的百分比
DeflateFilterNote Ratio ratio
#声明日志类型
LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
CustomLog logs/deflate_log deflate
大部分CSS,htm页面都可以压缩到30%,即文章开头我提到的能压缩70%。
参考文档:
Apache模块 mod_deflate
http://www.itlearner.com/code/apache2.2/mod/mod_deflate.html
Apache deflate模块配置说明
http://www.itlearner.com/article/2007/3819.shtml
横向阅读:
mod_deflate/ob_gzhandler/zlib 横向测试
2008/11/10 20:01
一般Linux系统会自带设置alias cp='cp -i',搞的覆盖时每次都会提示,加-f都没用。
这里有两种解决方法:
1.unalias cp
取消cp的alias。
也可以执行:alias cp=cp,来重置cp。
2.执行命令时cp前加\。
即cp aaa /opt/aaa
输入:\cp aaa /opt/aaa
\的意思就是该命令不使用alias。
2008/11/09 16:37
Apache默认的日志记录方式:
LogFormat "%h %l %u %t \"%r\" %>s %b" common
记录到的如下:
61.135.168.14 - - [22/Oct/2008:22:13:11 +0800] "GET / HTTP/1.1" 200 8427
Apache还有个较复杂的combined的日志记录方式,如下:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
其记录到的类似:
61.135.168.14 - - [22/Oct/2008:22:13:31 +0800] "GET / HTTP/1.1" 200 8427 "-" "Baiduspider+(+http://www.baidu.com/search/spider.htm)"
为了能更方便的了解Baidu蜘蛛来访的情况,索性单独写了个只记录Baidu蜘蛛来访记录。common中的%l和%u好像都记录不到东西的,所以也去掉。
SetEnvIfNoCase User-Agent Baiduspider baidu_robot
LogFormat "%h %t \"%r\" %>s %b" robot
CustomLog "|/usr/local/apache2.2.0/bin/rotatelogs /usr/local/apache2.2.0/logs/baidu_%Y%m%d.txt 86400 480" robot env=baidu_robot
这样在logs目录下,就会每天产生baidu_年月日.txt的日志了,每条的记录和下面的类似:
61.135.168.14 [22/Oct/2008:22:21:26 +0800] "GET / HTTP/1.1" 200 8427
LogFormat "%h %l %u %t \"%r\" %>s %b" common
记录到的如下:
61.135.168.14 - - [22/Oct/2008:22:13:11 +0800] "GET / HTTP/1.1" 200 8427
Apache还有个较复杂的combined的日志记录方式,如下:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
其记录到的类似:
61.135.168.14 - - [22/Oct/2008:22:13:31 +0800] "GET / HTTP/1.1" 200 8427 "-" "Baiduspider+(+http://www.baidu.com/search/spider.htm)"
为了能更方便的了解Baidu蜘蛛来访的情况,索性单独写了个只记录Baidu蜘蛛来访记录。common中的%l和%u好像都记录不到东西的,所以也去掉。
SetEnvIfNoCase User-Agent Baiduspider baidu_robot
LogFormat "%h %t \"%r\" %>s %b" robot
CustomLog "|/usr/local/apache2.2.0/bin/rotatelogs /usr/local/apache2.2.0/logs/baidu_%Y%m%d.txt 86400 480" robot env=baidu_robot
这样在logs目录下,就会每天产生baidu_年月日.txt的日志了,每条的记录和下面的类似:
61.135.168.14 [22/Oct/2008:22:21:26 +0800] "GET / HTTP/1.1" 200 8427








