主頁(yè) > 知識(shí)庫(kù) > Centos5.2配置LAMP與Centos5.3配置LAMP

Centos5.2配置LAMP與Centos5.3配置LAMP

熱門(mén)標(biāo)簽:灰谷地圖標(biāo)注 省份地圖標(biāo)注 陽(yáng)江智能電銷(xiāo)機(jī)器人 科研地圖標(biāo)注 南寧銷(xiāo)售電銷(xiāo)機(jī)器人廠家 辦理400電話怎么劃傷 平頂山手機(jī)自動(dòng)外呼系統(tǒng)違法嗎 江蘇客服外呼系統(tǒng)怎么樣 地圖標(biāo)注軌跡
CentOS5.2配置LAMP全過(guò)程2009-03-30 22:00文章內(nèi)容分為7部分

一:系統(tǒng)約定
二:系統(tǒng)基本設(shè)置
三:下載軟件
四:安裝必須的軟件
五:編譯安裝軟件
六:配置apache PHP
七:測(cè)試 (通過(guò)phpinfo,phpmyadmin,sugarcrm的安裝來(lái)測(cè)試)

一:系統(tǒng)約定
采用Centos5.2光盤(pán),
軟件源代碼包存放位置 /usr/local/src
源碼包編譯安裝位置(prefix) /usr/local/software_name
MySQL 數(shù)據(jù)庫(kù)位置 /data/mysql/data
Apache 網(wǎng)站根目錄 /data/www/wwwroot(虛擬主機(jī)在這個(gè)目錄下)
Apache 虛擬主機(jī)日志根目錄 /data/www/logs
Apache 運(yùn)行賬戶 www:www
創(chuàng)建兩個(gè)虛擬主機(jī) test.com linux.com

所有的配置的文件修改,都做備份,備份的名字為 文件名.save

下面的實(shí)驗(yàn)是用vmware station 6 創(chuàng)建一個(gè) redhat AS5的vm,安裝centos5.2,安裝的時(shí)候,選擇安裝語(yǔ)言是英文,采用文本方式來(lái)安裝,選擇最小化的安裝。

yum的更新,采用本地光盤(pán)的方式,這樣比較快捷。

我的機(jī)器基本設(shè)置

IP:192.168.1.200/255.255.255.0

網(wǎng)關(guān):192.16.1.1

DNS:192.168.1.1

hostname:ns1

二:系統(tǒng)基本設(shè)置

我已經(jīng)把所有需要配置的內(nèi)容,做一個(gè)一個(gè)腳本,只需要運(yùn)行一次就可以。

cd /usr/local/src
vi /usr/local/src/init.sh

#####################

#Diabe IPV6
cp /etc/modprobe.conf /etc/modprobe.conf.save
echo “alias net-pf-10 off” >> /etc/modprobe.conf
echo “alias ipv6 off” >> /etc/modprobe.conf

#SSH
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.save
sed -i ‘/#PermitRootLogin/s/#PermitRootLogin/PermitRootLogin/’ /etc/ssh/sshd_config
sed -i -e ‘74 s/^/#/’ -i -e ‘76 s/^/#/’ /etc/ssh/sshd_config
sed -i “s/#UseDNS yes/UseDNS no/” /etc/ssh/sshd_config
sed -i -e ‘44 s/^/#/’ -i -e ‘48 s/^/#/’ /etc/ssh/sshd_config
/etc/init.d/sshd restart

#停止 the “beep”


cp /etc/inputrc /etc/inputrc.save
sed -i ‘/#set bell-style none/s/#set bell-style none/set bell-style none/’ /etc/inputrc


#關(guān)閉SElinux

cp /etc/sysconfig/selinux /etc/sysconfig/selinux.save
sed -i ‘/SELINUX=enforcing/s/SELINUX=enforcing/SELINUX=disabled/’ /etc/sysconfig/selinux



#加載光驅(qū)

mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
echo “mount /dev/cdrom /mnt/cdrom” >> /etc/rc.local


#設(shè)置yum使用本地光盤(pán)

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.save
mv /etc/yum.repos.d/CentOS-Media.repo /etc/yum.repos.d/CentOS-Media.repo.save
echo “[DVDISO]” >> /etc/yum.repos.d/dvdiso.repo
echo “name=DVD ISO” >> /etc/yum.repos.d/dvdiso.repo
echo “baseurl=file:///mnt/cdrom/” >> /etc/yum.repos.d/dvdiso.repo
echo “enabled=1″ >> /etc/yum.repos.d/dvdiso.repo
echo “gpgcheck=0″ >> /etc/yum.repos.d/dvdiso.repo


#vim設(shè)置

yum -y install vim-enhanced
mv /bin/vi /bin/vi.save
ln -s /usr/bin/vim /bin/vi
cp /etc/vimrc /etc/vimrc.save
sed -i “39 s/^/ set number \n filetype on\n set history=1000\n syntax on\n set tabstop=4\n set showmatch\n set vb t_vb=\n set mouse=a\n set ignorecase\n set autowrite\n /” /etc/vimrc

#時(shí)間的設(shè)置
yum -y install ntp
ntpdate 210.72.145.44 clock -w

#安裝常用軟件

yum -y install wget unzip

#停止沒(méi)有必要的服務(wù)
chkconfig –list |grep 3:on |awk ‘{print $1}’ |egrep -v ’sshd|network|syslog’ |xargs -i{} chkconfig –level 3 {} off
chkconfig –list | grep 3:on | cut -f1

#重新啟動(dòng)
init 6
####################

sh init.sh


三:下載軟件

cd /usr/local/src
vi list

http://download.filehat.com/apache/httpd/httpd-2.2.8.tar.gz
http://opensource.nchc.org.tw/COSA/CNS4/cronolog-1.6.2.tar.gz
http://www.libgd.org/releases/gd-2.0.35.tar.bz2
http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.12.tar.gz
http://mirror.optus.net/sourcefo ... mcrypt-2.5.8.tar.gz
http://jaist.dl.sourceforge.net/ ... mcrypt-2.6.7.tar.gz
http://www.openssl.org/source/openssl-0.9.8h.tar.gz
http://openbsd.md5.com.ar/pub/Op ... penssh-5.0p1.tar.gz
http://mysql.byungsoo.net/Downlo ... ysql-5.0.51b.tar.gz
http://cn2.php.net/get/php-5.2.6.tar.bz2/from/this/mirror
http://downloads.phpchina.com/ze ... glibc23-i386.tar.gz
ftp://ftp.cac.washington.edu/mail/imap.tar.Z
http://puzzle.dl.sourceforge.net ... s-utf-8-only.tar.gz
http://dl.sugarforge.org/sugarcr ... 0/SugarCE-5.1.0.zip
http://mirror.optus.net/sourceforge/m/mh/mhash/mhash-0.9.9.tar.gz

wget -i list

四:安裝必須的軟件

采用yum的方式安裝

yum -y install gcc make patch gcc-c++ gcc-g77 flex bison autoconf automake \
libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel libtiff-devel fontconfig-devel libXpm-devel gettext-devel pam-devel pcre-devel libtool libtool-ltdl

五:編譯安裝軟件

下面的內(nèi)容,其實(shí)你可以復(fù)制到一個(gè)文本,比如 install.sh 運(yùn)行這個(gè)腳本,我已經(jīng)測(cè)試過(guò)了,整整運(yùn)行了快1個(gè)小時(shí),估計(jì)是我在vm上跑道原因。前提是你下載的軟件和我是一樣的,也就是軟件都是通過(guò)上面的下載的。

cd /usr/local/src
vi install.sh
###############################################

#安裝openssl
cd /usr/local/src
tar zxvf openssl-0.9.8h.tar.gz
cd openssl-0.9.8h
./config shared zlib
make
make test
make install
mv /usr/bin/openssl /usr/bin/openssl.save
mv /usr/include/openssl /usr/include/openssl.save
mv /usr/lib/libssl.so /usr/lib/libssl.so.save
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
ln -sv /usr/local/ssl/lib/libssl.so.0.9.8 /usr/lib/libssl.so
cd ..


#配置庫(kù)文件搜索路徑
echo “/usr/local/ssl/lib” >> /etc/ld.so.conf
ldconfig -v

#檢測(cè)安裝結(jié)果
openssl version

#安裝openssh

tar xvf openssh-5.0p1.tar.gz

cd openssh-5.0p1

./configure \
”–prefix=/usr” \
”–with-pam” \
”–with-zlib” \
”–sysconfdir=/etc/ssh” \
”–with-ssl-dir=/usr/local/ssl” \
”–with-md5-passwords”

make
make install

cd ..

service sshd restart

ssh -v

#安裝GD

tar jxvf gd-2.0.35.tar.bz2
cd gd-2.0.35
aclocal
./configure –prefix=/usr/local/gd2
make make install
cd ..

#安裝 libmcrypt


tar zxvf libmcrypt-2.5.8.tar.gz

cd libmcrypt-2.5.8/
./configure
make
make install
/sbin/ldconfig
cd libltdl/
./configure –enable-ltdl-install
make
make install
cd ../../

cp /usr/local/lib/libmcrypt.* /usr/lib



#安裝libiconv


tar zxvf libiconv-1.12.tar.gz

cd libiconv-1.12/
./configure –prefix=/usr/local
make
make install
cd ../

ln -s /usr/local/lib/libiconv.so.2 /usr/lib/


#安裝mhash

tar zxvf mhash-0.9.9.tar.gz
cd mhash-0.9.9/
./configure
make
make install
cd ../
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2

#安裝mcrypt


tar zxvf mcrypt-2.6.7.tar.gz
cd mcrypt-2.6.7/
./configure
make
make install
cd ../


#安裝cronolog

tar xvf cronolog-1.6.2.tar.gz

cd cronolog-1.6.2

./configure –prefix=/usr/local/cronolog

make make install

cd ..


#安裝imap

tar zxf imap.tar.Z
cd imap-2007b
make lr5 PASSWDTYPE=std SSLTYPE=unix.nopwd IP6=4
echo “set disable-plaintext nil” > /etc/c-client.cf
mkdir /usr/local/imap-2007b
mkdir /usr/local/imap-2007b/include/
mkdir /usr/local/imap-2007b/lib/
chmod -R 077 /usr/local/imap-2007b
rm -rf /usr/local/imap-2007b/include/*
rm -rf /usr/local/imap-2007b/lib/*
rm -rf /usr/sbin/imapd
cp imapd/imapd /usr/sbin/
cp c-client/*.h /usr/local/imap-2007b/include/
cp c-client/*.c /usr/local/imap-2007b/lib/
cp c-client/c-client.a /usr/local/imap-2007b/lib/libc-client.a

cd ..

#安裝MYSQL


tar zxvf mysql-5.0.51b.tar.gz

cd mysql-5.0.51b

./configure \
“–prefix=/usr/local/mysql” \
“–localstatedir=/data/mysql/data” \
“–with-comment=Source” \
“–with-server-suffix=-test.com” \
“–with-mysqld-user=mysql” \
“–without-debug” \
“–with-big-tables” \
“–with-charset=gbk” \
“–with-collation=gbk_chinese_ci” \
“–with-extra-charsets=all” \
“–with-pthread” \
“–enable-static” \
“–enable-thread-safe-client” \
“–with-client-ldflags=-all-static” \
“–with-mysqld-ldflags=-all-static” \
“–enable-assembler” \
“–without-isam” \
“–without-innodb” \
“–without-ndb-debug”
make make install
useradd mysql -d /data/mysql -s /sbin/nologin
/usr/local/mysql/bin/mysql_install_db –user=mysql
cd /usr/local/mysql
chown -R root:mysql .
chown -R mysql /data/mysql/data
cp share/mysql/my-huge.cnf /etc/my.cnf
cp share/mysql/mysql.server /etc/rc.d/init.d/mysqld
chmod 755 /etc/rc.d/init.d/mysqld
chkconfig –add mysqld
/etc/rc.d/init.d/mysqld start

cd /usr/local/mysql/bin
for i in *; do ln -s /usr/local/mysql/bin/$i /usr/bin/$i; done

cd /usr/local/src

mysqladmin -u root password chenshake


#安裝Apache

tar zxvf httpd-2.2.8.tar.gz
cd httpd-2.2.8
./configure \
“–prefix=/usr/local/apache2″ \
“–with-included-apr” \
“–enable-so” \
“–enable-deflate=shared” \
“–enable-expires=shared” \
“–enable-rewrite=shared” \
“–enable-static-support” \
“–disable-userdir”
make
make install
cd ..

#安裝PHP

tar jxvf php-5.2.6.tar.bz2
cd php-5.2.6
./configure \
“–prefix=/usr/local/php” \
“–with-apxs2=/usr/local/apache2/bin/apxs” \
“–with-config-file-path=/usr/local/php/etc” \
“–with-mysql=/usr/local/mysql” \
“–with-gd=/usr/local/gd2″ \
“–with-libxml-dir=/usr” \
“–with-jpeg-dir” \
“–with-png-dir” \
“–with-freetype-dir” \
“–with-zlib ” \
–with-iconv-dir=/usr/local \
“–with-openssl=/usr/local/ssl” \
“–with-curl ” \
“–with-curlwrappers ” \
“–with-mcrypt” \
“–with-imap=/usr/local/imap-2007b” \
“–with-kerberos” \
“–with-bz2″ \
“–enable-soap” \
“–enable-gd-native-ttf” \
“–enable-ftp” \
“–enable-mbstring” \
“–enable-exif” \
“–disable-ipv6″ \
“–disable-cgi” \
“–disable-cli”

make
make install
mkdir /usr/local/php/etc
cp php.ini-dist /usr/local/php/etc/php.ini
cd ..

#安裝Zend Optimizer (安裝Zend Optimizer過(guò)程的最后不要選擇重啟Apache。)

tar xzvf ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
cd ZendOptimizer-3.3.3-linux-glibc23-i386
./install.sh


##########################################################################

sh install.sh


腳本到這里為止,因?yàn)閦end的設(shè)置,我沒(méi)法自動(dòng)完成,只能你手動(dòng)設(shè)置,如果誰(shuí)知道怎么做,麻煩指導(dǎo)指導(dǎo),注意php.ini 的位置 /usr/local/php/etc/

#設(shè)置session的存放位置和修改php上次文件的大小,最大文件25m

cp /usr/local/Zend/etc/php.ini /usr/local/Zend/etc/php.ini.save
sed -i -e ‘991 s/;//’ /usr/local/Zend/etc/php.ini
sed -i ’s/post_max_size = 8M/ post_max_size = 30M/g’ /usr/local/Zend/etc/php.ini
sed -i ’s/upload_max_filesize = 2M/ upload_max_filesize = 25M/g’ /usr/local/Zend/etc/php.ini
cd /usr/local/src

六:配置apache PHP

創(chuàng)建apache的啟動(dòng)腳本,apache編譯包里帶的那個(gè)啟動(dòng)腳本,有一個(gè)缺點(diǎn),啟動(dòng)和停止沒(méi)有任何提示,所以就用下面這個(gè),比較方便。

vi /etc/init.d/httpd

###################################

#!/bin/bash
#
# Startup script for the Apache Web Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server. It is used to serve \
# HTML files and CGI.
# processname: httpd
# pidfile: /usr/local/apache2/logs/httpd.pid
# config: /usr/local/apache2/conf/httpd.conf

# Source function library.
. /etc/rc.d/init.d/functions

if [ -f /etc/sysconfig/httpd ]; then
. /etc/sysconfig/httpd
fi

# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=”"

# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache2/bin/apachectl
httpd=/usr/local/apache2/bin/httpd
pid=/usr/local/apache2/logs/httpd.pid
prog=httpd
RETVAL=0




# The semantics of these two functions differ from the way apachectl does
# things — attempting to start while running is a failure, and shutdown
# when not running is also a failure. So we just do it the way init scripts
# are expected to behave here.
start() {
echo -n $”Starting $prog: “
daemon $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] touch /var/lock/subsys/httpd
return $RETVAL
}
stop() {
echo -n $”Stopping $prog: “
killproc $httpd
RETVAL=$?
echo
[ $RETVAL = 0 ] rm -f /var/lock/subsys/httpd $pid
}
reload() {
echo -n $”Reloading $prog: “
killproc $httpd -HUP
RETVAL=$?
echo
}

# See how we were called.
case “$1″ in
start)
start
;;
stop)
stop
;;
status)
status $httpd
RETVAL=$?
;;
restart)
stop
start
;;
condrestart)
if [ -f $pid ] ; then
stop
start
fi
;;
reload)
reload
;;
graceful|help|configtest|fullstatus)
$apachectl $@
RETVAL=$?
;;
*)
echo $”Usage: $prog {start|stop|restart|condrestart|reload|status”
echo $”|fullstatus|graceful|help|configtest}”
exit 1
esac

exit $RETVAL

###########################


設(shè)置可運(yùn)行和開(kāi)機(jī)啟動(dòng)

chmod +x /etc/rc.d/init.d/httpd
chkconfig –add httpd
chkconfig –level 3 httpd on


配置apache

groupadd www -g 48
useradd -u 48 -g www www
mkdir -p /data/www/wwwroot/linux.com
mkdir -p /data/www/wwwroot/test.com
mkdir -p /data/logs
chmod +w /data/www/wwwroot
chown -R www:www /data/www/wwwroot
cp /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.save


編輯httpd.conf

sed -i -e ‘121 s/^/#/’ -i -e ‘122 s/^/#/’ /usr/local/apache2/conf/httpd.conf
sed -i -e “s/User daemon/User www/” -i -e “s/Group daemon/Group www/” /usr/local/apache2/conf/httpd.conf
sed -i ’s/DirectoryIndex index.html/ DirectoryIndex index.php index.html index.htm/g’ /usr/local/apache2/conf/httpd.conf
sed -i -e ‘101 s/^#//g’ -i -e ‘374 s/^#//g’ -i -e ‘389 s/^#//g’ -i -e ‘392 s/^#//g’ -i -e ‘401 s/^#//g’ /usr/local/apache2/conf/httpd.conf
sed -i “58 s/^/AddType application\/x-httpd-php .php/” /usr/local/apache2/conf/httpd.conf


編輯php.ini

cp /usr/local/php/etc/php.ini /usr/local/php/etc/php.ini.save
sed -i ‘205 s#;open_basedir =#open_basedir = /data/www/wwwroot:/tmp#g’ /usr/local/php/etc/php.ini
sed -i ‘/expose_php/s/On/Off/’ /usr/local/php/etc/php.ini
sed -i ‘/display_errors/s/On/Off/’ /usr/local/php/etc/php.ini

配置虛擬主機(jī)

備份相關(guān)配置文件

mv /usr/local/apache2/conf/extra/httpd-vhosts.conf /usr/local/apache2/conf/extra/httpd-vhosts.conf.save
mv /usr/local/apache2/conf/extra/httpd-default.conf /usr/local/apache2/conf/extra/httpd-default.conf.save
mv /usr/local/apache2/conf/extra/httpd-mpm.conf /usr/local/apache2/conf/extra/httpd-mpm.conf.save


創(chuàng)建3個(gè)apache相關(guān)的文件

vi /usr/local/apache2/conf/extra/httpd-vhosts.conf

NameVirtualHost *:80


ServerAdmin shake.chen@gmail.com
DocumentRoot “/data/www/wwwroot/test.com”
ServerName test.com
ServerAlias bbs.test.com
ErrorLog “logs/test.com-error_log”
CustomLog “|/usr/local/cronolog/sbin/cronolog /data/logs/access_www.test.com.%Y%m%d” combined



ServerAdmin shake.chen@gmail.com
DocumentRoot “/data/www/wwwroot/linux.com”
ServerName linux.com
ServerAlias bbs.linux.com
ErrorLog “logs/linux.com-error_log”
CustomLog “|/usr/local/cronolog/sbin/cronolog /data/logs/access_www.linux.com.%Y%m%d” combined


vi /usr/local/apache2/conf/extra/httpd-default.conf

Timeout 15
KeepAlive Off
MaxKeepAliveRequests 50
KeepAliveTimeout 5
UseCanonicalName Off
AccessFileName .htaccess
ServerTokens Prod
ServerSignature Off
HostnameLookups Off

vi /usr/local/apache2/conf/extra/httpd-mpm.conf


ServerLimit 2000
StartServers 10
MinSpareServers 10
MaxSpareServers 15
MaxClients 2000
MaxRequestsPerChild 10000


七:測(cè)試

修改本地hosts文件
192.168.1.200 www.test.com

啟動(dòng)Apache

service httpd start

復(fù)制代碼

測(cè)試php

cd /data/www/wwwroot/test.com
vi info.php


phpinfo()

?>


這個(gè)時(shí)候 http://192.168.1.200/info.php 或者 http://www.test.com/info.php 就可以看到php的信息。

安裝phpadmin

cd /usr/local/src
tar zxvf phpMyAdmin-2.11.8.1-all-languages-utf-8-only.tar.gz
cp -rf phpMyAdmin-2.11.8.1-all-languages-utf-8-only /data/www/wwwroot/test.com/phpmyadmin
cd /data/www/wwwroot/test.com/phpmyadmin

cp config.sample.inc.php config.inc.php

sed -i -e “/^\$cfg\['blowfish_secret'\]/{ s@”;@’88888888888888888′;@; }” config.inc.php


這個(gè)時(shí)候,你就可以通過(guò) http://192.168.1.200/phpmyadmin 或者 http://www.test.com/phpmyadmin來(lái)進(jìn)行數(shù)據(jù)庫(kù)管理, 我上面已經(jīng)給mysql設(shè)置的密碼。

user:root
password:chenshake

安裝sugarcrm

sugarcrm的郵件模塊需要用到imap,ssl,所以我編譯的時(shí)候,需要吧imap,curl模塊編譯進(jìn)去.

cd /usr/local/src
unzip SugarCE-5.1.0.zip
mv SugarCE-Full-5.1.0/ /data/www/wwwroot/test.com/sugarcrm
chmod -R 777 /data/www/wwwroot/test.com/sugarcrm/

與30萬(wàn)Linux愛(ài)好者討論問(wèn)題!

【已有6位網(wǎng)友發(fā)表了看法】 【打印】 【關(guān)閉】


相關(guān)評(píng)論
作者: isosdw 發(fā)布日期: 2009-7-29
大同小異
作者: baizx 發(fā)布日期: 2009-7-29
請(qǐng) 教我實(shí)質(zhì)的 內(nèi)容 比如 如何如何改 哪里哪里應(yīng)該變動(dòng)~~~謝謝
作者: baizx 發(fā)布日期: 2009-8-05
呃 轉(zhuǎn)個(gè) 5.3的最近找到的

CentOS 5 全功能WWW服務(wù)器搭建全教程 V3.0
一、基本系統(tǒng)安裝
1、下載CentOS 5
我是下載的DVD版本,大家也可以下載服務(wù)器CD安裝版本,其實(shí)都差不多。大家可以到這兒下載,速度很快的。
http://ftp.iasi.roedu.net/mirrors/ce...86-bin-DVD.iso
建議在windows下用BT或迅雷下載,速度會(huì)快很多。
下載后刻錄成光盤(pán)。我建議你刻錄DVD啦,如果是菜鳥(niǎo),把圖形界面也裝上,可以在圖形界面進(jìn)行學(xué)習(xí),當(dāng)然強(qiáng)烈不建議在服務(wù)器上裝桌面。
Centos 5系列任何一個(gè)版本就行了,安裝后可以通過(guò)yum upgrade直接更新為最新版本。

2、安裝CentOS 5
作為服務(wù)器,不安裝不需要的組件,所以在選擇組件的時(shí)候,除了選擇FTP SERVER外取消所有組件的選擇。也不要選web服務(wù)器。因?yàn)槲覀兒竺嬉謩?dòng)編譯安裝。
系統(tǒng)約定RPM包和源碼包存放位置
RPM包和源碼包存放位置 /usr/local/src
源碼包編譯安裝位置(prefix) /usr/local/xxx
腳本以及維護(hù)程序存放位置 /usr/local/sbin
MySQL 數(shù)據(jù)庫(kù)位置 /var/lib/mysql
Apache 網(wǎng)站根目錄 /usr/local/apache2/htdocs
Apache 虛擬主機(jī)日志根目錄 /data/logs/www
yum RPM包信息文件 /etc/yum.list

3、系統(tǒng)環(huán)境部署及調(diào)整
(1)檢查系統(tǒng)是否正常
# more /var/log/messages //檢查有無(wú)系統(tǒng)內(nèi)核級(jí)錯(cuò)誤信息
# dmesg //檢查硬件設(shè)備是否有錯(cuò)誤信息
# ifconfig //檢查網(wǎng)卡設(shè)置是否正確
# ping www.163.com // 檢查網(wǎng)絡(luò)是否正常
(2)關(guān)閉不需要的服務(wù)
# export LANG='en_US' //設(shè)置語(yǔ)言
# setup //選擇啟動(dòng)的服務(wù)
進(jìn)入system service 選項(xiàng)。
以space 鍵選定所需服務(wù)。
以下僅列出需要啟動(dòng)的服務(wù),未列出的服務(wù)一律關(guān)閉:
crond
irqbalance 僅當(dāng)服務(wù)器CPU為S.M.P架構(gòu)或支持雙核心、HT技術(shù)時(shí),才需開(kāi)啟,否則關(guān)閉。
microcode_ctl
network
iptables
vsftpd
sshd
syslog
yum-updatesd
(3)修改/etc/yum.repos.d/CentOS-Base.repo,將鏡象站點(diǎn)地址改為在中國(guó)的鏡象站點(diǎn)地址。不然我們通過(guò)yum安裝軟件速度會(huì)極慢。修改如下:
# CentOS-Base.repo
#
# This file uses a new mirrorlist system developed by Lance Davis for CentOS.
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.shlug.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
protect=1
#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirrors.shlug.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
protect=1
#packages used/produced in the build but not released
[addons]
name=CentOS-$releasever - Addons
baseurl=http://mirrors.shlug.org/centos/$releasever/addons/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
protect=0
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirrors.shlug.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
protect=0
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://mirrors.shlug.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
protect=1
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
baseurl=http://mirrors.shlug.org/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
protect=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
保存文件。
(4)更新系統(tǒng),我們使用yum,
運(yùn)行:
# yum upgrade
建議更新所有列出的程序,包括內(nèi)核,rhel 5.X的穩(wěn)定性還要繼續(xù)努力呢。
(5)定時(shí)校正服務(wù)器時(shí)間
# yum install –y ntp
# crontab -e
0 23 * * * /usr/sbin/ntpdate 210.72.145.44
以上命令設(shè)置好后存盤(pán)。
# /sbin/service crond reload
重載計(jì)劃任務(wù)配置
您的機(jī)器將在每天的23:00根據(jù)中國(guó)國(guó)家授時(shí)中心的NTP服務(wù)器時(shí)間自動(dòng)校準(zhǔn)時(shí)間。
(6)FTP服務(wù)器的配置
vi /etc/vsftpd/vsftpd.conf
把a(bǔ)nonymous_enable=YES
修改為anonymous_enable=No不允許匿名登錄。
添加兩句
chroot_local_user=yes
listen_port=2121
將用戶鎖定在主目錄,并將FTP監(jiān)聽(tīng)端口修改為2121
把ftpd_banner=*前的注釋去掉。后面改成你的歡迎信息(這樣設(shè)置可以避免顯示ftp服務(wù)器的版本信息)
然后保存,service vsftpd start就可以了。
這時(shí)應(yīng)當(dāng)添加用戶,因?yàn)閞oot默認(rèn)不能通過(guò)FTP方式登錄,也不安全。
groupadd upload
useradd upload -g upload -d /usr/local/apache2/htdocs/ -M
如果FTP登錄時(shí)出現(xiàn)
ftp服務(wù)器連接失敗,錯(cuò)誤提示:
500 OOPS: cannot change directory:/home/*******
500 OOPS: child died
解決方法:
# setsebool ftpd_disable_trans 1
# service vsftpd restart
這樣對(duì)于我們上傳一些文件到系統(tǒng)中很方便。
大家有興趣的可以看下這篇文章對(duì)vsftpd進(jìn)行一個(gè)比較詳細(xì)的了解
http://blog.chinaunix.net/u/10047/showart_198837.html
4、重新啟動(dòng)系統(tǒng)
# init 6
此時(shí)系統(tǒng)啟動(dòng)成功,可以刪除老的內(nèi)核

二、安裝mysql, apache, php, Zend Optimizer等基本環(huán)境
5. 使用 yum 程序安裝所需開(kāi)發(fā)包(以下為標(biāo)準(zhǔn)的rpm包名稱(chēng))
# yum install gcc gcc-c++ gcc-g77 flex bison autoconf automake bzip2-devel zlib-devel ncurses-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel pam-devel openssl-devel libxml2-devel gettext-devel pcre-devel
#這里我們將編譯GD所必須的一些小軟件比如libpng,libtiff,freetype,libjpeg,gettext-devel等先用RPM 的方式一并安裝好,避免手動(dòng)編譯浪費(fèi)時(shí)間,同時(shí)也能避免很多錯(cuò)誤,這幾個(gè)小軟件的編譯很麻煩。這幾個(gè)小軟件編譯錯(cuò)誤了,GD當(dāng)然安裝不了,php5的編譯當(dāng)然也沒(méi)戲了。所以我們抓大放小,對(duì)這些小牛鬼蛇神采取快速簡(jiǎn)潔的方式進(jìn)行安裝。并且對(duì)服務(wù)器的性能也不能產(chǎn)生什么影響。
另外libxml2系統(tǒng)已經(jīng)默認(rèn)安裝了,所以我們不需要手工編譯了,直接安裝它的開(kāi)發(fā)包就行了。
6. 源碼編譯安裝所需包 (Source)
(1) GD2
# cd /usr/local/src
# wget http://www.libgd.org/releases/gd-2.0.35.tar.gz
# tar xzvf gd-2.0.35.tar.gz
# cd gd-2.0.35
# yum install libtool libtool-ltdl
# aclocal
# CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer" ./configure --prefix=/usr/local/gd2 --mandir=/usr/share/man
// 注意,CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer" 這個(gè)環(huán)境參數(shù)只針對(duì)intel P4 芯片,如果你的CPU是AMD的,注意不能使用。請(qǐng)查看相應(yīng)的編譯優(yōu)化參數(shù)。否則程序會(huì)無(wú)法編譯,即使編譯成功也無(wú)法運(yùn)行,嘿嘿。
關(guān)于其他CPU的優(yōu)化參見(jiàn)我的BLOG的一篇轉(zhuǎn)貼:
http://www.cnprint.org/bbs/blogs/1/blog43.html
//./configure 配置。
# make //make 是用來(lái)編譯的,它從 Makefile 中讀取指令,然后編譯。
# make install //make install 是用來(lái)安裝的,它也從 Makefile 中讀取指令,安裝到指定的位置。
(2) Apache 日志截?cái)喑绦?
# cd /usr/local/src
# wget http://cronolog.org/patches/cronolog-1.7.0-beta.tar.gz
# tar cronolog-1.7.0-beta.tar.gz
# cd cronolog-1.7.0-beta
#CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer" ./configure --prefix=/usr/local/cronolog make make install

7、編譯mysql 5.0.50
mysql 5.0.50是企業(yè)版本,貌似雙數(shù)版本都是企業(yè)版本了。個(gè)人覺(jué)得代碼質(zhì)量要比社區(qū)版本要好一些。大家可以下載,免費(fèi)使用。并不需要向mysql公司交錢(qián)。
#cd /usr/local/src
# wget http://mirror.provenscaling.com/mysq...-5.0.50.tar.gz
# tar xzvf mysql-5.0.50.tar.gz
# cd mysql-5.0.50
修改mysql 客戶端最大連接數(shù), 默認(rèn)的只有100,遠(yuǎn)遠(yuǎn)達(dá)不到我們的要求。
# vi sql/mysqld.cc
搜索找到下面一行:
{"max_connections", OPT_MAX_CONNECTIONS,
"The number of simultaneous clients allowed.", (gptr*) max_connections,
(gptr*) max_connections, 0, GET_ULONG, REQUIRED_ARG, 100, 1, 16384, 0, 1,
0},
將其中的100改為1500, 當(dāng)然小點(diǎn)也可以,根據(jù)你的需要來(lái),不建議改的太大。
{"max_connections", OPT_MAX_CONNECTIONS,
"The number of simultaneous clients allowed.", (gptr*) max_connections,
(gptr*) max_connections, 0, GET_ULONG, REQUIRED_ARG, 1500, 1, 16384, 0, 1,
0},
保存。
# CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer" ./configure --prefix=/usr/local/mysql --localstatedir=/var/lib/mysql --with-comment=Source --with-server-suffix=-enterprise-gpl --with-mysqld-user=mysql --without-debug --with-big-tables --with-charset=utf8 --with-collation=utf8_general_ci --with-extra-charsets=gbk,latin1 --with-pthread --enable-static --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --enable-assembler --without-innodb --without-ndb-debug --without-isam --enable-local-infile --with-readline --with-raid
配置成功會(huì)提示:
MySQL has a Web site at http://www.mysql.com/ which carries details on the
latest release, upcoming features, and other information to make your
work or play with MySQL more productive. There you can also find
information about mailing lists for MySQL discussion.
Remember to check the platform specific part of the reference manual for
hints about installing MySQL on your platform. Also have a look at the
files in the Docs directory.
Thank you for choosing MySQL!
# make
編譯的時(shí)間可能會(huì)比較長(zhǎng),畢竟優(yōu)化的比較厲害。
# make install
編譯安裝完成后執(zhí)行后續(xù)操作:
# useradd mysql //添加 mysql 用戶
# cd /usr/local/mysql
# bin/mysql_install_db --user=mysql
# chown -R root:mysql . //設(shè)置權(quán)限,注意后面有一個(gè) "."
# chown -R mysql /var/lib/mysql //設(shè)置 mysql 目錄權(quán)限
# chgrp -R mysql . //注意后面有一個(gè) "."
# cp share/mysql/my-medium.cnf /etc/my.cnf
# cp share/mysql/mysql.server /etc/rc.d/init.d/mysqld //開(kāi)機(jī)自動(dòng)啟動(dòng) mysql。
# chmod 755 /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
#添加LIB PATH
echo "/usr/local/mysql/lib" >> /etc/ld.so.conf ldconfig
vi /etc/my.cnf
修改 MySQL 配置,增加部分優(yōu)化參數(shù),如下:
[mysqld]
ft_min_word_len=2
運(yùn)行以下命令即可啟動(dòng) MySQL 服務(wù)器:
# /etc/rc.d/init.d/mysqld start //啟動(dòng) MySQL
# bin/mysqladmin -u root password "password_for_root"
# service mysqld stop //關(guān)閉 MySQL

8. 編譯安裝 Apache
# cd /usr/local/src
# wget http://www.ip97.com/apache.org/httpd/httpd-2.2.6.tar.gz
# tar zxvf httpd-2.2.6.tar.gz
# cd httpd-2.2.6
先依次安裝apr和apr-util
# cd srclib/apr
# CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer" ./configure --prefix=/usr/local/apr --enable-threads --enable-other-child --enable-static
# make make install
# cd ../apr-util
# CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer" ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/ --with-mysql=/usr/local/mysql
# make make install
cd /usr/local/src/httpd-2.2.6
# CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer" ./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --with-mysql=/usr/local/mysql --enable-cache --enable-file-cache --enable-mem-cache --enable-disk-cache --enable-static-support --enable-static-htpasswd --enable-static-htdigest --enable-static-rotatelogs --enable-static-logresolve --enable-static-htdbm --enable-static-ab --enable-static-checkgid --disable-cgid --disable-cgi --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --enable-ssl --with-ssl=/usr/include/openssl --with-pcre
# make
# make install
注解:
./configure //配置源代碼樹(shù)
--prefix=/usr/local/apache2 //體系無(wú)關(guān)文件的頂級(jí)安裝目錄PREFIX ,也就Apache的安裝目錄。
--enable-module=so //打開(kāi) so 模塊,so 模塊是用來(lái)提 DSO 支持的 apache 核心模塊
--enable-mods-shared=all //編譯全部的模板,對(duì)于不需要我們可以在httpd.conf去掉。
--enable-cache //支持緩存
--enable-file-cache //支持文件緩存
--enable-mem-cache //支持記憶緩存
--enable-disk-cache //支持磁盤(pán)緩存
--enable-static-support //支持靜態(tài)連接(默認(rèn)為動(dòng)態(tài)連接)
--enable-static-htpasswd //使用靜態(tài)連接編譯 htpasswd - 管理用于基本認(rèn)證的用戶文件
--enable-static-htdigest //使用靜態(tài)連接編譯 htdigest - 管理用于摘要認(rèn)證的用戶文件
--enable-static-rotatelogs //使用靜態(tài)連接編譯 rotatelogs - 滾動(dòng) Apache 日志的管道日志程序
--enable-static-logresolve //使用靜態(tài)連接編譯 logresolve - 解析 Apache 日志中的IP地址為主機(jī)名
--enable-static-htdbm //使用靜態(tài)連接編譯 htdbm - 操作 DBM 密碼數(shù)據(jù)庫(kù)
--enable-static-ab //使用靜態(tài)連接編譯 ab - Apache HTTP 服務(wù)器性能測(cè)試工具
--enable-static-checkgid //使用靜態(tài)連接編譯 checkgid
--disable-cgid //禁止用一個(gè)外部 CGI 守護(hù)進(jìn)程執(zhí)行CGI腳本
--disable-cgi //禁止編譯 CGI 版本的 PHP
--enable-ssl // 編譯 ssl模塊。
我們不再使用worker模式編譯apache,worker模式和php貌似有一些不協(xié)調(diào)不穩(wěn)定之處。所以使用了默認(rèn)的perfork模式。
將apache設(shè)置成開(kāi)機(jī)自啟動(dòng):
在/etc/rc.d/rc.local文件中加入一行
/usr/local/apache2/bin/apachectl start
這樣每次重新啟動(dòng)系統(tǒng)以后,apache也會(huì)隨系統(tǒng)一起啟動(dòng).
或者將apache安裝為系統(tǒng)服務(wù)
# cp /usr/local/apache2/bin/apachectl /etc/rc.d/init.d/httpd
然后 vi /etc/rc.d/init.d/httpd 添加(#!/bin/sh下面)
# chkconfig: 2345 50 90
# description: Activates/Deactivates Apache Web Server
最后,運(yùn)行chkconfig把Apache添加到系統(tǒng)的啟動(dòng)服務(wù)組里面:
# chkconfig --add httpd
# chkconfig httpd on

9、編譯php 5.2.5
Suhosin是php增強(qiáng)型安全補(bǔ)丁,可以編譯到靜態(tài)內(nèi)核中,也可以編譯成php動(dòng)態(tài)擴(kuò)展。我個(gè)人強(qiáng)烈你建議安裝成靜態(tài)內(nèi)核。Suhosin已經(jīng)進(jìn)入 Gentoo Linux、FreeBSD、OpenSuSE Linux、Mandriva Linux、Debian Linux官方包。下面的以下先說(shuō)靜態(tài)安裝步驟。當(dāng)然你也可以在安裝php后將它編譯成php的動(dòng)態(tài)擴(kuò)展。
# cd /usr/local/src
# wget http://cn.php.net/get/php-5.2.5.tar.gz/from/this/mirror
wget http://www.hardened-php.net/suhosin/...9.6.2.patch.gz
# tar zxvf php-5.2.5.tar.gz
# gunzip suhosin-patch-5.2.5-0.9.6.2.patch.gz
# cd php-5.2.5
# patch -p 1 -i ../suhosin-patch-5.2.5-0.9.6.2.patch
# ./buildconf --force
# CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer" ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-pear=/usr/share/php --with-zlib-dir --with-bz2 --with-libxml-dir=/usr --with-gd=/usr/local/gd2 --enable-gd-native-ttf --enable-gd-jis-conv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-ttf=shared,/usr --enable-mbstring --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-config-file-path=/etc --with-iconv --disable-ipv6 --enable-static --enable-zend-multibyte --enable-inline-optimization --enable-zend-multibyte --enable-sockets --enable-soap --with-openssl --with-gettext --enable-suhosin
配置成功會(huì)提示:
+--------------------------------------------------------------------+
| License: |
| This software is subject to the PHP License, available in this |
| distribution in the file LICENSE. By continuing this installation |
| process, you are bound by the terms of this license agreement. |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point. |
+--------------------------------------------------------------------+
Thank you for using PHP.
# make
# make test
# make install
# cp php.ini-recommended /etc/php.ini
# echo "/usr/local/php/lib" >> /etc/ld.so.conf ldconfig
在這里也順便說(shuō)一下將suhosin安裝成為php的動(dòng)態(tài)擴(kuò)展的方法。畢竟網(wǎng)上根本不見(jiàn)它的中文安裝教程。
雖然我個(gè)人不推薦這種方式。
wget http://www.hardened-php.net/suhosin/...sin-0.9.20.tgz
tar zxvf suhosin-0.9.20.tgz
cd suhosin-0.9.20
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
會(huì)提示編譯的模塊存在的目錄,記住它。
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20060613/
然后在php.ini中增加一行下列語(yǔ)句。
extension="/usr/local/php/lib/php/extensions/no-debug-zts-20060613/suhosin.so"

10、整合apache 與php
# vi /usr/local/apache2/conf/httpd.conf
在最后一行加上:
AddType application/x-httpd-php .php
查找:(設(shè)置 WEB 默認(rèn)文件)
DirectoryIndex index.html
修改為:
DirectoryIndex index.php index.html index.htm
找到這一段:
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride none
更改為AllowOverride all
允許apache rewrite
保存httpd.conf,退出。
# /usr/local/apache2/bin/apachectl restart //重啟 Apache
這時(shí)會(huì)出現(xiàn)錯(cuò)誤:
/usr/local/apache2/bin/apachectl start
httpd: Syntax error on line 107 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied
不急,我們慢慢解決。
這個(gè)Permission denied問(wèn)題,在centos 5下面一般是Selinux引起的,作為生產(chǎn)用服務(wù)器,我建議你千萬(wàn)別草率地關(guān)掉Selinux一了百了。就像家里的防盜網(wǎng),阻礙了你的貓自由進(jìn)出窗戶,你不能為了貓方便,就把防盜網(wǎng)簡(jiǎn)單拆除是同樣的道理。我看見(jiàn)網(wǎng)上許多人建議把Selinux簡(jiǎn)單關(guān)閉來(lái)解決這個(gè)問(wèn)題,這是削足適履的做法,不值得提倡。
我們可以這樣操作:
# audit2allow -a //查看究竟問(wèn)題出在什么地方

allow unconfined_t usr_t:file execmod;
allow useradd_t var_log_t:file { read write };
然后
# cd /etc/selinux/targeted/modules/
# audit2allow -M local -d
屏幕產(chǎn)生如下提示:
Generating type enforcment file: local.te
Compiling policy
checkmodule -M -m -o local.mod local.te
semodule_package -o local.pp -m local.mod
******************** IMPORTANT ***********************
In order to load this newly created policy package into the kernel,
you are required to execute
semodule -i local.pp
我們運(yùn)行
# semodule -i local.pp
這樣就讓Selinux加載了新的規(guī)則。
更詳細(xì)的內(nèi)容請(qǐng)看我在BLOG上的轉(zhuǎn)貼:
http://www.cnprint.org/bbs/blogs/1/blog48.html
重啟apache
哈哈,apache不會(huì)再報(bào)錯(cuò)了吧?
這樣我保留了selinux的功能,同時(shí)apache也能正常運(yùn)行。
PHP5.1.x開(kāi)始需要設(shè)置時(shí)區(qū),默認(rèn)時(shí)區(qū)與中國(guó)時(shí)區(qū)差8個(gè)小時(shí),這種情況需要在php.ini中這么設(shè)置,找到date.timezone,去掉前面的分號(hào),修改為以下值,大陸地區(qū)可用的值是:Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次為重慶,上海,烏魯木齊)
不然一些php程序的時(shí)間老是和中國(guó)標(biāo)準(zhǔn)時(shí)間相差8個(gè)小時(shí)。我的我的VBB論壇在windows上就是這樣。這兒有亞洲地區(qū)的對(duì)應(yīng)時(shí)區(qū)。
http://www.php.net/manual/en/timezones.asia.php
11、安裝 Zend Optimizer
# cd /usr/local/src
# wget http://downloads.zend.com/optimizer/...21-i386.tar.gz
# tar xzvf ZendOptimizer-3.3.0-linux-glibc21-i386.tar.gz
# ./ZendOptimizer-3.3.0-linux-glibc21-i386/install.sh
按照它的提示一步步進(jìn)行就行了。
總之一句話。如果你的服務(wù)器環(huán)境不需要ZendOptimizer,那么能不安就不安裝這個(gè)。避免和eaccelerator沖突。
12. 查看確認(rèn) L.A.M.P 環(huán)境信息
vi /usr/local/apache2/htdocs/phpinfo.php
新增加下面一行,并保存。

# chmod 755 /usr/local/apache2/htdocs/phpinfo.php
用瀏覽器打開(kāi) http://192.168.9.150/phpinfo.php
檢查 phpinfo中的各項(xiàng)信息是否正確。
測(cè)試php與mysql的連接
# vi /usr/local/apache2/htdocs/testdb.php
增加下面幾行,并保存。
$link=mysql_connect('localhost','root','yourpassword');
if(!$link) echo "fail";
else echo "success";
mysql_close();
?>
# chmod 755 /usr/local/apache2/htdocs/testdb.php
# service mysqld start
用瀏覽器打開(kāi) http://192.168.9.150/testdb.php
如果輸出success就OK了
到這一步,一個(gè)基本的lamp就建立完成了。如果你是初學(xué)者,下面的步驟根據(jù)需要參考,不必全部照做,記住一句話,功能越多,越容易出錯(cuò),在任何領(lǐng)域都是這樣。

三、LAMP環(huán)境加速,包括squid, memcache, eaccelerator
13、安裝eaccelerator
eaccelerator是php的加速軟件,使用后php的執(zhí)行效率會(huì)有較大幅度的提升。目前eaccelerator 0.9.5.2已經(jīng)和ZendOptimizer-3.3.0能夠基本上兼容啦。不過(guò)我個(gè)人覺(jué)得,ZendOptimizer-3.3.0沒(méi)有加速的功能,反而使php運(yùn)行變慢,只是起到了運(yùn)行zend加密文件的作用而已。閑話不多說(shuō)了,大家有興趣的,可以去google下。
# cd /usr/local/src
# wget http://bart.eaccelerator.net/source/....9.5.2.tar.bz2
# tar -jxvf eaccelerator-0.9.5.2.tar.bz2
# cd eaccelerator-0.9.5.2
export PHP_PREFIX="/usr/local/php"
$PHP_PREFIX/bin/phpize //指定一下php的目錄
# CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer" ./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config --with-eaccelerator-shared-memory // 設(shè)置
# make make install
編譯安裝后我們會(huì)看到屏幕提示的eaccelerator.so所在的目錄,php5.2.X系列是在 /usr/local/php/lib/php/extensions/no-debug-zts-20060613/eaccelerator.so,記住這個(gè)路徑,待會(huì)要用到。
修改php.ini(安裝完zend之后,php.ini存放于/usr/local/Zend/etc)
在文件最后,zend之前,注意,這部分內(nèi)容務(wù)必放在zend之前,不然可能會(huì)出現(xiàn)不可預(yù)期的服務(wù)器問(wèn)題。添加下列信息:
[eaccelerator]
extension="/usr/local/php/lib/php/extensions/no-debug-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="32"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
然后
# mkdir /tmp/eaccelerator // 建立目錄
# chmod 0777 /tmp/eaccelerator // 修改目錄屬性
解釋:
zend_extension 是安裝完程序自動(dòng)指示給我們的文件路徑和文件名
如果您使用 thread safe 編譯安裝 PHP,則您必須使用 “zend_extension_ts” 代替 默認(rèn)添加的“zend_extension”。我就必須修改這里,否則不起作用。
zend_extension_ts="/home/php/lib/php/extensions/no-debug-zts-20060613/eaccelerator.so"
實(shí)際上,安裝好eAccelerator以后, /home/php/lib/php/extensions/下會(huì)生成2個(gè)目錄,一個(gè)是no-debug-zts-xxxxxxxx,一個(gè)是no- debug-non-zts-xxxxxxxx,2個(gè)目錄下都有eaccelerator.so文件。
eaccelerator.shm_size="32"
eAccelerator 可以使用的共享內(nèi)存的數(shù)量 (以兆為單位) . "0" 是指操作系統(tǒng)的默認(rèn)值. 默認(rèn)值是 "0".可根據(jù)服務(wù)器的實(shí)際情況來(lái)調(diào)整,16,32,64,128都是可以的。
eaccelerator.cache_dir="/home/php/tmp"
這個(gè)目錄是給磁盤(pán)緩存使用. eAccelerator 在這里儲(chǔ)存預(yù)先編譯好的代碼, 進(jìn)程數(shù)據(jù), 內(nèi)容以及用戶的自定義內(nèi)容. 同樣的數(shù)據(jù)也能被儲(chǔ)存在共享內(nèi)存中 (這樣可以提高訪問(wèn)速度). 默認(rèn)的設(shè)置是 "/tmp/eaccelerator".
eaccelerator.enable="1"
開(kāi)啟或關(guān)閉 eAccelerator。”1″ 為開(kāi)啟,”0″ 為關(guān)閉。默認(rèn)值為 “1″。
eaccelerator.optimizer="1"
啟或關(guān)閉內(nèi)部?jī)?yōu)化器,可以提升代碼執(zhí)行速度。”1″ 為開(kāi)啟,”0″ 為關(guān)閉。默認(rèn)值為 “1″。
eaccelerator.check_mtime="1"
打開(kāi)或者關(guān)閉 PHP 的文件修改檢查. "1" 是指打開(kāi), "0" 是指關(guān)閉. 如果您在修改以后重新編譯 PHP 的文件,那么您應(yīng)當(dāng)設(shè)置為 "1". 默認(rèn)值是 "1".
eaccelerator.debug="0"
開(kāi)啟或關(guān)閉調(diào)試日志記錄。”1″ 為開(kāi)啟,”0″ 為關(guān)閉。默認(rèn)值為 “0″。
eaccelerator.filter=""
判斷哪些 PHP 文件必須緩存。您可以指定緩存和不緩存的文件類(lèi)型(如 “*.php *.phtml”等)
如果參數(shù)以 “!” 開(kāi)頭,則匹配這些參數(shù)的文件被忽略緩存。默認(rèn)值為 “”,即,所有 PHP 文件
都將被緩存。
eaccelerator.shm_max="0"
當(dāng)使用 ” eaccelerator_put() ” 函數(shù)時(shí)禁止其向共享內(nèi)存中存儲(chǔ)過(guò)大的文件。該參數(shù)指定允許
存儲(chǔ)的最大值,單位:字節(jié) (10240, 10K, 1M)。”0″ 為不限制。默認(rèn)值為 “0″。
eaccelerator.shm_ttl="0"
當(dāng) eAccelerator 獲取新腳本的共享內(nèi)存大小失敗時(shí),它將從共享內(nèi)存中刪除所有在
最后 “shm_ttl” 秒內(nèi)無(wú)法存取的腳本緩存。默認(rèn)值為 “0″,即:不從共享內(nèi)春中刪除
任何緩存文件。
eaccelerator.shm_prune_period="0"
當(dāng) eAccelerator 獲取新腳本的共享內(nèi)存大小失敗時(shí),他將試圖從共享內(nèi)存中刪除早于
“shm_prune_period” 秒的緩存腳本。默認(rèn)值為 “0″,即:不從共享內(nèi)春中刪除
任何緩存文件。
eaccelerator.shm_only="0"
允許或禁止將已編譯腳本緩存在磁盤(pán)上。該選項(xiàng)對(duì) session 數(shù)據(jù)和內(nèi)容緩存無(wú)效。默認(rèn)
值為 “0″,即:使用磁盤(pán)和共享內(nèi)存進(jìn)行緩存。
eaccelerator.compress="1"
允許或禁止壓縮內(nèi)容緩存。默認(rèn)值為 “1″,即:允許壓縮。
eaccelerator.compress_level="9"
指定內(nèi)容緩存的壓縮等級(jí)。默認(rèn)值為 “9″,為最高等級(jí)。
最后重新啟動(dòng)apachectl
重啟apache,phpinfo顯示:
This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies
with eAccelerator v0.9.5.2, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
with Zend Extension Manager v1.0.11, Copyright (c) 2003-2006, by Zend Technologies
with Zend Optimizer v3.3.0, Copyright (c) 1998-2006, by Zend Technologies
也會(huì)有eAccelerator的具體信息。

14、安裝Squid,提供web反向代理緩存
Squid是一個(gè)更專(zhuān)業(yè)的代理服務(wù)器,性能和效率會(huì)比Apache的mod_proxy高很多。
Squid Internet Object Cache (Harvest Project的后續(xù)版本) 是美國(guó)政府大力助的一項(xiàng)研究計(jì)劃,其目的為解決網(wǎng)絡(luò)帶寬不足的問(wèn)題,是現(xiàn)在Unix系統(tǒng)上使用者最多功能也最完整的一套軟體。Apache和 Netscape雖附有相關(guān)的Proxy模塊,但因其功能簡(jiǎn)單而不夠普及。有關(guān)squid的詳細(xì)說(shuō)明可到squid網(wǎng)站(http: //www.squid-cache.org)查詢。
反向代理是和前兩種代理完全不同的一種代理服務(wù)。使用它可以降低原始WEB服務(wù)器的負(fù)載。反向代理服務(wù)器承擔(dān)了對(duì)原始WEB服務(wù)器的靜態(tài)頁(yè)面的請(qǐng)求,防止原始服務(wù)器過(guò)載。它位于本地WEB服務(wù)器和Internet之間,處理所有對(duì)WEB服務(wù)器的請(qǐng)求,組織了WEB服務(wù)器和Internet的直接通信。如果互聯(lián)網(wǎng)用戶請(qǐng)求的頁(yè)面在代理服務(wù)器上有緩沖的話,代理服務(wù)器直接將緩沖內(nèi)容發(fā)送給用戶。如果沒(méi)有緩沖則先向WEB服務(wù)器發(fā)出請(qǐng)求,取回?cái)?shù)據(jù),本地緩存后再發(fā)送給用戶。這種方式通過(guò)降低了向WEB服務(wù)器的請(qǐng)求數(shù)從而降低了WEB服務(wù)器的負(fù)載。
下載squid
# wget http://www.squid-cache.org/Versions/...ABLE16.tar.bz2
# tar jxvf squid-2.6.STABLE16.tar.bz2
# cd squid-2.6.STABLE16
# CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer" ./configure --prefix=/usr/local/squid --enable-async-io=500 --with-maxfd=65536 --disable-delay-pools --disable-mem-gen-trace --disable-useragent-log --enable-kill-parent-hack --disable-arp-acl --enable-epoll --disable-ident-lookups --enable-snmp --enable-large-cache-files --with-large-files --with-pthreads --enable-underscore --enable-storeio="aufs,coss,diskd,ufs" --enable-err-language="Simplify_Chinese" --enable-default-err-languages="Simplify_Chinese"
# make make install
如果是2.6的內(nèi)核,才能支持epoll的IO模式,舊版本的內(nèi)核則只能選擇poll或其他模式了;另外,記得帶上支持大文件的選項(xiàng),否則在access log等文件達(dá)到2G的時(shí)候就會(huì)報(bào)錯(cuò)。
設(shè)定 squid 的配置大概如下內(nèi)容:
# mv /usr/local/squid/etc/squid.conf /usr/local/squid/etc/squid.conf.bak
# vi /usr/local/squid/etc/squid.conf
#服務(wù)器IP 192.168.9.150
#監(jiān)聽(tīng)服務(wù)器的80端口,反向代理,支持域名和IP的虛擬主機(jī)
http_port 192.168.9.150:80 vhost vport
#防止天涯盜鏈,轉(zhuǎn)嫁給百度
acl tianya referer_regex -i tianya
http_access deny tianya
deny_info

tianya
#防止百度機(jī)器人爬死服務(wù)器,這將導(dǎo)致百度不能收錄你的網(wǎng)站內(nèi)容,請(qǐng)注意
acl AntiBaidu req_header User-Agent Baiduspider
http_access deny AntiBaidu
#Squid信息設(shè)置
visible_hostname www.cnprint.org
cache_mgr admin@cnprint.org
#squid使用的用戶組和用戶名
cache_effective_user nobody
cache_effective_group nobody
tcp_recv_bufsize 65535 bytes
client_persistent_connections off
server_persistent_connections on
half_closed_clients off
#單臺(tái)使用,不使用該功能
icp_port 0
#設(shè)置Squid所能使用的內(nèi)存共40MB,這個(gè)值因人而異,每次處理緩存大小為40MB,當(dāng)緩存空間使用達(dá)到95%時(shí)新的內(nèi)容將取代舊的而不直接添加到目錄中,直到空間又下降到90%才停止這一活動(dòng)
cache_mem 40 MB
cache_swap_low 90
cache_swap_high 95
#最大緩存文件大小,超過(guò)這個(gè)值則不緩存,這個(gè)值因人而異,maximum_object_size_in_memory #裝入內(nèi)存緩存的文件大小,這個(gè)值對(duì)Squid的性能影響比較大,因?yàn)槟J(rèn)值是8K,超過(guò)8K的文件都不裝入內(nèi)存,而實(shí)際應(yīng)用中很多網(wǎng)頁(yè)和圖片等都超過(guò) 8KB, 個(gè)人認(rèn)為如果緩存不裝入內(nèi)存而存在磁盤(pán)上,性能和apache直接讀取磁盤(pán)文件沒(méi)什么區(qū)別,甚至不如直接訪問(wèn)apache,現(xiàn)在設(shè)置成小于4兆的文件通通裝入內(nèi)存緩存.
maximum_object_size 4096 KB
minimum_object_size 0 KB
maximum_object_size_in_memory 4096 KB
ipcache_size 1024
ipcache_low 90
ipcache_high 95
cache_replacement_policy lru
memory_replacement_policy lru
#磁盤(pán)緩存的類(lèi)型和目錄,大小,一二級(jí)目錄的設(shè)置,這里磁盤(pán)緩存大小是100MB,都是 16*256 級(jí)子目錄
cache_dir ufs /usr/local/squid/var/cache 100 16 256
#這個(gè)設(shè)置是不記錄store.log
cache_store_log none
#設(shè)置默認(rèn)刷新規(guī)則
refresh_pattern -i ^ftp: 1440 20% 10080
refresh_pattern -i ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
#不要相信ETag 因?yàn)橛術(shù)zip
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
#設(shè)置超時(shí)策略
forward_timeout 20 seconds
connect_timeout 15 seconds
read_timeout 3 minutes
request_timeout 1 minutes
persistent_request_timeout 15 seconds
client_lifetime 15 minutes
shutdown_lifetime 5 seconds
negative_ttl 10 seconds
#打開(kāi)emulate_httpd_log選項(xiàng),將使Squid仿照Aapche的日志格式
emulate_httpd_log on
#日志格式combined的設(shè)置
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs % #這里是設(shè)置pid和日志文件的位置,因人而異,同時(shí)日志格式是combined,awstats可以直接調(diào)用分析了
pid_filename /usr/local/squid/var/squid.pid
cache_log /usr/local/squid/var/logs/cache.log
access_log /usr/local/squid/var/logs/access.log combined
#設(shè)置不想緩存的目錄或者文件類(lèi)型
acl all src 0.0.0.0/0.0.0.0
acl QUERY urlpath_regex cgi-bin .php .cgi .avi .wmv .rm .ram .mpg .mpeg .zip .exe
cache deny QUERY
#2.6的反向代理加速配置
#代理到本機(jī)的80端口的服務(wù),僅僅做為原始內(nèi)容服務(wù)器
cache_peer 127.0.0.1 parent 80 0 no-query originserver login=PASS
#錯(cuò)誤文檔
error_directory /usr/local/squid/share/errors/Simplify_Chinese
保存。
mkdir /usr/local/squid/var/cache
chown -R nobody:nobody /usr/local/squid/var/cache
chown -R nobody:nobody /usr/local/squid/var/logs/
chmod 777 /usr/local/squid/var/cache
修改httpd.conf
初始化和啟動(dòng)squid
# /usr/local/squid/sbin/squid -z
# /usr/local/squid/sbin/squid -NCd1
第一條命令是先初始化squid緩存哈希子目錄,只需執(zhí)行一次即可。
最好還編輯/etc/hosts 文件
添加以下內(nèi)容
192.168.9.150 cnprint.org www cnprint.org
這樣免去查詢DNS,速度也快一些。
現(xiàn)在大家肯定急著要打開(kāi)瀏覽器訪問(wèn)你的網(wǎng)站看看效果吧,其實(shí)沒(méi)啥變化,要等到有流量訪問(wèn),squid把文件都裝到內(nèi)存后,效果才明顯??梢杂胻op命令觀察squid的內(nèi)存使用情況或者用
cat /usr/local/squid/var/logs/access.log |grep TCP_MEM_HIT
如果看到很多的TCP_MEM_HIT ,這表明該文件是從內(nèi)存緩存讀取的,squid已經(jīng)起作用了!你再用瀏覽器打開(kāi)該文件,應(yīng)該是快如閃電了。。呵呵,大功告成了!還有其他類(lèi)型的HIT,如 TCP_HIT等等,這些是從磁盤(pán)讀取的,我覺(jué)得加速的意義不大,只不過(guò)緩解了apache的壓力而已。
3. 啟動(dòng)squid:./bin/RunCache
這邊我使用squid附帶的啟動(dòng)腳本來(lái)啟動(dòng)squid,有個(gè)好處就是,如果squid的進(jìn)程死了的話,這個(gè)腳本會(huì)自動(dòng)啟動(dòng)squid,對(duì)于運(yùn)行在線上的服務(wù)器來(lái)說(shuō),這點(diǎn)太重要了。
開(kāi)機(jī)自動(dòng)運(yùn)行squid
修改開(kāi)機(jī)自動(dòng)運(yùn)行文件,將 /usr/local/squid/bin/RunCache 加進(jìn)開(kāi)機(jī)自動(dòng)執(zhí)行的程序中。
因?yàn)榈谝淮问且?root 身份啟動(dòng),所以,/usr/local/squid/var/squid.out 及 /usr/local/squid/var/squid.pid 的擁有者是 root ,這會(huì)造成下列以 nobody 身份啟動(dòng) squid 時(shí),會(huì)有錯(cuò)誤出現(xiàn),所以,必須在第二次由 rc.local 啟動(dòng)前,先行將 squid.out 及 squid.pid 兩個(gè)文件的所有者(owner)改為 nobody,即是
chown nobody:nobody /usr/local/squid/var/squid.out
chown nobody:nobody /usr/local/squid/var/logs/squid.pid
在 /etc/rc.d/rc.local 中加入
/usr/local/squid/bin/RunCache

15、memcache + libevent 安裝
memcached是一個(gè)高性能的分布式的內(nèi)存對(duì)象緩存系統(tǒng),通過(guò)在內(nèi)存里維護(hù)一個(gè)統(tǒng)一的巨大的hash表,它能夠用來(lái)存儲(chǔ)各種格式的數(shù)據(jù),包括圖像、視頻、文件以及數(shù)據(jù)庫(kù)檢索的結(jié)果等。最初為了加速 LiveJournal 訪問(wèn)速度而開(kāi)發(fā)的,后來(lái)被很多大型的網(wǎng)站采用。起初作者編寫(xiě)它可能是為了提高動(dòng)態(tài)網(wǎng)頁(yè)應(yīng)用,為了減輕數(shù)據(jù)庫(kù)檢索的壓力,來(lái)做的這個(gè)緩存系統(tǒng)。它的緩存是一種分布式的,也就是可以允許不同主機(jī)上的多個(gè)用戶同時(shí)訪問(wèn)這個(gè)緩存系統(tǒng),這種方法不僅解決了共享內(nèi)存只能是單機(jī)的弊端,同時(shí)也解決了數(shù)據(jù)庫(kù)檢索的壓力,最大的優(yōu)點(diǎn)是提高了訪問(wèn)獲取數(shù)據(jù)的速度!基于memcached作者對(duì)分布式cache的理解和解決方案。 memcached完全可以用到其他地方比如分布式數(shù)據(jù)庫(kù),分布式計(jì)算等領(lǐng)域。
Memcache是danga.com的一個(gè)項(xiàng)目,最早是為 LiveJournal 服務(wù)的,目前全世界不少人使用這個(gè)緩存項(xiàng)目來(lái)構(gòu)建自己大負(fù)載的網(wǎng)站,來(lái)分擔(dān)數(shù)據(jù)庫(kù)的壓力。(關(guān)于Memcache的更多信息請(qǐng)Google)
Memcache官方網(wǎng)站:http://www.danga.com/memcached
服務(wù)器端主要是安裝memcache服務(wù)器端,目前的最新版本是 memcached-1.2.3。
另外,Memcache用到了libevent這個(gè)庫(kù)用于Socket的處理,所以還需要安裝libevent,libevent的最新版本是libevent-1.3e。(如果你的系統(tǒng)已經(jīng)安裝了libevent,可以不用安裝)
官網(wǎng):http://www.monkey.org/~provos/libevent/
(1)、安裝memcached服務(wù)器端
編譯安裝:
# cd /usr/local/src
# wget http://monkey.org/~provos/libevent-1.3e.tar.gz
# tar zxvf libevent-1.3e.tar.gz
# cd libevent-1.3e
# CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer" ./configure --prefix=/usr/local make make install
# echo "/usr/local/lib" >> /etc/ld.so.conf ldconfig
# cd ../
# wget http://www.danga.com/memcached/dist/...d-1.2.3.tar.gz
# tar zxvf memcached-1.2.3.tar.gz
# cd memcached-1.2.3
# CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer" ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local
# make make install
備注:如果 libevent 不是安裝在 /usr 目錄下,那么需要把 libevent-1.3e.so.1 拷貝/鏈接到 /usr/lib 中,否則 memcached 有可能無(wú)法正常加載。
(2)、安裝php對(duì)memcache支持模塊
安裝php-memcache模塊,這是memcache的php客戶端,php-memcache需要pecl庫(kù)的支持。
# cd /usr/local/src
# wget http://pecl.php.net/get/memcache-2.2.0.tgz
# tar zxvf memcache-2.2.0.tgz
#cd memcache-2.2.0
#export PHP_PREFIX=/usr/local/php
#$PHP_PREFIX/bin/phpize
#CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer" ./configure --enable-memcache --with-zlib-dir --with-php-config=$PHP_PREFIX/bin/php-config
#make make install
修改php.ini
在最末尾增加一行:
extension="/usr/local/php/lib/php/extensions/no-debug-zts-20060613/memcache.so"
運(yùn)行以下命令來(lái)啟動(dòng) memcached:
#/usr/local/memcached/bin/memcached \
-l 192.168.9.139 -d -p 11211 -u nobody -m 128
表示用 daemon 的方式啟動(dòng) memcached,監(jiān)聽(tīng)在 192.168.9.19 的 11211 端口上,運(yùn)行用戶為 nobody,為其分配 128MB 的內(nèi)存。
這時(shí)查看一下進(jìn)程,看memcached啟動(dòng)成功沒(méi)有。
top -U nobody
可以看到
5867 nobody 15 0 2352 684 276 S 0.0 0.1 0:00.00 memcached
說(shuō)明 memcached安裝成功,并正在運(yùn)行。
設(shè)置成開(kāi)機(jī)自動(dòng)運(yùn)行
在 /etc/rc.d/rc.local 中加入
/usr/local/memcached/bin/memcached -l 192.168.9.150 -d -p 11211 -u nobody -m 128

四、附加功能配置, 包括ssl, mysqlhotcopy, phpmyadmin

15、安裝DBI和DBD for mysql

//用于提供perl訪問(wèn)mysql數(shù)據(jù)庫(kù)的接口規(guī)范,請(qǐng)確認(rèn)你已經(jīng)安裝了perl,一般默認(rèn)系統(tǒng)都裝上了。
因?yàn)槲覀円玫絤ysqlhotcopy功能,需要這兩個(gè)小程序的支持。
# wget http://mirrors.xueron.com/CPAN/autho...I-1.601.tar.gz
首先,安裝DBI包:
# tar zxvf DBI-1.061.tar.gz
# cd DBI-1.061
# perl Makefile.PL
# make
# make test
# make install

wget http://search.cpan.org/CPAN/authors/...l-4.005.tar.gz
# tar zxvf DBD-mysql-4.005.tar.gz
# cp /usr/local/mysql/lib/mysql/libmysqlclient.so.15 /usr/lib/
# perl Makefile.PL --libs="-L/usr/local/mysql/lib/mysql -lmysqlclient -L/usr/lib -lz " --cflags=-I/usr/local/mysql/include/mysql --mysql_config=/usr/local/mysql/bin/mysql_config --testhost=127.0.0.1--testsocket=/tmp/mysql.sock --testdb=test --testuser=root --testpassword="youpassword"
# make
# make test
# make instll
測(cè)試執(zhí)行 mysqlhotcopy 並出現(xiàn)如下類(lèi)似錯(cuò)誤訊息
#/usr/local/mysql/bin/mysqlhotcopy mysql /tmp/test -u root -p 'password'
Invalid db.table name 'mysql.mysql`.`activity' at /usr/local/bin/mysqlhotcopy line 855.
Ans:
找到了 [MySQL Bugs: #27303: mysqlhotcopy dies with error Invalid db.table name 'foo.bar`.`baz'] 說(shuō)明將 mysqlhotcopy 文件修改一下后即可順利執(zhí)行 mysqlhotcopy 了
#vi /usr/local/mysql/bin/mysqlhotcopy //在第 835 下新增一行
835 my @dbh_tables = eval { $dbh->tables() };
836 map { s/^.*?\.//o } @dbh_tables; //加入此行
mysql 5.0.50后已經(jīng)修正這個(gè)錯(cuò)誤。

16、配置https
vi /usr/local/apache2/conf/httpd.conf
# 監(jiān)聽(tīng)443端口,支持https連接
取消注釋 httpd.conf 中的 Include conf/extra/httpd-ssl.conf
設(shè)置SSL并創(chuàng)建自己的CA
# cd /etc/pki/tls/misc
# ./CA -newca
屏幕上出現(xiàn)如下的提示:CA certificate filename (or enter to create)
這是要求輸入要?jiǎng)?chuàng)建的CA的證書(shū)文件名, 可以直接回車(chē)或輸入證書(shū)文件名。
Making CA certificate ...
Generating a 1024 bit RSA private key
.........++++++
................................++++++
writing new private key to './demoCA/private/./cakey.pem'
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:-
此時(shí)要求輸入和驗(yàn)證CA的私鑰口令、國(guó)家代碼(中國(guó)是CN)、省份、城市或地區(qū)、組織或企業(yè)名稱(chēng)、部門(mén)名稱(chēng)、CA的名稱(chēng)或服務(wù)器的主機(jī)名稱(chēng)、管理員電子郵件地址。
至此,在當(dāng)前目錄下生成了demoCA的目錄,CA的證書(shū)就在該目錄下,文件名為cacert.pem
生成服務(wù)器的證書(shū)請(qǐng)求
# ./CA -newreq
屏幕上出現(xiàn)如下的提示:
Generating a 1024 bit RSA private key
.....................................................++++++
.....++++++
writing new private key to 'newreq.pem'
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:
此時(shí)要求輸入和驗(yàn)證服務(wù)器的私鑰口令、國(guó)家代碼(中國(guó)是CN)、省份、城市或地區(qū)、組織或企業(yè)名稱(chēng)、部門(mén)名稱(chēng)、CA的名稱(chēng)或服務(wù)器的主機(jī)名稱(chēng)、管理員電子郵件地址。
Please enter the following 'extra' attributes
to be sent with your certificaterequest
A challenge password []:
An optional company name []:
.Request (and private key) is in newreq.pem
這是要求輸入服務(wù)器的相關(guān)信息。
此時(shí),在當(dāng)前目錄下生成了一個(gè)名為newreq.pem的文件,包含了要生成服務(wù)器數(shù)字證書(shū)的請(qǐng)求。
簽署證書(shū)
# ./CA -sign
屏幕上出現(xiàn)如下的提示:
Using configuration from /usr/share/ssl/openssl.cnf
Enter PEM pass phrase:
此時(shí)一樣需要輸入CA的私鑰口令、國(guó)家代碼(中國(guó)是CN)、省份、城市或地區(qū)、組織或企業(yè)名稱(chēng)、部門(mén)名稱(chēng)、CA的名稱(chēng)或服務(wù)器的主機(jī)名稱(chēng)、管理員電子郵件地址。
Certificate is to be certified until Nov 19 13:46:19 2002 GMT (365 days)
Sign the certificate? [y/n]:y
這時(shí)顯示證書(shū)請(qǐng)求文件中的各項(xiàng)信息,并詢問(wèn)是否要簽署證書(shū),回答y,進(jìn)行簽署。
1 out of 1 certificate requests certified, commit? [y/n]y
回答y,會(huì)顯示已經(jīng)簽署的證書(shū)的信息,并在當(dāng)前目錄下生成服務(wù)器的證書(shū)文件newcert.pem。
# mkdir /usr/local/apache2/conf/ssl.crt/
# mkdir /usr/local/apache2/conf/ssl.key/
# cp newcert.pem /usr/local/apache2/conf/ssl.crt/server.pem
# cp newreq.pem /usr/local/apache2/conf/ssl.key/server.pem
更改服務(wù)器的證書(shū)文件的相關(guān)配置
# vi /usr/local/apache2/conf/extra/httpd-ssl.conf
查找并修改
# Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that a kill -HUP will prompt again. Keep
# in mind that if you have both an RSA and a DSA certificate you
# can configure both in parallel (to also allow the use of DSA
# ciphers, etc.)
SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.pem
#SSLCertificateFile /usr/local/apache2/conf/server-dsa.crt
# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you've both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/server.pem
#SSLCertificateKeyFile /usr/local/apache2/conf/server-dsa.key
示例文件
在SSL的根目錄中生成一個(gè)index.html,它是如下所示:
<html>
這是SSL示例!
</html>
測(cè)試
假如Web服務(wù)器的DNS名稱(chēng)是www.cnprint.org.
在瀏覽器的URL地址欄里輸入 http://www.cnprint.org/,瀏覽器便會(huì)顯示APACHE安裝時(shí)確省的Test Page.
在瀏覽器的URL地址欄里輸入 https://www.cnprint.org/,注意:是 https 而不是http !
瀏覽器會(huì)提示站點(diǎn)已經(jīng)采用了SSL進(jìn)行數(shù)據(jù)的加密傳輸.由于我們的CA證書(shū)不是瀏覽器缺省的信任的根證書(shū),所以,瀏覽器會(huì)說(shuō)無(wú)法確認(rèn)服務(wù)器的證書(shū)可信。暫時(shí)不管,一直NEXT,最后,瀏覽器會(huì)顯示:這是SSL示例!
可以把CA的證書(shū)放在非SSL的站點(diǎn)上,讓瀏覽器下載并安裝CA證書(shū),并將其設(shè)置成可信任的根證書(shū),便可解決上面的問(wèn)題.8 解除HTTPD起動(dòng)時(shí)的口令輸入。
由于安全的原因,Web服務(wù)器的私鑰是口令加密了的,每次重新起動(dòng)HTTPD或Linux時(shí),都會(huì)要求輸入Web服務(wù)器的私鑰的口令。
如果要解除HTTPD起動(dòng)時(shí)的口令輸入,可以這樣:
# cd /usr/local/apache2/conf/ssl.key/
# cp server.pem server.pem.org
# openssl rsa -in server.pem.org -out server.pem
# chmod 400 server.pem
另外在網(wǎng)上看到一個(gè)方法,我沒(méi)有試。有興趣的可以試下。
創(chuàng)建SSL密碼自動(dòng)應(yīng)答文件,否則每次Apache啟動(dòng)的時(shí)候,都會(huì)要求你輸入SSL的密碼.
創(chuàng)建 /usr/local/apache2/conf/ssl.key/sendsslpwd ,內(nèi)容如下.
#!/bin/bash
SSLpasswd="YOUR PASSPHRASE"
echo $SSLpasswd
chmod 755 /usr/local/apache2/conf/ssl.key/sendsslpwd
此時(shí),Web服務(wù)器的私鑰已經(jīng)沒(méi)有口令加密,一定要確保server.pem文件除root外,任何用戶均無(wú)權(quán)讀取它。

17、安裝phpmyadmin,管理mysql數(shù)據(jù)庫(kù)
# cd /usr/local/apache2/htdocs/
# wget http://nchc.dl.sourceforge.net/sourc...-8-only.tar.gz
# tar zxvf phpMyAdmin-2.11.1-all-languages-utf-8-only.tar.gz
# mv phpMyAdmin-2.11.1-all-languages-utf-8-only phpmyadmin
# cd phpmyadmin/libraries
修改配置文件
# vi config.default.php
找到這幾行進(jìn)行修改:
$cfg['Servers'][$i]['auth_type'] = 'http'; // Authentication method (valid choices: config, http, HTTP, signon or cookie)
$cfg['Servers'][$i]['user'] = 'root'; // MySQL user
$cfg['Servers'][$i]['password'] = 'PASSWORD'; // MySQL password (only needed

五、服務(wù)器安全配置

18、編譯安裝mod_security
mod_security是一個(gè)集入侵檢測(cè)和防御引擎功能的開(kāi)源web應(yīng)用安全程序(或web應(yīng)用程序防火墻)。
它以Apache Web服務(wù)器的模塊方式運(yùn)行, 目標(biāo)是增強(qiáng)web應(yīng)用程序的安全性, 防止web應(yīng)用程序受到已知或未知的攻擊。
# cd /usr/local/src
# wget http://www.modsecurity.org/download/...e_2.1.3.tar.gz
# tar -zxvf modsecurity-apache_2.1.3.tar.gz
# cd modsecurity-apache_2.1.3/apache2
# cat /usr/local/apache2/conf/httpd.conf | grep "ServerRoot" | grep -v "#"
ServerRoot "/usr/local/apache2"
#
#vi Makefile
top_dir = /usr/local/apache2
#
# make
# make install
vi /usr/local/apache2/conf/httpd.conf
加載下列模塊
LoadModule unique_id_module modules/mod_unique_id.so
LoadModule security2_module modules/mod_security2.so
添加一行:
Include conf/modsecurity/*.conf
保存。
cd /usr/local/src/modsecurity-apache_2.1.3/rules
# mkdir /usr/local/apache2/conf/modsecurity
# cp *.conf /usr/local/apache2/conf/modsecurity/
根據(jù)你的需要,You may want to edit and customize modsecurity_crs_10_config.conf.
Additionally you may want to edit modsecurity_crs_30_http_policy.conf which enforces an application specific HTTP protocol usage.
重啟apache

19、Iptables規(guī)則
vi /usr/local/sbin/fw.sh
將以下腳本命令粘貼到 fw.sh 文件中。

#!/bin/bash
# Stop iptables service first
service iptables stop
# Load FTP Kernel modules
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
# Inital chains default policy
/sbin/iptables -F -t filter
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
# Enable Native Network Transfer
/sbin/iptables -A INPUT -i lo -j ACCEPT
# Accept Established Connections
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ICMP Control
/sbin/iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
# WWW Service
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# FTP Service
/sbin/iptables -A INPUT -p tcp --dport 2121 -j ACCEPT
# SSH Service
/sbin/iptables -A INPUT -p tcp --dport 59825 -j ACCEPT
# Anti DDOS
/sbin/iptables -I INPUT -p tcp --syn -m ttl --ttl-eq 117 -j DROP
/sbin/iptables -I INPUT -p tcp --syn -m length --length :40 -j DROP

# chmod 755 /usr/local/sbin/fw.sh
# echo '/usr/local/sbin/fw.sh' >> /etc/rc.d/rc.local
# /usr/local/sbin/fw.sh

20、apachet和 php 優(yōu)化設(shè)置
對(duì)于訪問(wèn)量稍大的站點(diǎn),Apache的這些默認(rèn)配置是無(wú)法滿足需求的,我們?nèi)孕枵{(diào)整Apache的一些參數(shù),使Apache能夠在大訪問(wèn)量環(huán)境下發(fā)揮出更好的性能。以下我們對(duì)Apache配置文件httpd.conf中對(duì)性能影響較大的參數(shù)進(jìn)行一些說(shuō)明。
(1) Timeout 該參數(shù)指定Apache在接收請(qǐng)求或發(fā)送所請(qǐng)求內(nèi)容之前的最長(zhǎng)等待時(shí)間(秒),若超過(guò)該時(shí)間Apache則放棄處理該請(qǐng)求,并釋放連接。該參數(shù)默認(rèn)值為120,推薦設(shè)置為60,對(duì)于訪問(wèn)量較大的網(wǎng)站可以設(shè)置為30。
(2) KeepAlive 該參數(shù)控制Apache是否允許在一個(gè)連接中有多個(gè)請(qǐng)求,默認(rèn)打開(kāi)。但對(duì)于大多數(shù)論壇類(lèi)型站點(diǎn)來(lái)說(shuō),通常設(shè)置為off以關(guān)閉該支持。
(3) MPM - prefork.c 在默認(rèn)情況下Apache使用Prefork(進(jìn)程)工作模式,可以說(shuō)這部分的參數(shù)設(shè)置是對(duì)Apache性能影響的核心和關(guān)鍵。
查看你的apache運(yùn)行的模式:
# /usr/local/apache2/bin/httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
然后用戶可以在配置文檔中找到以下配置段:

StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 15
MaxRequestsPerChild 0

這就是控制Apache進(jìn)程工作的配置段,為了更好的理解上述配置中的各項(xiàng)參數(shù),下面讓我們先了解一下Apache是如何控制進(jìn)程工作的。我們知道,在 Unix系統(tǒng)中,很多服務(wù)(Service)的守護(hù)進(jìn)程(Daemon)在啟動(dòng)時(shí)會(huì)創(chuàng)建一個(gè)進(jìn)程以準(zhǔn)備應(yīng)答可能的連接請(qǐng)求,服務(wù)即進(jìn)入了端口監(jiān)聽(tīng)狀態(tài),當(dāng)一個(gè)來(lái)自客戶端(Client)的請(qǐng)求被發(fā)送至服務(wù)所監(jiān)聽(tīng)的端口時(shí),該服務(wù)進(jìn)程即會(huì)處理該請(qǐng)求,在處理過(guò)程中,該進(jìn)程處于獨(dú)占狀態(tài),也就是說(shuō)如果此時(shí)有其他請(qǐng)求到達(dá),這些請(qǐng)求只能“排隊(duì)”等待當(dāng)前請(qǐng)求處理完成且服務(wù)進(jìn)程釋放。這樣就會(huì)導(dǎo)致越來(lái)越多的請(qǐng)求處于隊(duì)列等待狀態(tài),實(shí)際表現(xiàn)就是該服務(wù)處理能力非常低下。Apache使用Prefork模式很好的解決了這一問(wèn)題。下面我們來(lái)看看Apache實(shí)際上是如何高效率工作的。
當(dāng)Apache啟動(dòng)時(shí),Apache會(huì)啟動(dòng)StartSpareServers個(gè)空閑進(jìn)程同時(shí)準(zhǔn)備接收處理請(qǐng)求,當(dāng)多個(gè)請(qǐng)求到來(lái)時(shí), StarSpareServers進(jìn)行會(huì)越來(lái)越少,當(dāng)空閑進(jìn)程減少到MinSpareServers個(gè)時(shí),Apache為了能夠繼續(xù)有充裕的進(jìn)程處理請(qǐng)求,它會(huì)再啟動(dòng)StartsServers個(gè)進(jìn)程備用,這樣就大大減少了請(qǐng)求隊(duì)列等待的可能,使得服務(wù)效率提高,這也是為什么叫做Pre-fork的原因;讓我們繼續(xù)跟蹤Apache的工作,我們假設(shè)Apache已經(jīng)啟動(dòng)了200個(gè)進(jìn)程來(lái)處理請(qǐng)求,理論上來(lái)說(shuō),此時(shí)Apache一共有205個(gè)進(jìn)程,而過(guò)了一段時(shí)間,假設(shè)有100個(gè)請(qǐng)求都得到了Apache的響應(yīng)和處理,那么此時(shí)這100個(gè)進(jìn)程就被釋放成為空閑進(jìn)程,那么此時(shí)Apache有105個(gè)空閑進(jìn)程。而對(duì)于服務(wù)而言,啟動(dòng)太多的空閑進(jìn)程時(shí)沒(méi)有任何意義的,反而會(huì)降低服務(wù)器的整體性能,那么Apache真的會(huì)有105個(gè)空閑進(jìn)程么?當(dāng)然不會(huì)!實(shí)際上 Apache隨時(shí)在檢查自己,當(dāng)發(fā)現(xiàn)有超過(guò)MaxSpareServers個(gè)空閑進(jìn)程時(shí),則會(huì)自動(dòng)停止關(guān)閉一些進(jìn)程,以保證空閑進(jìn)程不過(guò)過(guò)多。說(shuō)到這里,用戶應(yīng)該對(duì)Apache的工作方式有了一定的了解,如果想獲得更多更詳細(xì)的說(shuō)明請(qǐng)參閱Apache手冊(cè)文檔。
我們還有兩個(gè)參數(shù)沒(méi)有介紹:MaxClients和MaxRequestPerchild;MaxClients指定Apache在同一時(shí)間內(nèi)最多允許有多少客戶端能夠與其連接,如果超過(guò)MaxClients個(gè)連接,客戶端將會(huì)得到一個(gè)“服務(wù)器繁忙”的錯(cuò)誤頁(yè)面。我們看到默認(rèn)情況下MaxClients設(shè)置為15,這對(duì)一些中型站點(diǎn)和大型站點(diǎn)顯然是遠(yuǎn)遠(yuǎn)不夠的!也許您需要同時(shí)允許512個(gè)客戶端連接才能滿足應(yīng)用需求,好吧,那么就讓我們把 MaxClients修改為512,保存httpd.conf并退出,重啟Apache,很遺憾,在重啟過(guò)程當(dāng)中您看到了一些錯(cuò)誤提示,Apache重啟失敗。錯(cuò)誤提示中告訴您MaxClients最大只能設(shè)定為256,相信您一定很失望。不過(guò)不要沮喪,Apache作為世界一流的Web Server一定不會(huì)如此單薄的!在默認(rèn)情況下,MaxClients的確只能設(shè)定為不超過(guò)256的整數(shù),但是,如果您有需要完全可以隨意定制,此時(shí)就需要使用ServerLimit參數(shù)來(lái)配合使用,簡(jiǎn)單的說(shuō)ServerLimit就像是水桶,而MaxClients就像是水,您可以通過(guò)更換更大的水桶(將ServerLimit設(shè)定為一個(gè)較大值)來(lái)容納更多的水(MaxClients),但要注意,MaxClients的設(shè)定數(shù)值是不能大于 ServerLimit的設(shè)定數(shù)值的!
下面讓我們了解一下MaxRequestPerChild參數(shù),該參數(shù)指定一個(gè)連接進(jìn)程中可以有多少個(gè)線程同時(shí)工作。也許這樣解釋過(guò)于專(zhuān)業(yè),那么您只要想想“網(wǎng)絡(luò)螞蟻”、“網(wǎng)際快車(chē)FlashGet”中的“多點(diǎn)同時(shí)下載”即可,該參數(shù)實(shí)際上就是限制最多可以用幾個(gè)“點(diǎn)”。默認(rèn)設(shè)置為0,即為:不限制。但需要注意,如果將該值設(shè)置的過(guò)小會(huì)引起訪問(wèn)問(wèn)題,如果沒(méi)有特殊需要或者訪問(wèn)量壓力并非很大可以保持默認(rèn)值,如果訪問(wèn)量很大則推薦設(shè)置為2048。
好了,解釋了這么多,讓我們看看經(jīng)過(guò)修改后Perfork.c配置段的推薦配置:

StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 1024
MaxClients 768
MaxRequestsPerChild 0

完成了上述對(duì)Apache的調(diào)整,Apache已經(jīng)獲得了較大的性能改善。記住,在修改任何參數(shù)后都需要重啟Apache才能生效的。有關(guān)Apache的優(yōu)化遠(yuǎn)遠(yuǎn)不止這些,有興趣的用戶可以閱讀Apache手冊(cè)文檔或者尋找一些文獻(xiàn)資料學(xué)習(xí)。
2. PHP優(yōu)化對(duì)于PHP的優(yōu)化主要是對(duì)php.ini中的相關(guān)主要參數(shù)進(jìn)行合理調(diào)整和設(shè)置,以下我們就來(lái)看看php.ini中的一些對(duì)性能影響較大的參數(shù)應(yīng)該如何設(shè)置。
# vi /etc/php.ini
(1) PHP函數(shù)禁用找到:
disable_functions =
該選項(xiàng)可以設(shè)置哪些PHP函數(shù)是禁止使用的,PHP中有一些函數(shù)的風(fēng)險(xiǎn)性還是相當(dāng)大的,可以直接執(zhí)行一些系統(tǒng)級(jí)腳本命令,如果允許這些函數(shù)執(zhí)行,當(dāng)PHP程序出現(xiàn)漏洞時(shí),損失是非常嚴(yán)重的!以下我們給出推薦的禁用函數(shù)設(shè)置:
disable_functions = phpinfo,passthru,exec,system,popen,chroot,escapeshellcmd,escapeshellarg,shell_exec,proc_open,proc_get_status
需注意:如果您的服務(wù)器中含有一些系統(tǒng)狀態(tài)檢測(cè)的PHP程序,則不要禁用shell_exec,proc_open,proc_get_status等函數(shù)。
(2) PHP腳本執(zhí)行時(shí)間找到:
max_execution_time = 30
該選項(xiàng)設(shè)定PHP程序的最大執(zhí)行時(shí)間,如果一個(gè)PHP腳本被請(qǐng)求,且該P(yáng)HP腳本在max_execution_time時(shí)間內(nèi)沒(méi)能執(zhí)行完畢,則PHP不再繼續(xù)執(zhí)行,直接給客戶端返回超時(shí)錯(cuò)誤。沒(méi)有特殊需要該選項(xiàng)可保持默認(rèn)設(shè)置30秒,如果您的PHP腳本確實(shí)需要長(zhǎng)執(zhí)行時(shí)間則可以適當(dāng)增大該時(shí)間設(shè)置。
(3) PHP腳本處理內(nèi)存占用找到:
memory_limit = 8M
該選項(xiàng)指定PHP腳本處理所能占用的最大內(nèi)存,默認(rèn)為8MB,如果您的服務(wù)器內(nèi)存為1GB以上,則該選項(xiàng)可以設(shè)置為12MB以獲得更快的PHP腳本處理效率。
(4) PHP全局函數(shù)聲明找到:
register_globals = Off
網(wǎng)絡(luò)上很多關(guān)于PHP設(shè)置的文章都推薦將該選項(xiàng)設(shè)置為On,其實(shí)這是一種及其危險(xiǎn)的設(shè)置方法,很可能引起嚴(yán)重的安全性問(wèn)題。如果沒(méi)有特殊的需要,強(qiáng)烈推薦保留默認(rèn)設(shè)置!
(5) PHP上傳文件大小限制找到:
upload_max_filesize = 2M
該選項(xiàng)設(shè)定PHP所能允許最大上傳文件大小,默認(rèn)為2MB。根據(jù)實(shí)際應(yīng)用需求,可以適當(dāng)增大該設(shè)置。
(6) Session存儲(chǔ)介質(zhì)找到:
session.save_path
如果你的PHP程序使用Session對(duì)話,則可以將Session存儲(chǔ)位置設(shè)置為/dev/shm,/dev/shm是Linux系統(tǒng)獨(dú)有的TMPFS 文件系統(tǒng),是以內(nèi)存為主要存儲(chǔ)方式的文件系統(tǒng),比RAMDISK更優(yōu)秀,因?yàn)榭梢允褂肈ISKSWAP作為補(bǔ)充,而且是系統(tǒng)自帶的功能模塊,不需要另行配置。想想看,從磁盤(pán)IO操作到內(nèi)存操作,速度會(huì)快多少?只是需要注意,存儲(chǔ)在/dev/shm的數(shù)據(jù),在服務(wù)器重啟后會(huì)全部丟失。不過(guò)這對(duì)于 Session來(lái)說(shuō)是無(wú)足輕重的
(7)找到short_open_tag = Off
修改成short_open_tag = On,一些國(guó)內(nèi)的php程序不標(biāo)準(zhǔn),關(guān)閉可能會(huì)出錯(cuò)。

21、mysql優(yōu)化及安全設(shè)置
Mysql的優(yōu)化設(shè)置
打開(kāi)/etc/my.cnf文件,修改以下設(shè)置,如果沒(méi)有,可手動(dòng)添加。調(diào)整設(shè)置時(shí),請(qǐng)量力而行,這與你的服務(wù)器的配置有關(guān),特別是內(nèi)存大小。以下設(shè)置比較適合于1G內(nèi)存的服務(wù)器,但并不絕對(duì)。
#指定索引緩沖區(qū)的大小,它決定索引處理的速度,尤其是索引讀的速度。通過(guò)檢查狀態(tài)值Key_read_requests和Key_reads,可以知道 key_buffer_size設(shè)置是否合理。比例key_reads / key_read_requests應(yīng)該盡可能的低,至少是1:100,1:1000更好(上述狀態(tài)值可以使用show status like 'key_reads'獲得)。key_buffer_size只對(duì)MyISAM表起作用。即使你不使用MyISAM表,但是內(nèi)部的臨時(shí)磁盤(pán)表是 MyISAM表,也要使用該值??梢允褂脵z查狀態(tài)值created_tmp_disk_tables得知詳情。
key_buffer = 384M
#要求MySQL能有的連接數(shù)量。當(dāng)主要MySQL線程在一個(gè)很短時(shí)間內(nèi)得到非常多的連接請(qǐng)求,這就起作用,然后主線程花些時(shí)間(盡管很短)檢查連接并且啟動(dòng)一個(gè)新線程。back_log值指出在MySQL暫時(shí)停止回答新請(qǐng)求之前的短時(shí)間內(nèi)多少個(gè)請(qǐng)求可以被存在堆棧中。只有如果期望在一個(gè)短時(shí)間內(nèi)有很多連接,你需要增加它,換句話說(shuō),這值對(duì)到來(lái)的TCP/IP連接的偵聽(tīng)隊(duì)列的大小。你的操作系統(tǒng)在這個(gè)隊(duì)列大小上有它自己的限制。試圖設(shè)定back_log高于你的操作系統(tǒng)的限制將是無(wú)效的。默認(rèn)數(shù)值是50
back_log = 200
#一個(gè)包的最大尺寸。消息緩沖區(qū)被初始化為net_buffer_length字節(jié),但是可在需要時(shí)增加到max_allowed_packet個(gè)字節(jié)。缺省地,該值太小必能捕捉大的(可能錯(cuò)誤)包。如果你正在使用大的BLOB列,你必須增加該值。它應(yīng)該象你想要使用的最大BLOB的那么大。
max_allowed_packet = 4M
#允許的同時(shí)客戶的數(shù)量。增加該值增加 mysqld要求的文件描述符的數(shù)量。這個(gè)數(shù)字應(yīng)該增加,否則,你將經(jīng)??吹?Too many connections 錯(cuò)誤。 默認(rèn)數(shù)值是100
max_connections = 1024
#指定表高速緩存的大小。每當(dāng)MySQL訪問(wèn)一個(gè)表時(shí),如果在表緩沖區(qū)中還有空間,該表就被打開(kāi)并放入其中,這樣可以更快地訪問(wèn)表內(nèi)容。通過(guò)檢查峰值時(shí)間的狀態(tài)值Open_tables和Opened_tables,可以決定是否需要增加table_cache的值。如果你發(fā)現(xiàn)open_tables等于 table_cache,并且opened_tables在不斷增長(zhǎng),那么你就需要增加table_cache的值了(上述狀態(tài)值可以使用show status like 'Open_tables'獲得)。注意,不能盲目地把table_cache設(shè)置成很大的值。如果設(shè)置得太高,可能會(huì)造成文件描述符不足,從而造成性能不穩(wěn)定或者連接失敗。
table_cache = 512
#每個(gè)線程排序所需的緩沖
sort_buffer_size = 4M
#當(dāng)一個(gè)查詢不斷地掃描某一個(gè)表,MySQL會(huì)為它分配一段內(nèi)存緩沖區(qū)。read_buffer_size變量控制這一緩沖區(qū)的大小。如果你認(rèn)為連續(xù)掃描進(jìn)行得太慢,可以通過(guò)增加該變量值以及內(nèi)存緩沖區(qū)大小提高其性能。
read_buffer_size = 4M
#加速排序操作后的讀數(shù)據(jù),提高讀分類(lèi)行的速度。如果正對(duì)遠(yuǎn)遠(yuǎn)大于可用內(nèi)存的表執(zhí)行GROUP BY或ORDER BY操作,應(yīng)增加read_rnd_buffer_size的值以加速排序操作后面的行讀取。仍然不明白這個(gè)選項(xiàng)的用處……
read_rnd_buffer_size = 8M
#用于REPAIR TABLE。不明白這個(gè)選項(xiàng)的用處,百度上找到的設(shè)置方向也是五花八門(mén),有128M、64M、32M等,折中選一個(gè)。
myisam_sort_buffer_size = 64M
#可以復(fù)用的保存在中的線程的數(shù)量。如果有,新的線程從緩存中取得,當(dāng)斷開(kāi)連接的時(shí)候如果有空間,客戶的線置在緩存中。如果有很多新的線程,為了提高性能可以這個(gè)變量值。通過(guò)比較 Connections 和 Threads_created 狀態(tài)的變量,可以看到這個(gè)變量的作用。
thread_cache_size = 128
#查詢結(jié)果緩存。第一次執(zhí)行某條SELECT語(yǔ)句的時(shí)候,服務(wù)器記住該查詢的文本內(nèi)容和它返回的結(jié)果。服務(wù)器下一次碰到這個(gè)語(yǔ)句的時(shí)候,它不會(huì)再次執(zhí)行該語(yǔ)句。作為代替,它直接從查詢緩存中的得到結(jié)果并把結(jié)果返回給客戶端。
query_cache_size = 32M
#最大并發(fā)線程數(shù),cpu數(shù)量*2
thread_concurrency = 2
#設(shè)置超時(shí)時(shí)間,能避免長(zhǎng)連接
wait_timeout = 120
#關(guān)閉不需要的表類(lèi)型,如果你需要,就不要加上這個(gè)
skip-innodb
skip-bdb
關(guān)于mysql的優(yōu)化設(shè)置及檢查,這篇文章很值得一看 http://tech.itdb.cn/n/200607/27/n20060727_30398.shtml
Mysql的安全設(shè)置
打開(kāi)/etc/my.cnf文件,修改以下設(shè)置,如果沒(méi)有,可手動(dòng)添加。
#取消文件系統(tǒng)的外部鎖
skip-locking
#不進(jìn)行域名反解析,注意由此帶來(lái)的權(quán)限/授權(quán)問(wèn)題
skip-name-resolve
#禁止MySQL中用“LOAD DATA LOCAL INFILE”命令。這個(gè)命令會(huì)利用MySQL把本地文件讀到數(shù)據(jù)庫(kù)中,然后用戶就可以非法獲取敏感信息了。網(wǎng)絡(luò)上流傳的一些攻擊方法中就有用它的,它也是很多新發(fā)現(xiàn)的SQL Injection攻擊利用的手段!
local-infile = 0
#關(guān)閉遠(yuǎn)程連接,即3306端口。這是MySQL的默認(rèn)監(jiān)聽(tīng)端口。由于此處MySQL只服務(wù)于本地腳本,所以不需要遠(yuǎn)程連接。盡管MySQL內(nèi)建的安全機(jī)制很?chē)?yán)格,但監(jiān)聽(tīng)一個(gè)TCP端口仍然是危險(xiǎn)的行為,因?yàn)槿绻鸐ySQL程序本身有問(wèn)題,那么未授權(quán)的訪問(wèn)完全可以繞過(guò)MySQL的內(nèi)建安全機(jī)制。(你必須確定,你是否真的不需要遠(yuǎn)程連接mysql)
skip-networking
修改完my.cnf后,還需要對(duì)mysql的用戶名、帳號(hào)、及默認(rèn)數(shù)據(jù)庫(kù)進(jìn)行調(diào)整
首先先登錄mysql,在終端窗口輸入 /usr/local/mysql/bin/mysql -u root -p
然后會(huì)提示輸入密碼,輸入正確密碼后,會(huì)出現(xiàn)mysql>提示符。
輸入以下命令:
mysql>use mysql;
mysql>update user set user="centos" where user="root"; (將mysql的root用戶名修改成centos,防止root的密碼被暴力破解)
mysql>select Host,User,Password,Select_priv,Grant_priv from user;
mysql>delete from user where user=''; (刪除user用戶)
mysql>delete from user where password=''; (刪除user用戶)
mysql>delete from user where host=''; (刪除user用戶)
mysql>drop database test; (刪除默認(rèn)的test數(shù)據(jù)庫(kù))
mysql>flush privileges; (刷新mysql的緩存,讓以上設(shè)置立即生效)
mysql>quit;
為了使以上優(yōu)化和安全設(shè)置生效,請(qǐng)重啟Mysql服務(wù)或Linux。
關(guān)于Mysql的安全設(shè)置,這篇文章很值得一看
http://www.unixren.com/linux/bencandy.php?fid=21id=459

22、操作系統(tǒng)安全調(diào)整
1、 CentOS或Red Had Enterprise Linux 4 的用戶要首先要打開(kāi)SElinux,方法是修改/etc/selinux/config文件中的SELINUX="" 為enforcing 。它可以保證你的系統(tǒng)不會(huì)非正常的崩潰。有些人認(rèn)為應(yīng)該關(guān)閉,我強(qiáng)烈不推薦,當(dāng)然只是將centos用來(lái)玩玩,不是用于實(shí)際服務(wù)器則無(wú)所謂了。
2、啟用iptables 防火墻,對(duì)增加系統(tǒng)安全有許多好處。設(shè)置好防火墻的規(guī)則。
3、執(zhí)行setup 關(guān)閉那些不需要的服務(wù) ,記住少開(kāi)一個(gè)服務(wù),就少一個(gè)危險(xiǎn)。
4、禁止Control-Alt-Delete 鍵盤(pán)關(guān)閉命令
在"/etc/inittab" 文件中注釋掉下面這行(使用#):
ca::ctrlaltdel:/sbin/shutdown -t3 -r now 
改為:
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now 
為了使這項(xiàng)改動(dòng)起作用,輸入下面這個(gè)命令:
# /sbin/init q
5、給"/etc/rc.d/init.d" 下script文件設(shè)置權(quán)限
給執(zhí)行或關(guān)閉啟動(dòng)時(shí)執(zhí)行的程序的script文件設(shè)置權(quán)限。
# chmod -R 700 /etc/rc.d/init.d/* 
這表示只有root才允許讀、寫(xiě)、執(zhí)行該目錄下的script文件。
6、修改"/etc/host.conf"文件
"/etc/host.conf"說(shuō)明了如何解析地址。編輯"/etc/host.conf"文件(vi /etc/host.conf),加入下面這行:
# Lookup names via DNS first then fall back to /etc/hosts. 
order bind,hosts 
# We have machines with multiple IP addresses. 
multi on 
# Check for IP address spoofing. 
nospoof on 
第一項(xiàng)設(shè)置首先通過(guò)DNS解析IP地址,然后通過(guò)hosts文件解析。第二項(xiàng)設(shè)置檢測(cè)是否"/etc/hosts"文件中的主機(jī)是否擁有多個(gè)IP地址(比如有多個(gè)以太口網(wǎng)卡)。第三項(xiàng)設(shè)置說(shuō)明要注意對(duì)本機(jī)未經(jīng)許可的電子欺騙。
7、使"/etc/services"文件免疫
使"/etc/services"文件免疫,防止未經(jīng)許可的刪除或添加服務(wù):
# chattr +i /etc/services
8.阻止你的系統(tǒng)響應(yīng)任何從外部/內(nèi)部來(lái)的ping請(qǐng)求。
既然沒(méi)有人能ping通你的機(jī)器并收到響應(yīng),你可以大大增強(qiáng)你的站點(diǎn)的安全性。你可以加下面的一行命令到/etc/rc.d/rc.local,以使每次啟動(dòng)后自動(dòng)運(yùn)行。
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
9、對(duì)你的系統(tǒng)上所有的用戶設(shè)置資源限制可以防止DoS類(lèi)型攻擊(denial of service attacks)
如最大進(jìn)程數(shù),內(nèi)存數(shù)量等。例如,對(duì)所有用戶的限制象下面這樣:
vi /etc/security/limits.conf
下面的代碼示例中,所有用戶每個(gè)會(huì)話都限制在 10 MB,并允許同時(shí)有四個(gè)登錄。第三行禁用了每個(gè)人的內(nèi)核轉(zhuǎn)儲(chǔ)。第四行除去了用戶 bin 的所有限制。ftp 允許有 10 個(gè)并發(fā)會(huì)話(對(duì)匿名 ftp 帳號(hào)尤其實(shí)用);managers 組的成員的進(jìn)程數(shù)目限制為 40 個(gè)。developers 有 64 MB 的 memlock 限制,wwwusers 的成員不能創(chuàng)建大于 50 MB 的文件。
清單 3. 設(shè)置配額和限制
* hard rss 10000
* hard maxlogins 4
* hard core 0
bin -
ftp hard maxlogins 10
@managers hard nproc 40
@developers hard memlock 64000
@wwwusers hard fsize 50000
要激活這些限制,您需要在 /etc/pam.d/login 底部添加下面一行: session required /lib/security/pam_limits.so。
10、注釋掉不需要的用戶和用戶組。
vipw
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rpm:x:37:37::/var/lib/rpm:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
netdump:x:34:34:Network Crash Dump user:/var/crash:/bin/bash
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
sshd:x:74:74:Privilerpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
pcap:x:77:77::/var/arpwatch:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
gdm:x:42:42::/var/gdm:/sbin/nologin
pegasus:x:66:65:tog-pegasus OpenPegasus WBEM/CIM services:/var/lib/Pegasus:/sbin/nologin
htt:x:100:101:IIIMF Htt:/usr/lib/im:/sbin/nologin
wangjing:x:500:500::/home/wangjing:/bin/bash
mysql:x:101:102:MySQL server:/var/lib/mysql:/bin/bash
apache:x:48:48:Apache:/var/www:/sbin/nologin
ge-separated SSH:/var/empty/sshd:/sbin/nologin
對(duì)于不需要的用戶全部加 # 注釋掉。注意,我不建議直接刪除,當(dāng)你某種原因需要某個(gè)用戶時(shí),自己重新會(huì)很麻煩。
vi /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
tty:x:5:
disk:x:6:root
lp:x:7:daemon,lp
mem:x:8:
kmem:x:9:
wheel:x:10:root
mail:x:12:mail
news:x:13:news
uucp:x:14:uucp
man:x:15:
games:x:20:
gopher:x:30:
dip:x:40:
ftp:x:50:
lock:x:54:
nobody:x:99:
users:x:100:
dbus:x:81:
floppy:x:19:
vcsa:x:69:
rpm:x:37:
haldaemon:x:68:
utmp:x:22:
netdump:x:34:
nscd:x:28:
slocate:x:21:
sshd:x:74:
rpc:x:32:
rpcuser:x:29:
nfsnobody:x:65534:
mailnull:x:47:
smmsp:x:51:
pcap:x:77:
xfs:x:43:
ntp:x:38:
gdm:x:42:
pegasus:x:65:
htt:x:101:
wangjing:x:500:
mysql:x:102:
apache:x:48:
對(duì)于不需要的用戶組全部加 # 注釋掉。注意,我不建議直接刪除,當(dāng)你某種原因需要某個(gè)用戶組時(shí),自己重新會(huì)很麻煩。
11、用chattr命令給下面的文件加上不可更改屬性。
# chattr +i /etc/passwd
# chattr +i /etc/shadow
# chattr +i /etc/group
# chattr +i /etc/gshadow
注意執(zhí)行這個(gè)操作后,以root身份都不能向系統(tǒng)增加用戶或者修改密碼了。如果我們要增加用戶或者修改密碼的。應(yīng)該先用chattr -i /etc/passwd等命令解除不可寫(xiě)設(shè)置,再進(jìn)行操作。
12、修改sshd的端口。
修改/etc/ssh/sshd_config,將里面的 Port 改為 59825,(具體的端口你隨意。當(dāng)然不能和其他程序的端口沖突了)。并注釋掉前面的#號(hào),然后
pkill sshd
service sshd start
就行了
注意最好在本地修改這個(gè)端口,否則容易出現(xiàn)把自己鎖在外面的情況。修改了本處端口后,還要注意修改防火墻的ssh端口。
13、 內(nèi)核參數(shù)調(diào)整
vi /etc/sysctl.conf
net.ipv4.conf.default.accept_source_route=0
net.ipv4.icmp_echo_ignore_broadcasts=1
#net.ipv4.icmp_echo_ignore_all=1
net.ipv4.icmp_ignore_bogus_error_responses=1
net.ipv4.ip_conntrack_max=65535
net.ipv4.tcp_syn_retries=1
net.ipv4.tcp_fin_timeout=5
net.ipv4.tcp_synack_retries=1
net.ipv4.tcp_syncookies=1
net.ipv4.route.gc_timeout=100
net.ipv4.tcp_keepalive_time=500
net.ipv4.tcp_max_syn_backlog=10000
# sysctl -p //查看
14、經(jīng)常檢查系統(tǒng)日志。系統(tǒng)日志主要位于/var/log/目錄下。防患于未然。
通過(guò)以上設(shè)置你的系統(tǒng)一般來(lái)說(shuō)就比較安全了。當(dāng)然安全與不安全是道與魔的斗爭(zhēng)。
經(jīng)過(guò)這幾個(gè)步驟,我們一個(gè)比較安全的LAMP服務(wù)器就環(huán)境基本建立成功啦。感覺(jué)上也不是很難,是吧?

六、日常常用的管理功能
# cd /usr/local/src
# wget ftp://ftp.ncftp.com/ncftp/ncftp-3.2.1-src.tar.gz
# tar zxvf ncftp-3.2.1-src.tar.gz
# cd ncftp-3.2.1-src
# ./configure --prefix=/usr/local/ncftp
# make make install

23、mysql數(shù)據(jù)庫(kù)自動(dòng)備份并上傳到服務(wù)器
服務(wù)器數(shù)據(jù)的備份
1、數(shù)據(jù)備份
為了防止意外情況的發(fā)生造成數(shù)據(jù)的丟失,關(guān)鍵數(shù)據(jù)或整個(gè)系統(tǒng)或?qū)τ羞x擇的系統(tǒng)部分,在本地和異地進(jìn)行定時(shí)備份,以保證系統(tǒng)全部或部分在災(zāi)害出現(xiàn)時(shí)也能持續(xù)運(yùn)行。
2、具體方案
1)、數(shù)據(jù)庫(kù)每日備份
每天4:00,將Cnprintbbs數(shù)據(jù)庫(kù)拷貝至/root/back后進(jìn)行壓縮,然后上傳至192.168.1.9服務(wù)器上,/root/back留有壓縮版本。
運(yùn)行腳本/root/scripts/back.sh
例子:
#!/bin/bash
rm /root/back/Cnprintbbs/* -rf
/usr/local/mysql/bin/mysqlhotcopy Cnprintbbs /root/back/Cnprintbbs -u root -p uefer77693
sleep 5
cd /root/back
tar zcf `hostname`-Cnprintbbs`date +%Y%m%d`.tar.gz Cnprintbbs
sleep 5
echo "tar ok!"
/usr/local/ncftp/bin/ncftpput -u gamebak -p gamebak@root 192.168.1.9 / /root/back/`hostname`-Cnprintbbs`date +%Y%m%d`.tar.gz
sleep 10
echo "upload Cnprintbbs ok!"
保存,并設(shè)置計(jì)劃任務(wù)。
# crontab -e
增加一行:
00 4 * * * /root/scripts/back.sh
每天凌晨4點(diǎn)將自動(dòng)備份數(shù)據(jù)庫(kù)并上傳。
2)、數(shù)據(jù)庫(kù)即時(shí)備份
每隔1小時(shí),將Cnprintbbs數(shù)據(jù)庫(kù)拷貝至/root/back/hour目錄進(jìn)行備份,然后將壓縮文件傳給特定服務(wù)器。
例子:
#!/bin/bash
hottime=`date +%Y%m%d%H%M`
mkdir /root/back/hour/Cnprintbbs"$hottime"
/usr/local/mysql/bin/mysqlhotcopy Cnprintbbs /root/back/hour/Cnprintbbs"$hottime" -u root -p uefer77693
sleep 5
cd /root/back/hour
tar zcf `hostname`-Cnprintbbs"$hottime".tar.gz Cnprintbbs"$hottime"
sleep 5
echo "tar ok!"
/usr/local/ncftp/bin/ncftpput -u backupdb -p backupdb 192.168.102.119 / /root/back/hour/`hostname`-Cnprintbbs"$hottime".tar.gz
sleep 20
echo "upload Cnprintbbs ok!"
rm `hostname`-Cnprintbbs"$hottime".tar.gz -f
3)、日志備份
每天02:00,將/log/下前一天的日志,進(jìn)行壓縮,然后上傳至192.168.9.1服務(wù)器。
運(yùn)行腳本/root/scripts/upload_daily
例子:
#!/bin/bash
cd /log/
mkdir log`date --date '1 days ago' +%Y%m%d`
mv *.log.`date --date '1 days ago' +%y%m%d`-* log`date --date '1 days ago' +%Y%m%d`
sleep 10
tar zcvf `hostname`-log`date --date '1 days ago' +%Y%m%d`.tar.gz log`date --date '1 days ago' +%Y%m%d`
/usr/local/ncftp/bin/ncftpput -u log -p log@root 218.80.198.234 / /log/`hostname`-log`date --date '1 days ago' +%Y%m%d`.tar.gz
rm `hostname`-log`date --date '1 days ago' +%Y%m%d`.tar.gz
注:計(jì)劃任務(wù)通過(guò)/etc/crontab –e來(lái)進(jìn)行設(shè)置
4)、即時(shí)日志備份
直接運(yùn)行/home/root/tools/upload 將最新日志上傳至192.168.1.9服務(wù)器,方便研發(fā)部門(mén)查看。
運(yùn)行腳本/home/root/tools/upload,(如果所有服務(wù)器的日志都需要上傳,可以運(yùn)行網(wǎng)關(guān)服務(wù)器上的/home/root/tools/allupload)
24、Squid緩存刪除及重啟
1. squid使用時(shí)間長(zhǎng)了,速度會(huì)變慢,我的建議是每2小時(shí)kill掉squid 進(jìn)程,RunAccel腳本會(huì)自動(dòng)再啟動(dòng)的它。
2. 寫(xiě)一腳本,放進(jìn)crontab中,每天凌晨4點(diǎn)左右把cache目錄清空。
#!/bin/sh
# squid clean swap and restart scrīpt by marco lu
SQUID_DIR=/usr/local/squid/
PID_FILE=${SQUID_DIR}var/logs/squid.pid
CACHE_DIR=${SQUID_DIR}var/cache
PPID=`ps aux | grep -i squid | grep -v grep|awk '{print $2}'`
kill -9 ${PPID} > /dev/null
kill -9 `cat ${PID_FILE}` > /dev/null
rm -rf $CACHE_DIR/*
${SQUID_DIR}sbin/squid -z > /dev/null
if [ $? -eq 0 ]
then
${SQUID_DIR}bin/RunAccel > /dev/null
fi
七、安裝vBulletin 3.6.8和vBseo 3.1.0
vBulletin和vbseo 3.0.1都是商業(yè)軟件,本地址的下載鏈接僅供試用,請(qǐng)于下載后24小時(shí)內(nèi)刪除,購(gòu)買(mǎi)正版請(qǐng)聯(lián)系相應(yīng)官方。
25、安裝vBulletin 3.6.8
vBulletin 是一個(gè)強(qiáng)大的論壇社區(qū)解決方案,使用它您可以輕易為您的網(wǎng)站創(chuàng)建論壇系統(tǒng)。vBulletin 基于 PHP 和 MySQL (一個(gè)高效開(kāi)源的數(shù)據(jù)庫(kù)引擎)。這些堅(jiān)固后臺(tái)技術(shù)使我們開(kāi)發(fā)的產(chǎn)品有著不同凡響的速度和可靠的穩(wěn)定性。
wget http://www.cnprint.org/bbs/blogs/1/a...1234567890.zip
安裝教程請(qǐng)見(jiàn):http://www.vbulletin-china.cn/docs/h...rsion=30608602
特別提醒:請(qǐng)打開(kāi)config.php有關(guān)memcache設(shè)置。
26、安裝vBseo 3.1.0
vBSEO為vBulletin(最流行的網(wǎng)站論壇)搜索優(yōu)化程序, 用它可很容易地為你的vBulletin網(wǎng)站提供強(qiáng)大的搜索功能。
下載vBseo安裝程序:
wget http://www.cnprint.org/bbs/blogs/1/a...eygen-gysn.zip
1、打開(kāi)vBseo壓縮包,解壓縮,F(xiàn)TP以二進(jìn)制方式上傳upload文件夾下所有文件及目錄至vbb對(duì)應(yīng)目錄。
2、Linux系統(tǒng)下需首先修改"vB-root/includes/config_vbseo.php" 文件屬性為可寫(xiě)(CHMOD 666)
3、確認(rèn)vbb控制臺(tái)啟動(dòng)插件功能, 在插件與產(chǎn)品欄目--產(chǎn)品管理--添加/管理產(chǎn)品,import導(dǎo)入'Product'目錄中的crawlability_vbseo.xml (如果中文UTF-8版?zhèn)€別情況下導(dǎo)入錯(cuò)誤則可以把此文件用編輯軟件另存為utf-8編碼),產(chǎn)品添加完畢。
4、將'htaccess'目錄中.htaccess 文件上傳至論壇根目錄,有些操作系統(tǒng)下.htaccess 不可見(jiàn),這時(shí)可以只將htaccess.txt文件上傳到vbb根目錄,刪除剛才上傳的.htaccess文件,將剛才上傳的txt文件更名為. htaccess。
5、在瀏覽器中輸入http: //你的網(wǎng)址/你的VBB目錄/vbseocp.php配置你的vbseo,輸入兩次你的Vbseo管理面板密碼,也可以事先編輯upload\ includes\config_vbseo.php文件,在define('VBSEO_ADMIN_PASSWORD', 'ABC')中加入你想要的管理密碼(就在后面的引號(hào)中間加入,比如ABC)。
6、vbseo管理界面下如果需要輸入授權(quán)碼請(qǐng)用附帶的keygen為你的Domain算號(hào)并拷貝32位授權(quán)碼即可,配置完畢后將第二步中'config_vbseo.php' 文件屬性改回只讀(CHMOD 644)
7、開(kāi)始使用你的VBSEO,第一次安裝以后可以直接通過(guò)VBB后臺(tái)進(jìn)入Vbseo管理界面。
8、如果有必要,將htacess規(guī)則移到httpd.conf中??梢源蟠蠼档蚢pache的負(fù)載。
NameVirtualHost *:80

ServerName www.cnprint.org
DocumentRoot "/usr/local/apache2/htdocs"
#ErrorLog logs/error_log
# CustomLog logs/access_log combined


Options Indexes FollowSymLinks
AllowOverride none
Order allow,deny
Allow from all


Options Indexes FollowSymLinks
AllowOverride all
RewriteEngine On
#RewriteBase /bbs
RewriteCond %{HTTP_HOST} !^www\.cnprint\.org
RewriteRule (.*) http://www.cnprint.org/bbs/$1 [L,R=301]
#RewriteRule ^((urllist|sitemap_).*\.(xml|txt)(\.gz)?)$ vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 [L]
RewriteCond %{QUERY_STRING} !vbseourl=
RewriteCond %{REQUEST_URI} !(admincp/|modcp/|chat|cron)
RewriteRule ^(.*\.php)$ vbseo.php?vbseourl=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !\.(jpg|gif)$
RewriteRule ^(archive/.*)$ vbseo.php?vbseourl=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !^(admincp|modcp|clientscript|cpstyles|images)/
RewriteRule ^(.+)$ vbseo.php?vbseourl=$1 [L,QSA]
Order allow,deny
Allow from all

作者: holyghost 發(fā)布日期: 2009-8-05
我的mcrypt死活都裝不上
都快一個(gè)月了·····
作者: baizx 發(fā)布日期: 2009-8-05
phpmyadmin不能加載mcrypt 分享


使用phpMyAdmin管理mysql,如果出現(xiàn)以下提示
Cannot load mcrypt extension

用yum安裝如下RPM包即可解決上述問(wèn)題
php-mcrypt
php-mhash
libmcrypt
libmcrypt-devel
libmhash

標(biāo)簽:玉溪 臨汾 通化 儋州 玉樹(shù) 蕪湖 瀘州 泰安

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Centos5.2配置LAMP與Centos5.3配置LAMP》,本文關(guān)鍵詞  Centos5.2,配置,LAMP,與,Centos5.3,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Centos5.2配置LAMP與Centos5.3配置LAMP》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Centos5.2配置LAMP與Centos5.3配置LAMP的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章