Apache 2.0性能优化

[不指定 2005/07/28 23:04 | by ipaddr ]
 谈到Apache,大多数系统管理员对其稳定版1.3印象颇深。虽然Apache 2.0的系列开发版早已由Alpha、Beta发展到现在的GA(General Availability)版,但是一些人潜意识里还认为开发版并非可用于生产环境的稳定版本。尤其是1.3版的API与2.0版不兼容,使得大量模块必须要重写才能在2.0版上使用。Apache 1.3和2.0之间的内部变化的确较大,用Apache创始人Brian Behlendorf自己的话来说:“这个版本包括了数百个新的特性,所以这个产品应该具有3.1或8i这样的产品编号,而不是2.0。”Apache 2.0中加入了很多的核心改进和新功能,如Unix线程、多协议支持、新的构建系统、对非Unix平台的更佳支持、IPv6支持、新的Apache API、过滤器、多语言错误响应、原生的Windows NT Unicode支持、更简单化的配置,以及升级的正则表达式库等。它当然还包括对许多模块的重要改进,同时也加入了一些新的模块。

  为了使Apache更加平滑地从1.3版升级到2.0版,Apache开发团队做了很多工作。目前很多重要的模块已经可以很好地支持2.0版,如PHP、FastCGI、Mod_perl、Mod_python等。在httpd.conf的指令配置语法上,目前的2.0版(2.0.45)与1.3版的兼容性已做得相当好。比如,以前的2.0版如果要使用PHP,一般用过滤器实现;现在的PHP官方文档中已经使用1.3版中的LoadModule语句做为加载PHP的推荐方式。只要略微了解一下Apache 2.0的新特性,从1.3版升级到2.0版将是一件非常容易的事情。使用Apache 2.0是大势所趋,因为Apache的开发团队已经把开发重心转移到2.0版上。1.3版自2002年10月发布了1.3.27后一直没有新版本推出,而2.0版在与1.3.27同时发布2.0.43后,在今年1月发布了2.0.44,并于今年3月末发布了2.0.45,并包含了很多改进和修正。

  MPM的引入带来性能改善

  Apache 2.0在性能上的改善最吸引人。在支持POSIX线程的Unix系统上,Apache可以通过不同的MPM运行在一种多进程与多线程相混合的模式下,增强部分配置的可扩充性能。相比于Apache 1.3,2.0版本做了大量的优化来提升处理能力和可伸缩性,并且大多数改进在默认状态下即可生效。但是在编译和运行时刻,2.0也有许多可以显著提高性能的选择。本文不想叙述那些以功能换取速度的指令,如HostnameLookups等,而只是说明在2.0中影响性能的最核心特性:MPM(Multi-Processing Modules,多道处理模块)的基本工作原理和配置指令。

  毫不夸张地说,MPM的引入是Apache 2.0最重要的变化。大家知道,Apache是基于模块化的设计,而Apache 2.0更扩展了模块化设计到Web服务器的最基本功能。服务器装载了一种多道处理模块,负责绑定本机网络端口、接受请求,并调度子进程来处理请求。扩展模块化设计有两个重要好处:

  ◆ Apache可以更简洁、有效地支持多种操作系统;

  ◆ 服务器可以按站点的特殊需要进行自定制。

  在用户级,MPM看起来和其它Apache模块非常类似。主要区别是在任意时刻只能有一种MPM被装载到服务器中。

  指定MPM的方法

  下面以Red Hat Linux 9为平台,说明在Apache 2.0中如何指定MPM (Apache采用2.0.45)。先解压缩源代码包httpd-2.0.45.tar.gz,生成httpd-2.0.45目录(Apache 1.3源代码包的命名规则是apache_1.3.NN.tar.gz,而2.0版则是httpd-2.0.NN.tar.gz,其中NN是次版本号)。

  进入httpd-2.0.45目录,运行以下代码:

$ ./configure --help|grep mpm



  显示如下:

--with-mpm=MPM
Choose the process model for Apache to use.
MPM={beos|worker|prefork|mpmt_os2| perchild|leader|threadpool}



  上述操作用来选择要使用的进程模型,即哪种MPM模块。Beos、mpmt_os2分别是BeOS和OS/2上缺省的MPM,perchild主要设计目的是以不同的用户和组的身份来运行不同的子进程。这在运行多个需要CGI的虚拟主机时特别有用,会比1.3版中的SuExec机制做得更好。leader和threadpool都是基于worker的变体,还处于实验性阶段,某些情况下并不会按照预期设想的那样工作,所以Apache官方也并不推荐使用。因此,我们主要阐述prefork和worker这两种和性能关系最大的产品级MPM ( 有关其它的MPM详细说明,请参见Apache官方文档:http://httpd.apache.org/docs-2.0/mod/)。

  prefork的工作原理及配置

  如果不用“--with-mpm”显式指定某种MPM,prefork就是Unix平台上缺省的MPM。它所采用的预派生子进程方式也是Apache 1.3中采用的模式。prefork本身并没有使用到线程,2.0版使用它是为了与1.3版保持兼容性;另一方面,prefork用单独的子进程来处理不同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一。

  若使用prefork,在make编译和make install安装后,使用“httpd -l”来确定当前使用的MPM,应该会看到prefork.c(如果看到worker.c说明使用的是worker MPM,依此类推)。再查看缺省生成的httpd.conf配置文件,里面包含如下配置段:

<IfModule prefork.c>
StartServers          5
MinSpareServers      5
MaxSpareServers     10
MaxClients         150
MaxRequestsPerChild  0
</IfModule>



  prefork的工作原理是,控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这就是预派生(prefork)的由来。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。

  MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。

  MaxRequestsPerChild设置的是每个子进程可处理的请求数。每个子进程在处理了“MaxRequestsPerChild”个请求后将自动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求,但如果设成非零值也有两点重要的好处:

  ◆ 可防止意外的内存泄漏;

  ◆ 在服务器负载下降的时侯会自动减少子进程数。

  因此,可根据服务器的负载来调整这个值。笔者认为10000左右比较合适。

  MaxClients是这些指令中最为重要的一个,设定的是Apache可以同时处理的请求,是对Apache性能影响最大的参数。其缺省值150是远远不够的,如果请求总数已达到这个值(可通过ps -ef|grep http|wc -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。系统管理员可以根据硬件配置和负载情况来动态调整这个值。虽然理论上这个值越大,可以处理的请求就越多,但Apache默认的限制不能大于256。如果把这个值设为大于256,那么Apache将无法起动。事实上,256对于负载稍重的站点也是不够的。在Apache 1.3中,这是个硬限制。如果要加大这个值,必须在“configure”前手工修改的源代码树下的src/include/httpd.h中查找256,就会发现“#define HARD_SERVER_LIMIT 256”这行。把256改为要增大的值(如4000),然后重新编译Apache即可。在Apache 2.0中新加入了ServerLimit指令,使得无须重编译Apache就可以加大MaxClients。下面是笔者的prefork配置段:

<IfModule prefork.c>
StartServers         10
MinSpareServers      10
MaxSpareServers     15
ServerLimit       2000
MaxClients         1000
MaxRequestsPerChild  10000
</IfModule>



  上述配置中,ServerLimit的最大值是20000,对于大多数站点已经足够。如果一定要再加大这个数值,对位于源代码树下server/mpm/prefork/prefork.c中以下两行做相应修改即可:

#define DEFAULT_SERVER_LIMIT 256
#define MAX_SERVER_LIMIT 20000



  worker的工作原理及配置

  相对于prefork,worker是2.0 版中全新的支持多线程和多进程混合模型的MPM。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是,worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。这种MPM的工作方式将是Apache 2.0的发展趋势。

  在configure -with-mpm=worker后,进行make编译、make install安装。在缺省生成的httpd.conf中有以下配置段:

<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>



  worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。

  MinSpareThreads和MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节。

  ThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用ThreadLimit指令,它的最大缺省值是20000。上述两个值位于源码树server/mpm/worker/worker.c中的以下两行:

#define DEFAULT_THREAD_LIMIT 64
#define MAX_THREAD_LIMIT 20000



  这两行对应着ThreadsPerChild和ThreadLimit的限制数。最好在configure之前就把64改成所希望的值。注意,不要把这两个值设得太高,超过系统的处理能力,从而因Apache不起动使系统很不稳定。

  Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是20000)。这两个值位于源码树server/mpm/worker/worker.c中的以下两行:

#define DEFAULT_SERVER_LIMIT 16
#define MAX_SERVER_LIMIT 20000



  需要注意的是,如果显式声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则Apache将会自动调节到一个相应值(可能是个非期望值)。下面是笔者的worker配置段:

<IfModule worker.c>
StartServers         3
MaxClients         2000
ServerLimit        25
MinSpareThreads     50
MaxSpareThreads     200
ThreadLimit        200
ThreadsPerChild     100
MaxRequestsPerChild  0
</IfModule>



  通过上面的叙述,可以了解到Apache 2.0中prefork和worker这两个重要MPM的工作原理,并可根据实际情况来配置Apache相关的核心参数,以获得最大的性能和稳定性。

MPM优化你的Apache

[不指定 2005/07/22 23:06 | by ipaddr ]
作者:squall
E-mail:squall@grlinux.net

前言:
最近朋友的服务器访问量过大,导致页面打开迟缓,下载速度也降到了30-40KB/秒,由于经费和环境问题,集群方案没有得以应用。考虑了如上的因素,我决定通过对Apache增加模块来进行优化,下面是我的实施过程,如果你对其感兴趣,不妨一看。

正文:
Apache 2.0在性能上的改善最吸引人。在支持POSIX线程的Unix系统上,Apache可以通过不同的MPM运行在一种多进程与多线程相混合的模式下,增强部分配置的可扩充性能。相比于Apache 1.3,2.0版本做了大量的优化来提升处理能力和可伸缩性,并且大多数改进在默认状态下即可生效。但是在编译和运行时刻,2.0也有许多可以显著提高性能的选择。

MPM(Multi -Processing Modules,多道处理模块)是Apache2.0中影响性能的最核心特性。

毫不夸张地说,MPM的引入是Apache 2.0最重要的变化。大家知道,Apache是基于模块化的设计,而Apache 2.0更扩展了模块化设计到Web服务器的最基本功能。服务器装载了一种多道处理模块,负责绑定本机网络端口、接受请求,并调度子进程来处理请求。扩展模块化设计有两个重要好处:

  ◆ Apache可以更简洁、有效地支持多种操作系统;

  ◆ 服务器可以按站点的特殊需要进行自定制。

在用户级,MPM看起来和其它Apache模块非常类似。主要区别是在任意时刻只能有一种MPM被装载到服务器中。

下面以Linux RedHat AS3为平台,演示一下在Apache 2.0中如何指定MPM。

# wget http://archive.apache.org/dist/httpd/httpd-2.0.52.tar.bz2
# tar jxvf httpd-2.0.52.tar.bz2
# cd httpd-2.0.52
# ./configure --help|grep mpm

显示如下: --with-mpm=MPM Choose the process model for Apache to use. MPM={beos|worker|prefork|mpmt_os2| perchild|leader|threadpool}

上述操作用来选择要使用的进程模型,即哪种MPM模块。Beos、mpmt_os2分别是BeOS和OS/2上缺省的MPM, perchild主要设计目的是以不同的用户和组的身份来运行不同的子进程。这在运行多个需要CGI的虚拟主机时特别有用,会比1.3版中的SuExec 机制做得更好。leader和threadpool都是基于worker的变体,还处于实验性阶段,某些情况下并不会按照预期设想的那样工作,所以 Apache官方也并不推荐使用。因此,我们主要阐述prefork和worker这两种和性能关系最大的产品级MPM。

prefork的工作原理
  如果不用“--with-mpm”显式指定某种MPM,prefork就是Unix平台上缺省的MPM。它所采用的预派生子进程方式也是 Apache 1.3中采用的模式。prefork本身并没有使用到线程,2.0版使用它是为了与1.3版保持兼容性;另一方面,prefork用单独的子进程来处理不同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一。
  prefork的工作原理是,控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足 MinSpareServers设置的值为止。这就是预派生(prefork)的由来。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。

worker的工作原理
  相对于prefork,worker是2.0 版中全新的支持多线程和多进程混合模型的MPM。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是, worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。这种MPM的工作方式将是Apache 2.0的发展趋势。
  worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild 线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。

# 下面我以worker模式进行编译安装
# ./configure --prefix=/usr/local/apache --with-mpm=worker --enable-so(让它支持DSO功能,这样以后可以动态加载模块) --enable-rewrite
# make
# make install
# cd /usr/local/apache/conf
# vi httpd.conf
<IfModule worker.c> StartServers 2 MaxClients 150 ServerLimit 25 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 25 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>

Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是20000)

需要注意的是,如果显式声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则Apache将会自动调节到一个相应值(可能是个非期望值)。下面是笔者的 worker配置段:
<IfModule worker.c> StartServers 3 MaxClients 2000 ServerLimit 25 MinSpareThreads 50 MaxSpareThreads 200 ThreadLimit 200 ThreadsPerChild 100 MaxRequestsPerChild 0 </IfModule>
# 保存退出。
# /usr/local/apache/bin/apachectl start
# 可根据实际情况来配置Apache相关的核心参数,以获得最大的性能和稳定性。

二、限制Apache并发连接数
我们知道当网站以http方式提供软件下载时,若是每个用户都开启多个线程并没有带宽的限制,将很快达到http的最大连接数或者造成网络阻塞,使得网站的许多正常服务都无法运行。下面我们添加mod_limitipconn模块,来控制http的并发连接数。

# wget http://dominia.org/djao/limit/mod_limitipconn-0.22.tar.gz
# tar zxvf mod_limitipconn-0.22.tar.gz
# cd mod_limitipconn-0.22
# /usr/local/apache/bin/ apxs -c -i -a mod_limitipconn.c
# 编译好后会自动把mod_rewrite.so拷贝到/usr/local/apache/modules下,并修改你的httpd.conf文件。
# vi /usr/local/apache/conf/httpd.conf
# 在最后一行加入<IfModule mod_limitipconn.c><Location />  #所限制的目录所在,此处表示主机的根目录MaxConnPerIP 2  #所限制的每个IP并发连接数为2个</Location></IfModule>
# 保存退出。
# /usr/local/apache/bin/apachectl start
# 下面我们用蚂蚁或快车测试一下,如图1:

如出现上述图所示,则表明配置成功。

三、防止文件被盗链
我们刚才已经限制了IP并发数,但如果对方把链接盗链到别的页面,我们刚才做的就毫无意义了,因为他完全可以通过蚂蚁或快车进行下载。所以就这种情况,我们要引用mod_rewrite.so模块。这样,当他盗链了文件,通过mod_rewrite.so模块把页面引到了一个事先我们制定好的错误页面里,这样就防止了盗链。
# /usr/local/apache/bin/apxs -c -i -a /opt/httpd-2.0.52/modules/mappers/mod_rewrite.c
# 编译好后会自动把mod_rewrite.so拷贝到/usr/local/apache/modules下,并修改你的httpd.conf文件。
# vi /usr/local/apache/conf/httpd.conf
RewriteEngine onRewriteCond %{HTTP_REFERER} !^http://www.squall.cn/.*$ [NC]RewriteCond %{HTTP_REFERER} !^http://www.squall.cn$ [NC]RewriteCond %{HTTP_REFERER} !^http://squall.cn/.*$ [NC]RewriteCond %{HTTP_REFERER} !^http://squall.cn$ [NC]RewriteRule .*\.(jpg|gif|png|bmp|tar|gz|rar|zip|exe)$ http://www.squall.cn/error.htm [R,NC]
# 我们打开浏览器测试一下,如图2:

通过我做的动画演示,大家也可进一步了解。

到此,我们就对Apache做了一次全面优化,性能比原来明显地有了很大的提高。这次实施过程到此也就圆满的结束了。相信大家通过读完我的这篇文章后,对Apache优化也有了一些心得,相信你在工作中也会处理好突发事件。

利用bw_mod.so模块对Apache2.X做带宽流量限制

RH上面快速更新rsync包

[不指定 2005/07/22 23:05 | by ipaddr ]
RH上面默认安装了rsync.rpm,自带了一些脚本,比较方便使用,一般情况下,可以用RPM包带的这些脚本,更新一下rsync的主程序就可以了。

在RH上面更新Rsync的方法如下:

1.下载rsync-x.x.x.x.tgz

2.tar zxvf rsync-x.x.x.tgz
cd rsync-x.x.x.x
./configure
make
make install

3.
将系统带的rsync备份,并链接到新的rsync
cd /usr/bin
mv rsync rsync-old
ln -s /usr/local/bin/rsync rsync

4.启动
注意,源代码包安装的rsync,好象不能用/etc/xinetd.d/rsync启动了。不知是不是版本的问题。
将原来的/etc/xinetd.d/rsync禁用,再在/etc/rc.d/rc.local后面加入:
/usr/local/bin/rsync --daemon
(其实,应该直接rpm -e rsync先删了rsync,原来的版本好象没一点用。 )

修改操作系统的TTL

[不指定 2005/07/17 23:06 | by ipaddr ]
      不同的操作系统,它的TTL值是不相同的。默认情况下,Linux系统的TTL值为64或255,Windows NT/2000/XP系统的TTL值为128,Windows 98系统的TTL值为32,UNIX主机的TTL值为255。

     简单的伪装操作系统的方法,就是修改TTL.

Windows下修改方法:

修改TTL值其实非常简单,通过注册表编辑器就可以实现,点击“开始→运行”,在“运行”对话框中输入“regedit”命令并回车,弹出“注册表编辑器”对话框,展开“HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters”,找到“DefaultTTL”,将该值修改为十进制的“255”,重新启动服务器系统后即可。

Linux下修改方法:

方法1(重启后有效):
#sysctl -w net.ipv4.ip_default_ttl=N
(N=0~255),若N>255,则ttl=0
方法2(重启后无效):
#echo N(N为0~255) > /proc/sys/net/ipv4/ip_default_ttl

rsync数据备份使用手记

[不指定 2005/07/15 23:07 | by ipaddr ]
rsync数据备份使用手记

一. 特性简介

  rsync是类Unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了 - remote sync。它的特性如下:

  1、可以镜像保存整个目录树和文件系统。
  2、可以很容易做到保持原来文件的权限、时间、软硬链接等等。
  3、无须特殊权限即可安装。
  4、优化的流程,文件传输效率高。
  5、可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
  6、支持匿名传输。

二. 安装
  默认情况下,Redhat下面安装了RPM版的rsync
  可以如下查看安装的Rsync
  #rpm -qa|grep rsync
  查看是否安装及版本
  如果没有安装,可以下载源代码安装,Rsync的官方网站:http://rsync.samba.org/rsync/
  下载
  rsync-2.6.6.tar.gz
  #tar zxvf rsync-2.6.6.tar.gz
  #./configure
  #make
  #make install
  #reboot
  //如果是已安装了RPM版的Rsync,并且要安装新版的Rsync,需要先删除Rsync
  rpm -e rsync
  (Redhat会有一个包依赖rsync,可以使用rpm -e rsync --nodeps卸载)
  另外,RPM版的rsync带了一个服务端的启动脚本,/etc/xinetd.d/rsync可以保留.

三. 使用

  Rsync可以做为服务端运行,也可以做为客户端运行.
  服务端与客户端的安装方法相同,运行的程序也相同(rsync就是一个程序,可以做为服务器方式运行,也可以做为客户端方式运行).
  服务端需要有一个配置文件/etc/rsyncd.conf,并且,以rsync --daemon的方式运行
  客户端,只需定时运行rsync --param 的形式,就可以从服务器同步文件.
  两台服务器间,可以互相同步.

四. 服务端的配置

  1)说明:
  服务器端一定要有配置文件/etc/rsyncd.conf,不然,rsync --daemon将不会运行.

  2)配置文件详解
  
  # cat /etc/rsyncd.conf

  ####################
  uid = nobody
  gid = nobody
  use chroot = no # 不使用chroot
  max connections = 4 # 最大连接数为4
  pid file = /var/run/rsyncd.pid
  lock file = /var/run/rsync.lock
  log file = /var/log/rsyncd.log # 日志记录文件

  [inburst] # 这里是认证的模块名,在client端需要指定
  path = /home/inburst/python/ # 需要做镜像的目录
  comment = BACKUP CLIENT IS SOLARIS 8 E250
  ignore errors # 可以忽略一些无关的IO错误
  read only = yes # 只读
  list = no # 不允许列文件
  auth users = inburst # 认证的用户名,如果没有这行,则表明是匿名
  secrets file = /etc/inburst.pas # 认证文件名

  [web]
  path = /usr/local/apache/htdocs/
  comment = inburst.org web server

  3) 在server端生成一个密码文件/etc/inburst.pas

  bash-2.03# cat /etc/inburst.pas
  inburst:hack

  出于安全目的,文件的属性必需是只有属主可读。

  4) 在server端将rsync以守护进程形式启动

  # rsync --daemon

  如果要在启动时把服务起来,有几种不同的方法,比如:
  //如果开了防火墙,应该把873端口打开.

  a、加入inetd.conf

  编辑/etc/services,加入rsync 873/tcp,指定rsync的服务端口是873
  编加/etc/inetd.conf,加入rsync stream tcp nowait root /bin/rsync rsync --daemon

  b、加入rc.local

  在各种操作系统中,rc文件存放位置不尽相同,可以修改使系统启动时rsync --daemon加载进去。

五. 从client端进行测试

  下面这个命令行中-vzrtopg里的v是verbose,z是压缩,r是recursive,topg都是保持文件原有属性如属主、时间的参数。--progress是指显示出详细的进度情况,--delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。

  后面的inburst@ip中,inburst是指定密码文件中的用户名,之后的::inburst这一inburst是模块名,也就是在/etc/rsyncd.conf中自定义的名称。最后的/tmp是备份到本地的目录名。

  在这里面,还可以用-e ssh的参数建立起加密的连接。可以用--password-file = /password/path/file来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。

  bash-2.03# rsync -vzrtopg --progress --delete inburst@192.168.168.52::inburst /tmp/
  Password:
  receiving file list ... done
  ./
  1
  785 (100%)
  1.py
  4086 (100%)
  2.py
  10680 (100%)
  a
  0 (100%)
  ip
  3956 (100%)
  ./
  wrote 190 bytes read 5499 bytes 758.53 bytes/sec
  total size is 19507 speedup is 3.43

  另外,可以创建一个脚本运行这个命令,并记录日志,
  # cat /usr/local/bin/rsync.sh
  #!/bin/sh
  DATE=`date +%w`
  rsync -vzrtopg --progress --delete inburst@192.168.168.52::inburst /home/quack/backup/$DATE --password-file=/etc/rsync.pass > /var/log/rsync.$DATE

  修改/etc/crontab做好定时更新

  比如:

  # echo "15 4 * * 6 root rsync.sh">>/etc/crontab

六. 参考资料
  Rsync - 镜像备份工具使用指南
  http://rsync.samba.org/rsync/
  man rsync
  man rsync.conf


Windows2000下DNS缓冲清除-

[不指定 2005/06/29 23:08 | by ipaddr ]
Ipaddr原创.

Windows2000的DNS解析,会有一个缓冲.

如果重新解析了一个域名,一般情况下,需要重启后才可以在本机起作用.

可以清除DNS缓冲,就可以让域名解析和服务器同步.

方法如下:

重新启动Windows2000的DNS Client服务.

可以在2003,XP上使用.

或者,直接使用命令:

ipconfig /flushdns

关于SYN_RECV

[不指定 2005/06/13 23:09 | by ipaddr ]
1.对于大量的 SYN_RECV
若怀疑是SYN Flood攻击,有以下建议:


这个攻击的解决方法如下:
1,增加未完成连接队列(q0)的最大长度。
echo 1280>/proc/sys/net/ipv4/tcp_max_syn_backlog
2, 启动SYN_cookie。
echo 1>/proc/sys/net/ipv4/tcp_syncookies
这些是被动的方法,治标不治本。而且加大了服务器的负担,但是可以避免被拒绝攻击(只是减缓)
治本的方法是在防火墙上做手脚。但是现在能在一定程度上防住syn flood攻击的防火墙都不便宜。并且把这个命令加入"/etc/rc.d/rc.local"文件中

如果对 /proc/sys/net/ipv4 下的配置文件进行解释,可以参阅 LinuxAid技术站的文章。查看本文全文也可以参阅。
关于 syn cookies, 请参阅 <> http://cr.yp.to/syncookies.html
也许 使用mod_limitipconn.c来限制apache的并发数 也会有一定的帮助。

2. iptables的设置,引用自CU


防止同步包洪水(Sync Flood)
# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
也有人写作
#iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
--limit 1/s 限制syn并发数每秒1次,可以根据自己的需要修改
防止各种端口扫描
# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
Ping洪水攻击(Ping of Death)
# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

附:
Iptables 指南 1.1.19
防火墙例子:
在Linux上使用iptables命令,建立一个个人防火墙

Windows2000下禁用某个端口

[不指定 2005/04/18 23:10 | by ipaddr ]
有时,需要禁用Windows2000下的某个服务的远程连接.

比如,装了SQLServer,不想让别人猜密码,可以禁止1433端口,这样,本地可以访问SQLServer,远程不可以访问.

用一般的防火墙可以实现,不过Windows2000自带的IPSec也可以,

参考:

禁止139/445端口连接

http://tech.ccidnet.com/pub/article/c1060_a105279_p1.html

MakePic.com 图片制造

[不指定 2005/04/16 23:10 | by ipaddr ]
国内的邮件图片生成器。

http://www.makepic.com

支持国内的很多邮箱,

输入一个邮件地址,生成一个图片,

用这种图片,可以很好防垃圾邮件。

Apache简单防盗链

[不指定 2005/03/31 23:11 | by ipaddr ]
防盗链设置样本:

SetEnvIf Referer "^http://(.)+\.ilinux\.cn/" local_ref=1
SetEnvIf Referer "^http://(.)+\.isql\.cn/" local_ref=1
#SetEnvIf Referer "^http://(.)+\.other\.org\.cn/" local_ref=1
SetEnvIf Request_URI "/logo(.)+" local_ref=0
<FilesMatch "\.(mp3|wmv|png|gif|jpg|jpeg|avi|bmp|ram|rmvb|rm|rar|zip|mp3)">
Order Allow,Deny
Allow from env=local_ref
</FilesMatch>

解释:
1. 蓝色部分,表示设置允许访问的referer地址,第一行的意思为所有http协议访问,以.ilinux.cn结尾的域名地址,第二行类似,只是换成了.isql.cn,表问我前面的鬼符是什么,不懂得可以去翻正则表达式的研究文献,不想深究的可以照猫画虎设置自己的网站。
2. 绿色部分,表示不在上述引用域名范围内,但可以被放行的特例,本例中表示网站/目录,所有以logo开头的文件(用作允许其它网站的友情连接引用本站logo)。
3. 橙色部分是设置反盗链的关键部分,上面每一个设置都联系到了local_ref这个环境变量,只有这个变量为1,则允许被引用,否则显示一个X。
4. 紫色部分设置了哪些扩展名的文件加入反盗链的规则。

补充:
我是直接设置在httpd.conf里面的,如果只想针对哪个目录设置,可以放在目录的.htaccess文件内。
另外,网上好多文档,都有错误,把SetEnvIf写成了SetEnvIfNoCase


附我以前用mod_rewrite写的
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://bbs.ilinux.cn/.*$      [NC]
RewriteCond %{HTTP_REFERER} !^http://bbs.ilinux.cn$      [NC]
RewriteCond %{HTTP_REFERER} !^http://www.ilinux.cn/.*$      [NC]
RewriteCond %{HTTP_REFERER} !^http://www.ilinux.cn$      [NC]
RewriteCond %{HTTP_REFERER} !^http://ilinux.cn/.*$      [NC]
RewriteCond %{HTTP_REFERER} !^http://ilinux.cn$      [NC]
RewriteRule .*\.(mp3|wmv|png|gif|jpg|jpeg|avi|bmp|ram|rmvb|rm|rar|zip)$ http://www.ilinux.cn [R,NC]
上面的,需要Rewrite模板.所有指定的文件,如果Referer不是上面的值,将被重定向到首页.

分页: 18/20 第一页 上页 13 14 15 16 17 18 19 20 下页 最后页 [ 显示模式: 摘要 | 列表 ]