朱文昊的中文博客--专注技术,向往自由
服务器和网站类
IE一个有趣的功能-把10进制数转换为IP地址
2010年02月26日
不小心把一串数字拷贝进了IE地址栏然后回车,发现自动转到了一个IP地址.我想是不是IE自动换算的能? 于是把本站的IP地址98.143.155.188换算为16进制
98 –> 62
143-> 8F
155-> 9B
188-> BC
然后再把0x628F9BBC换算为十进制 1653578684, 输入地址栏,回车,bingo,自动转到了IP地址98.143.155.188.
Apache优化限制内存占用,防止当机
2010年01月15日
Linux Apache服务器架构应该以稳定著称, 前一篇日志提到有人抱怨soso spider把自己的网站搞死了,这个其实不能全怪spider.想想看,如果有足够多的用户,正常访问网站,人多的像soso的spider一样,apache也不可能挂了? 关键在于Apache配置, 以及配置之后一定要进行压力测试.。
先说说配置, 第一是不要加载不必要的apache模块, 这样可以限制每个进程的内存占用量(对prefork而言,worker没用过,因为php的原因). 然后就要注意下面这个性能配置部分。
View Code MYSQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <ifmodule prefork.c=""> # number of server processes to start # http://httpd.apache.org/docs/2.2/mod/mpm_common.html#startservers # 服务器启动时,产生的服务进程 StartServers 8 # minimum number of server processes which are kept spare # http://httpd.apache.org/docs/2.2/mod/prefork.html#minspareservers # 系统空闲态,至少要保留的服务进程数,也就是相当于,饭店里没人吃饭,也要至少站6个服务员等顾客来 MinSpareServers 6 # maximum number of server processes which are kept spare # http://httpd.apache.org/docs/2.2/mod/prefork.html#maxspareservers # 系统空闲态,至多保留的服务进程数,也就是相当于,饭店里要是没有顾客,数一数站着没事的服务员,多于10个的话,就是让他们放假回家. MaxSpareServers 10 # highest possible MaxClients setting for the lifetime of the Apache process. # http://httpd.apache.org/docs/2.2/mod/mpm_common.html#serverlimit # 服务器允许配置的进程数上限,设置了MaxClients最大允许配置的数值.必须重启服务器才生效的值. ServerLimit 40 # maximum number of server processes allowed to start # http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxclients # 服务器允许连接的进程数上限,也就是饭店里正常情况下最大允许进入的人数.此值不需要重启服务器即可修改生效,但不能超过ServerLimit,及时配置超过,也只能最大运行ServerLimit个进程. MaxClients 20 # maximum number of requests a server process serves # http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxrequestsperchild MaxRequestsPerChild 10000 </ifmodule> |
关于其他参数,就搜索一下吧,我就不再重复了.
关键在于,一定要测试自己服务器的负载,是不是能承受的住最糟糕的情况. 使用命令:
ab2 –n 1000 –c 100 http://yourdomain.com/index.php
这条命令模拟并发连接数为100的情况,而上面的配置最大只允许20个并发,所以有一些请求会在队列里等待服务,但不会耗光你的内存。你可以尝试加大自我攻击的力度,如果服务器在这样糟糕的情况下还能剩余一些内存,系统就肯定不会崩溃。 请注意,这里说的内存是物理内存,别把swap算进来。一旦用上swap,因为硬盘的速度和内存无法相提并论,造成服务器的响应就会非常慢。这时候应该减小MaxClients到自己能承受的值。
腾讯搜搜的网络爬虫真的很贱很讨厌哎
2010年01月15日
刚刚查看博客后台的安全日志,发现有相似的IP在特定时间间隔内访问我的后台登录页面。联想到最近的Google风波,我一下敏感起来,我被暴力攻击了?
首先,反向解析了几个IP,发现都是深圳的。然后google了一下,原来很多站长早已经对这些IP恨之入骨了,这就是来自腾讯搜搜的网络爬虫。腾讯搜搜的网络爬虫真是臭名昭著,有人被它短时间的大量并发访问把apache搞挂的,有人被它不停的访问造成的高负载而被服务商关站的,也有人就是看他不爽。大家基本上都会选择把它屏蔽了。我也这么做了。
具体的,腾讯搜搜的高危IP列表入下:
58.61.164.38
58.61.164.39
58.61.164.40
58.61.164.41
58.61.164.42
58.61.164.138
58.61.164.139
58.61.164.140
58.61.164.141
58.61.164.142
58.61.164.143
58.61.164.200
58.61.164.201
也有人直接对58.61.164整个号段下手屏蔽了,呵呵。
可以使用在 .htaccess文件中或者在apache配置文件中使用:
Order allow,deny
deny from 58.61.164.
Allow from all
来把该IP号段屏蔽,可以把上面给出的IP一个一个deny掉.这个功能是在apache2中是mod_authz_host模块提供的,该模块的说明中还提到了更多精细控制的说明,可以阅读参考手册得到更多信息.
最后说, 搜搜的spider贱,就在于,它疯狂的扫站,竟然却不收录,哎,无语了. 拜托搜搜的研发人员,如果自己水平不够好,就不要自己写搜索引擎了,用几个开源的spider也行啊.
mod_security2引起的403错误
2010年01月10日
今天上传图片,发现超过100K的文件就会出现403错误,Request entity too large, Post size exceed.之类的。总之就是文件太大,超过POST方法的限制。我的php.ini限制放的很宽松,所以以为是ajax使用的post方法有限制,查了google,大多数人都提到了在Http.conf里调整LimitRequestBody的方法,但是对我没用。突然想到,限制POST SIZE,肯定是为了防止服务器被攻击,和安全性有关,仔细看了看mod_security2的配置文件,发现正是这几个参数限制引起的
# Maximum request body size we will
# accept for buffering
SecRequestBodyLimit 131072
# Store up to 128 KB in memory
SecRequestBodyInMemoryLimit 131072
# Buffer response bodies of up to
# 512 KB in length
SecResponseBodyLimit 524288
把上面这几个值调大一些,上传文件就不会再超过限制了。
自动备份MySQL数据库的脚本
2010年01月9日
曾经提到过,需要重视系统备份了。这不,倒腾了一个自动备份数据库的bash脚本,那出来晒一晒,欢迎大家批评指正哈。
View Code BASH
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #!/bin/sh backup () { DBName=$@ BackupPath="/DBbackup/"${DBName} BackupName=${DBName}-`date "+%Y-%m-%d-%H-%M-%S"`".sql" if [[ -d "${BackupPath}" ]] || mkdir ${BackupPath}; then if mysqldump -uroot(I like easy way-:) -p*****(Hide N passwd-:) \ --default-character-set=utf8 --opt --master-data=1 \ --single-transaction --flush-logs \ ${DBName} > ${BackupPath}"/"${BackupName}; then echo ${BackupName}"Backup success!" bzip2 -q -s ${BackupPath}"/"${BackupName}; else echo ${BackupName}"Backup Failed@@@@@@@@@@@@@@@@@@@@@@@@" fi fi find ${BackupPath}"/" -ctime +7 -exec rm {} \; } #Call the function to backup database assigned below backup ***_db backup ***_db *** |


Facebook
Twitter
Picasa
LinkedIn
Youtube
Digg
Buzz