订阅本站

Apache 2.4发布 直接瞄准Nginx

huangdijia 发表于 2012-2-22 分类 Web服务器 | 3条评论

最流行的Web Server发布了一个重大升级版,Apache HTTP Server 2.4的一个重要目标是大幅改进性能。新版改进了缓存、代理模块,会话控制,改进异步读写支持,等等。

Apache HTTP Server项目管理委员会和Apache基金会主席Jim Jagielski表示,他们希望终端用户能真正看到性能进步,表示Apache 2.4比许多以速度见长的Web Server更快,例如Nginx。

Debian安全升级Debian 5至Debian 6

huangdijia 发表于 2012-1-12 分类 Web服务器 | 发表评论

第一步:修改更新源为debian 6.0

# vi /etc/apt/sources.list
deb http://ftp.us.debian.org/debian/ squeeze main
deb-src http://ftp.us.debian.org/debian/ squeeze main
deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main
deb http://volatile.debian.org/debian-volatile squeeze/volatile main
deb-src http://volatile.debian.org/debian-volatile squeeze/volatile main

第二步:更新源及软件包

apt-get update
apt-get install apt dpkg aptitude
apt-get dist-upgrade

第三步:重启

reboot

第四步:检查升级后系统运行情况

lsb_release -a
netstat -tulpn
tail -f /var/log/messages
other log files for linuxany.com

最近在一台古董服务器(Centos5.4)上通过yum安装一些php需要的库文件时发生错误:

# yum update
Setting up Update Process
Setting up repositories
Segmentation fault

开始以为是yum源的问题,折腾了好半天,发现原来是我们安装的zlib1.2.5时指定了安装目录(./configure -prefix=/usr)对yum产生了影响,所以总结如下:
1、安装完系统后,运行一次#yum update(yum产生了缓存) ,然后再安装zlib1.2.5,之后如果不执行#yum clean all,则一直可以使用yum,不会报段错误

2、如果在执行yum前已经安装了zlib1.2.5,则需要做如下处理

#cd /usr/lib
#ln -sf libz.so.1.2.3 libz.so
#ln -sf libz.so.1.2.3 libz.so.1

但此后zlib就使用了旧版本,在成功执行了yum后,还需要将软连接更改

#cd /usr/lib
#ln -sf libz.so.1.2.5 libz.so
#ln -sf libz.so.1.2.5 libz.so.1

至此,问题解决了!

今天早上,升级bugfree至2.1.3后发现勾选“记住密码”会导致无法登录,但是php、nginx日志并没任何发现。
看了一下源码发现2.1.3版本开始使用了mcrypt类库:

但是从bugfree更新日志中并没有提到。
解决办法:
重新编译php开启mcrypt扩展,但在此之前要先安装libmcrypt-dev。步骤如下:

  1. apt-get install libmcrypt-dev
  2. ./configure [省略] –with-mcrypt

隐藏Nginx版本号方法

huangdijia 发表于 2011-12-20 分类 Web服务器 | 发表评论

那nginx版本号可以隐藏不?其实可以的,看下面我的步骤:

1、进入nginx配置文件的目录(此目录根据安装时决定),用vim编辑打开

# vim nginx.conf

在http {—}里加上server_tokens off; 如:

http {
//……省略
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
server_tokens off;
//…….省略
}

2、编辑php-fpm配置文件,如fastcgi.conf或fcgi.conf(这个配置文件名也可以自定义的,根据具体文件名修改):

找到:

fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

改为:

fastcgi_param SERVER_SOFTWARE nginx;

3、重新加载nginx配置:

# /etc/init.d/nginx reload

这样就完全对外隐藏了nginx版本号了,就是出现404、501等页面也不会显示nginx版本。

mysqlhotcopy备份报错

huangdijia 发表于 2011-12-16 分类 MySQL数据库技术, Web服务器 | 发表评论

错误信息:

/usr/local/mysql/bin/mysqlhotcopy -u root -p  --addtodest --noindices --flushlog -q qeedoo /tmp/bak
install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at (eval 7) line 3.
Perhaps the DBD::mysql perl module hasn't been fully installed,
or perhaps the capitalisation of 'mysql' isn't right.
Available drivers: DBM, ExampleP, File, Proxy, Sponge.

解决办法:

# http://search.cpan.org/~capttofu/DBD-mysql-3.0008/
wget http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.020.tar.gz
tar zxvf DBD-mysql-4.020.tar.gz
cd /tmp/DBD-mysql-4.020
perl Makefile.PL --mysql_config=/usr/local/webserver/mysql/bin/mysql_config
make
make install

最后编译安装完之后 发现还是报错:

install_driver(mysql) failed: Can't load '/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/DBD/mysql/mysql.so' for module DBD::mysql: libmysqlclient.so.16: cannot open shared object file: No such file or directory at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230.
 at (eval 7) line 3
Compilation failed in require at (eval 7) line 3.
Perhaps a required shared library or dll isn't installed where expected
 at /usr/bin/mysqlhotcopy line 177

是因为tar安装mysql后的路径配置的有问题

vi /etc/ld.so.conf

把mysql的这个库文件路径添加进去

echo "/usr/local/webserver/mysql/lib/mysql" >> /etc/ld.so.conf
ldconfig

再执行mysqlhotcopy的时候,一切正常。

有一台服务出现如下问题:
以下问题待遇查看资料,先记下另外这个问题:

Can't locate DBI.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /usr/local/mysql/bin/mysqlhotcopy line 8.
BEGIN failed--compilation aborted at /usr/local/mysql/bin/mysqlhotcopy line 8.

原因:系统没有按安装DBI组件。

第一个PHP扩展开发

huangdijia 发表于 2011-12-15 分类 PHP/PHP框架, Web服务器 | 发表评论

假设要有这么一个扩展,提供一个叫ccvita_string的函数,他的主要作用是返回一段字符。对应的PHP代码可能是这样:

function ccvita_string($str){
     $result = '<a href="'.$str.'">Link</a>';
     return $result;
}

第一步,生成代码
PHP为了扩展开发的方便,提供了一个类似代码生成器的工具ext_skel,具体可以参见说明。
首先我们创建一个文件ccvita.skel,它的内容为

string ccvita_string(string str)

就是告诉ext_skel这个东西,我们要做的扩展里面有个函数叫ccvita_string。然后执行

cd MooENV/src/php-5.3.8/ext/
./ext_skel --extname=ccvita --proto=ccvita.skel
cd ccvita/

这时候,ccvita这个扩展的代码框架就已经出来了。 查看全文

Linux IO读写压力测试

huangdijia 发表于 2011-12-15 分类 Web服务器 | 发表评论

随手笔记

# 磁盘读测试
hdparm -t /dev/sda
# 写测试
time dd if=/dev/zero bs=1M
time dd if=/dev/zero bs=1M count=1024 of=1g
# 记得删除这个叫1g的文件哦

笔记一下

#!/bin/sh

#check MySQL_Slave Status
#crontab time 00:10
MYSQL_USER="root"
MYSQL_PWD="123456"
MYSQL_SLAVE_LOG="/tmp/check_mysql_slave.log"
EMAIL="1351010****@139.com"

MYSQL_PORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $5}'`
MYSQL_IP=`ifconfig eth0|grep "inet addr" | awk -F[:" "]+ '{print $4}'`
MYSQL_SLAVE_STATUS=$(/usr/local/webserver/mysql/bin/mysql -u root -psylc23hua -S /tmp/mysql.sock -e "show slave status\G" | grep -i "running")
IO_ENV=`echo $MYSQL_SLAVE_STATUS | grep IO | awk ' {print $2}'`
SQL_ENV=`echo $MYSQL_SLAVE_STATUS | grep SQL | awk '{print $2}'`
NOW=$(date -d today +'%Y-%m-%d %H:%M:%S')

if [ "$MYSQL_PORT" = "3306" ];then
  echo "mysql is running!"
else
  mail -s "warn!server: $MYSQL_IP mysql is down" "$EMAIL"
fi

if [ "$IO_ENV" = "Yes" -a "$SQL_ENV" = "Yes" ];then
  echo "Slave is running!"
else
  echo "[ $NOW ] Slave is not running!" >> "$MYSQL_SLAVE_LOG"
  cat "$MYSQL_SLAVE_LOG" | mail -s "WARN! ${MySQL_IP}_replicate_error" "$EMAIL"
fi

exit 0

今天在整合UCENTER登陆时 出现
‘Authorization has expired’ 这个错误
原来一看,是BBS,UCENTER,UCHOME那台机器的时间不对了,调整过来后就可以顺利登陆了.
另外,由于使用两台机器,存在COOKIE跨域问题,因此其实A机器用域名就可以了,比如a.abc.com,
B机器用B.ABC.COM,就可以顺利解决这个问题了