curl 检查服务器是否支持 gzip

http://www.ninjasys.co.uk/linux/using-curl-to-check-if-a-page-is-gzippedcompressed/

方法如下

curl -I -H 'Accept-Encoding: gzip,deflate' -H "Host:域名"  http://ip/url
如果结果是
HTTP/1.1 200 OK
Server: nginx/0.8.52
Date: Tue, 05 Jul 2011 01:28:30 GMT
Content-Type: application/x-javascript
Last-Modified: Tue, 10 Aug 2010 00:33:24 GMT
Connection: keep-alive
Vary: Accept-Encoding
Expires: Thu, 04 Aug 2011 01:28:30 GMT
Cache-Control: max-age=2592000
Content-Encoding: gzip  很好支持

如果没有 Content-Encoding: gzip 就不支持gzip

64位linux安装vsftpd虚拟用户的几点注意

  1. auth required /lib64/security/pam_userdb.so db=/etc/vsftpd_login  注意红色部分!!!
  2. 如果出现登陆503错误,请看 tail -f /var/log/secure 以确定具体是否是因为pam登陆验证的问题
  3. 注意权限方面问题,
  4. google 最好搜索英文 vsftpd virtual user
  5. http://linuxforfun.net/2008/04/05/vsftpd-virtual-users/  可以参考下

apache time_wait 过多,修改 keepalive 解决

最近一朋友的centos apache 2.2 发现大量的ip 出现 time_wait 显现

即 netstat -an | grep “:80” 的结果大量显现 time_wait

初期以为是 被Ddos 了,后发现即使是就一个ip访问,也产生大量time_wait

遂修改 apache 配置文件 httpd.conf

KeepAlive On
MaxKeepAliveRequests 120
KeepAliveTimeout 15

观察后问题解决

centos redhat 关闭不必要的服务

for srv in acpid anacron atd auditd autofs avahi-daemon bluetooth cpuspeed crond cups firstboot gpm haldaemon hidd hplip irqbalance isdn kudzu lm_sensors mcstrans mdmonitor messagebus microcode_ctl netfs nfslock pcscd portmap rawdevices readahead_early restorecond rpcgssd rpcidmapd sendmail setroubleshoot smartd snmpd xfs xinetd yum-updatesd
do
chkconfig $srv off
service $srv stop
done

centos 的vpn客户端配置 备忘

有颜色部分是需要根据情况修改的

1.安装包
yum -y install ppp
yum -y install pptp

2.配置文件
vi /etc/ppp/chap-secrets
——————————————
# Secrets for authentication using CHAP
# client    server    secret            IP addresses

username myvpnpassword” *
——————————————

vi /etc/ppp/peers/myvpn
——————————————
# written by pptpsetup
pty “pptp  vpnserverip –nolaunchpppd”
lock
#noauth
nobsdcomp
nodeflate
name username
remotename myvpn
ipparam myvpn
require-mppe-128
refuse-pap
refuse-chap
refuse-eap
refuse-mschap
——————————————

3.复制命令
cp /usr/share/doc/ppp-2.4.4/scripts/pon /usr/sbin/
cp /usr/share/doc/ppp-2.4.4/scripts/poff /usr/sbin/
chmod +x /usr/sbin/pon /usr/sbin/poff

4.拨vpn
pon myvpn

5)ifconfig 看ppp0

pptp 如果 yum  安装不了,可以到 rpmfind.net 去查

http://rpm.pbone.net/index.php3?stat=3&limit=1&srodzaj=1&dl=40&search=pptp&field[]=1&field[]=2

6.断开连接
poff myvpn

IBM x3650 m2 7947 上安装 Centos 4.8 网卡驱动问题解决方案

昨日一个客户的IBM x3650 m2 7947 上安装 Centos 4.8 发现无法使用网络  ifconfig 显示 lo ,无eth0 和 eth1 ,
此机器板载 Broadcom (R) NetXtreme II (TM)  网卡2块,
解决方法如下:
到 www.ibm.com 英文网站下Support & downloads 根据型号下载 for redhat 4 的驱动和固件升级程序

Broadcom NetXtreme and NetXtreme II Firmware Update Utility v2.1.1b for Linux    04 Dec 2009  v2.1.1b

Broadcom (bnx2) NetXtreme II driver v1.9.20b for Red Hat Enterprise Linux 4 (32-bit and 64-bit)  02 Sep 2009 vbnx2-1.9.20b

首先安装固件升级程序 方法是
chmod +x brcm_fw_nic_2.1.1b_linux_32-64.bin
./brcm_fw_nic_2.1.1b_linux_32-64.bin -s

然后根据情况去安装 driver ,有可能无需安装,因为 centos 4.8 似乎也有类似驱动

运维经验 Linux 自动屏蔽超标访问IP的 bash 脚本

##############################################
#version="20100718"
#author="phpsir"
#author_email="phpsir@phpsir.com"
#QQ  733905
##############################################
maxnum=100
runmin_max=120
#runmin_max is run iptables -F timeout
banip_data_file="/root/banip_data.txt"
ipopenfile="/root/openip.txt"
ipfile="/tmp/80link.txt"
nsfile="/tmp/netstat80.txt"

myip=`/sbin/ifconfig eth0 | grep inet | awk '{print $2}' | sed 's/addr://' | grep .`
if [ ! -f $ipopenfile ]
then
echo "init $ipopenfile"
touch $ipopenfile
fi
if [ -f $banip_data_file ]
then
source $banip_data_file
echo  "last runtime=$runtime"
else
echo "init $banip_data_file"
echo 'runtime='`date "+%s"` > $banip_data_file
source $banip_data_file
runmin_max=-1
fi

echo "start shell" `date "+%Y-%m-%d %H:%M:%S"`
runmin=$((`date "+%s"`-$runtime))
if [ $runmin -gt $runmin_max ]
then
echo $runmin "is bigger than " $runmin_max
echo "clear ips"
/sbin/iptables -F
echo 'runtime='`date "+%s"` > $banip_data_file
else
echo $runmin "is lowwer than " $runmin_max
fi

netstat -an | grep "$myip:80" > $nsfile

echo "Total Links = " `cat $nsfile | wc -l `
echo "Total Links ESTABLISHED = " `cat $nsfile | grep ESTABLISHED | wc -l `
echo "Total Links SYNC = " `cat $nsfile | grep SYN | wc -l `

cat $nsfile | sed "s/::ffff://g" | awk '{print $5}' | awk -F: '{print $1}' | sort|uniq -c|sort -rn | head -n 10 >  $ipfile

cat $ipfile  | while read oneline
do
    ip=`echo $oneline | cut -d " " -f 2`
    num=`echo $oneline | cut -d " " -f 1`
    str="$ip has linked  $num "
    banme="yes"

    for allowip in `cat $ipopenfile`
    do
        echo $ip | grep $allowip > /dev/null
        if [ $? -eq 0 ]
        then
            banme="no"
            echo $allowip "banme = " $banme
            /sbin/iptables -D  INPUT   -p tcp -s $ip  -d $myip  --dport 80 -j REJECT  > /dev/null  2>&1
            continue
            fi
    done

    if [ $banme = "yes" ]
    then
        if [ $num -gt "$maxnum" ]
        then
            /sbin/iptables -L -n | grep "$ip" >/dev/null
            status=`echo $?`
            if [ $status -eq 1 ]
            then
                echo "deny  $ip ,because $str "
                /sbin/iptables -A  INPUT   -p tcp -s $ip  -d $myip  --dport 80 -j REJECT
                echo "BAN " $ip " OK "
                #/sbin/iptables -L -n | grep "$ip"
            else
                echo > /dev/null
                #echo "$str  alread reject"
            fi
        else
            echo > /dev/null
            #echo "$str  $ip ok ,less  $maxnum "
        fi
    fi

done

echo "stop shell" `date "+%Y-%m-%d %H:%M:%S"`

lighttpd 在daemontools下自动重启方法

“lighttpd -D -f lighttpd.conf 这个作为 daemontools的 run 配置文件”

参考文档:
http://redmine.lighttpd.net/projects/lighttpd/wiki/LighttpdUnderSupervise

脚本如下:
mkdir -p /srv/lighttpd/log/main/

vi /srv/lighttpd/run

#! /bin/sh

exec 2>&1
exec lighttpd -D -f $PATHTO/lighttpd.conf

vi /srv/lighttpd/log/run

#! /bin/sh
umask 0027
exec setuidgid nobody multilog ./main

chown nobody /srv/lighttpd/log/main

最后
ln -s /srv/lighttpd /service/

等待5秒左右就可以看到 lighttpd 启动了

nginx php 在 daemontools 下运行, 永不当机配置

以下均为Linux 平台配置

1. 首先假设你已经可以使 nginx + php 在 fastcgi 模式下运行 (如果不会,请参考nginx 资料)
2. 安装djb daemontools
脚本如下

mkdir -p /package
chmod 1755 /package/
cd /package/
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
tar xzf daemontools-0.76.tar.gz
wget http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/daemontools-0.76.errno.patch
cd admin/daemontools-0.76
patch -p1 < ../../daemontools-0.76.errno.patch
rm ../../daemontools-0.76.errno.patch ../../daemontools-0.76.tar.gz
./package/install

3. 配置 nginx在 daemontools下运行
脚本如下
修改nginx.conf  加入 daemon off; (在 worker_processes 前面!!)
mkdir -p /srv/nginx
vi /srv/nginx/run  内容为
#!/bin/sh
exec /usr/local/nginx/sbin/nginx
4. php fastcgi 在 daemontools 下运行 (最关键的 -n )
#! /bin/sh
exec /usr/local/lighttpd/bin/spawn-fcgi  -n -a 127.0.0.1 -p 9999 -C 30  -u nobody -g nobody  -f /usr/local/php/bin/php-cgi

5. 配置svscan 监控
ln -s /srv/nginx  /service
ln -s /srv/phpfcgi /service

手动停止 你的 nginx  和 php-cgi 进程看看,是不是  php-cgi  和 nginx 自动启动了。呵呵
6. 学习如何手动停止 nginx  和 php-cgi
svc -d /service/nginx  停止 nginx
svc -u /service/nginx  启动 nginx
svc -d /service/phpfcgi 停止phpfcgi
svc -u /service/phpfcgi 启动phpfcgi

That’s all !

补充,php 可以打 fpm补丁后不用此方法