CentOS 5 全功能WWW服務器搭建全教程 V3.0

http://hx100.blog.51cto.com/44326/339949/php

1、基本系統安裝
一、下載CentOS 5
我是下載的DVD版本,你們也能夠下載服務器CD安裝版本,其實都差很少。你們能夠到這兒下載,速度很快的。
http://ftp.iasi.roedu.net/mirrors/ce...86-bin-DVD.iso
建議在windows下用BT或迅雷下載,速度會快不少。
下載後刻錄成光盤。我建議你刻錄DVD啦,若是是菜鳥,把圖形界面也裝上,能夠在圖形界面進行學習,固然強烈不建議在服務器上裝桌面。
Centos 5系列任何一個版本就好了,安裝後能夠經過yum upgrade直接更新爲最新版本。

二、安裝CentOS 5
做爲服務器,不安裝不須要的組件,因此在選擇組件的時候,除了選擇FTP SERVER外取消全部組件的選擇。也不要選web服務器。由於咱們後面要手動編譯安裝。
系統約定RPM包和源碼包存放位置
RPM包和源碼包存放位置 /usr/local/src
源碼包編譯安裝位置(prefix) /usr/local/xxx
腳本以及維護程序存放位置 /usr/local/sbin
MySQL 數據庫位置 /var/lib/mysql
Apache 網站根目錄 /usr/local/apache2/htdocs
Apache 虛擬主機日誌根目錄 /data/logs/www
yum RPM包信息文件 /etc/yum.list

三、系統環境部署及調整
(1)檢查系統是否正常
# more /var/log/messages //檢查有無系統內核級錯誤信息
# dmesg //檢查硬件設備是否有錯誤信息
# ifconfig //檢查網卡設置是否正確
# ping www.163.com // 檢查網絡是否正常
(2)關閉不須要的服務
# export LANG='en_US' //設置語言
# setup //選擇啓動的服務
進入system service 選項。
以space 鍵選定所需服務。
如下僅列出須要啓動的服務,未列出的服務一概關閉:
crond
irqbalance 僅當服務器CPU爲S.M.P架構或支持雙核心、HT技術時,才需開啓,不然關閉。
microcode_ctl
network
iptables
vsftpd
sshd
syslog
yum-updatesd
(3)修改/etc/yum.repos.d/CentOS-Base.repo,將鏡象站點地址改成在中國的鏡象站點地址。否則咱們經過yum安裝軟件速度會極慢。修改以下:html

# 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)更新系統,咱們使用yum,
運行:
# yum upgrade
建議更新全部列出的程序,包括內核,rhel 5.X的穩定性還要繼續努力呢。
(5)定時校訂服務器時間
# yum install –y ntp
# crontab -emysql

0 23 * * * /usr/sbin/ntpdate 210.72.145.44


以上命令設置好後存盤。
# /sbin/service crond reload
重載計劃任務配置
您的機器將在天天的23:00根據中國國家授時中心的NTP服務器時間自動校準時間。
(6)FTP服務器的配置
vi /etc/vsftpd/vsftpd.conf
把anonymous_enable=YES
修改成anonymous_enable=No不容許匿名登陸。
添加兩句
chroot_local_user=yes
listen_port=2121
將用戶鎖定在主目錄,並將FTP監聽端口修改成2121
把ftpd_banner=*前的註釋去掉。後面改爲你的歡迎信息(這樣設置能夠避免顯示ftp服務器的版本信息)
而後保存,service vsftpd start就能夠了。
這時應當添加用戶,由於root默認不能經過FTP方式登陸,也不安全。
groupadd upload
useradd upload -g upload -d /usr/local/apache2/htdocs/ -M
若是FTP登陸時出現
ftp服務器鏈接失敗,錯誤提示:
500 OOPS: cannot change directory:/home/*******
500 OOPS: child died
解決方法:
# setsebool ftpd_disable_trans 1
# service vsftpd restart
這樣對於咱們上傳一些文件到系統中很方便。
你們有興趣的能夠看下這篇文章對vsftpd進行一個比較詳細的瞭解
http://blog.chinaunix.net/u/10047/showart_198837.html
四、從新啓動系統
# init 6
此時系統啓動成功,能夠刪除老的內核

2、安裝mysql, apache, php, Zend Optimizer等基本環境
5. 使用 yum 程序安裝所需開發包(如下爲標準的rpm包名稱)
# 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 的方式一併安裝好,避免手動編譯浪費時間,同時也能避免不少錯誤,這幾個小軟件的編譯很麻煩。這幾個小軟件編譯錯誤了,GD固然安裝不了,php5的編譯固然也沒戲了。因此咱們抓大放小,對這些小牛鬼蛇神采起快速簡潔的方式進行安裝。而且對服務器的性能也不能產生什麼影響。
另外libxml2系統已經默認安裝了,因此咱們不須要手工編譯了,直接安裝它的開發包就好了。
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
#linux

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" 這個環境參數只針對intel P4 芯片,若是你的CPU是AMD的,注意不能使用。請查看相應的編譯優化參數。不然程序會沒法編譯,即便編譯成功也沒法運行,嘿嘿。
關於其餘CPU的優化參見個人BLOG的一篇轉貼:
http://www.cnprint.org/bbs/blogs/1/blog43.html
//./configure 配置。
# make //make 是用來編譯的,它從 Makefile 中讀取指令,而後編譯。
# make install //make install 是用來安裝的,它也從 Makefile 中讀取指令,安裝到指定的位置。
(2) Apache 日誌截斷程序
# 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
#c++

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



七、編譯mysql 5.0.50
mysql 5.0.50是企業版本,貌似雙數版本都是企業版本了。我的以爲代碼質量要比社區版本要好一些。你們能夠下載,無償使用。並不須要向mysql公司交錢。
#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 客戶端最大鏈接數, 默認的只有100,遠遠達不到咱們的要求。
# 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, 固然小點也能夠,根據你的須要來,不建議改的太大。
{"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},
保存。
#web

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


配置成功會提示:
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
編譯的時間可能會比較長,畢竟優化的比較厲害。
# make install
編譯安裝完成後執行後續操做:
# useradd mysql //添加 mysql 用戶
# cd /usr/local/mysql
# bin/mysql_install_db --user=mysql
# chown -R root:mysql . //設置權限,注意後面有一個 "."
# chown -R mysql /var/lib/mysql //設置 mysql 目錄權限
# chgrp -R mysql . //注意後面有一個 "."
# cp share/mysql/my-medium.cnf /etc/my.cnf
# cp share/mysql/mysql.server /etc/rc.d/init.d/mysqld //開機自動啓動 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 配置,增長部分優化參數,以下:
[mysqld]
ft_min_word_len=2
運行如下命令便可啓動 MySQL 服務器:
# /etc/rc.d/init.d/mysqld start //啓動 MySQL
# bin/mysqladmin -u root password "password_for_root"
# service mysqld stop //關閉 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
#sql

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
#shell

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 //配置源代碼樹
--prefix=/usr/local/apache2 //體系無關文件的頂級安裝目錄PREFIX ,也就Apache的安裝目錄。
--enable-module=so //打開 so 模塊,so 模塊是用來提 DSO 支持的 apache 核心模塊
--enable-mods-shared=all //編譯所有的模板,對於不須要咱們能夠在httpd.conf去掉。
--enable-cache //支持緩存
--enable-file-cache //支持文件緩存
--enable-mem-cache //支持記憶緩存
--enable-disk-cache //支持磁盤緩存
--enable-static-support //支持靜態鏈接(默認爲動態鏈接)
--enable-static-htpasswd //使用靜態鏈接編譯 htpasswd - 管理用於基本認證的用戶文件
--enable-static-htdigest //使用靜態鏈接編譯 htdigest - 管理用於摘要認證的用戶文件
--enable-static-rotatelogs //使用靜態鏈接編譯 rotatelogs - 滾動 Apache 日誌的管道日誌程序
--enable-static-logresolve //使用靜態鏈接編譯 logresolve - 解析 Apache 日誌中的IP地址爲主機名
--enable-static-htdbm //使用靜態鏈接編譯 htdbm - 操做 DBM 密碼數據庫
--enable-static-ab //使用靜態鏈接編譯 ab - Apache HTTP 服務器性能測試工具
--enable-static-checkgid //使用靜態鏈接編譯 checkgid
--disable-cgid //禁止用一個外部 CGI 守護進程執行CGI腳本
--disable-cgi //禁止編譯 CGI 版本的 PHP
--enable-ssl // 編譯 ssl模塊。
咱們再也不使用worker模式編譯apache,worker模式和php貌似有一些不協調不穩定之處。因此使用了默認的perfork模式。
將apache設置成開機自啓動:
在/etc/rc.d/rc.local文件中加入一行
/usr/local/apache2/bin/apachectl start
這樣每次從新啓動系統之後,apache也會隨系統一塊兒啓動.
或者將apache安裝爲系統服務
# 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
最後,運行chkconfig把Apache添加到系統的啓動服務組裏面:
# chkconfig --add httpd
# chkconfig httpd on

九、編譯php 5.2.5
Suhosin是php加強型安全補丁,能夠編譯到靜態內核中,也能夠編譯成php動態擴展。我我的強烈你建議安裝成靜態內核。Suhosin已經進入 Gentoo Linux、FreeBSD、OpenSuSE Linux、Mandriva Linux、Debian Linux官方包。下面的如下先說靜態安裝步驟。固然你也能夠在安裝php後將它編譯成php的動態擴展。
# 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
#apache

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

配置成功會提示:
+--------------------------------------------------------------------+
| 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
在這裏也順便說一下將suhosin安裝成爲php的動態擴展的方法。畢竟網上根本不見它的中文安裝教程。
雖然我我的不推薦這種方式。
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
會提示編譯的模塊存在的目錄,記住它。
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20060613/
而後在php.ini中增長一行下列語句。
extension="/usr/local/php/lib/php/extensions/no-debug-zts-20060613/suhosin.so"

十、整合apache 與php
# vi /usr/local/apache2/conf/httpd.conf
在最後一行加上:
AddType application/x-httpd-php .php
查找:(設置 WEB 默認文件)
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
這時會出現錯誤:
/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
不急,咱們慢慢解決。
這個Permission denied問題,在centos 5下面通常是Selinux引發的,做爲生產用服務器,我建議你千萬別草率地關掉Selinux一了百了。就像家裏的防盜網,阻礙了你的貓自由進出窗戶,你不能爲了貓方便,就把防盜網簡單拆除是一樣的道理。我看見網上許多人建議把Selinux簡單關閉來解決這個問題,這是削足適履的作法,不值得提倡。
咱們能夠這樣操做:
# audit2allow -a //查看究竟問題出在什麼地方
<no matches>
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
屏幕產生以下提示:
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
咱們運行
# semodule -i local.pp
這樣就讓Selinux加載了新的規則。
更詳細的內容請看我在BLOG上的轉貼:
http://www.cnprint.org/bbs/blogs/1/blog48.html
重啓apache
哈哈,apache不會再報錯了吧?
這樣我保留了selinux的功能,同時apache也能正常運行。
PHP5.1.x開始須要設置時區,默認時區與中國時區差8個小時,這種狀況須要在php.ini中這麼設置,找到date.timezone,去掉前面的分號,修改成如下值,大陸地區可用的值是:Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次爲重慶,上海,烏魯木齊)
否則一些php程序的時間總是和中國標準時間相差8個小時。個人個人VBB論壇在windows上就是這樣。這兒有亞洲地區的對應時區。
http://www.php.net/manual/en/timezones.asia.php
十一、安裝 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
按照它的提示一步步進行就好了。
總之一句話。若是你的服務器環境不須要ZendOptimizer,那麼能不安就不安裝這個。避免和eaccelerator衝突。
12. 查看確認 L.A.M.P 環境信息
vi /usr/local/apache2/htdocs/phpinfo.php
新增長下面一行,並保存。
<?php phpinfo(); ?>
# chmod 755 /usr/local/apache2/htdocs/phpinfo.php
用瀏覽器打開 http://192.168.9.150/phpinfo.php
檢查 phpinfo中的各項信息是否正確。
測試php與mysql的鏈接
# vi /usr/local/apache2/htdocs/testdb.php
增長下面幾行,並保存。

<?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
用瀏覽器打開 http://192.168.9.150/testdb.php
若是輸出success就OK了
到這一步,一個基本的lamp就創建完成了。若是你是初學者,下面的步驟根據須要參考,沒必要所有照作,記住一句話,功能越多,越容易出錯,在任何領域都是這樣。

3、LAMP環境加速,包括squid, memcache, eaccelerator
1三、安裝eaccelerator
eaccelerator是php的加速軟件,使用後php的執行效率會有較大幅度的提高。目前eaccelerator 0.9.5.2已經和ZendOptimizer-3.3.0可以基本上兼容啦。不過我我的以爲,ZendOptimizer-3.3.0沒有加速的功能,反而使php運行變慢,只是起到了運行zend加密文件的做用而已。閒話很少說了,你們有興趣的,能夠去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


# make & make install
編譯安裝後咱們會看到屏幕提示的eaccelerator.so所在的目錄,php5.2.X系列是在 /usr/local/php/lib/php/extensions/no-debug-zts-20060613/eaccelerator.so,記住這個路徑,待會要用到。
修改php.ini(安裝完zend以後,php.ini存放於/usr/local/Zend/etc)
在文件最後,zend以前,注意,這部份內容務必放在zend以前,否則可能會出現不可預期的服務器問題。添加下列信息:

[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 是安裝完程序自動指示給咱們的文件路徑和文件名
若是您使用 thread safe 編譯安裝 PHP,則您必須使用 「zend_extension_ts」 代替 默認添加的「zend_extension」。我就必須修改這裏,不然不起做用。
zend_extension_ts="/home/php/lib/php/extensions/no-debug-zts-20060613/eaccelerator.so"
實際上,安裝好eAccelerator之後, /home/php/lib/php/extensions/下會生成2個目錄,一個是no-debug-zts-xxxxxxxx,一個是no- debug-non-zts-xxxxxxxx,2個目錄下都有eaccelerator.so文件。
eaccelerator.shm_size="32"
eAccelerator 能夠使用的共享內存的數量 (以兆爲單位) . "0" 是指操做系統的默認值. 默認值是 "0".可根據服務器的實際狀況來調整,16,32,64,128都是能夠的。
eaccelerator.cache_dir="/home/php/tmp"
這個目錄是給磁盤緩存使用. eAccelerator 在這裏儲存預先編譯好的代碼, 進程數據, 內容以及用戶的自定義內容. 一樣的數據也能被儲存在共享內存中 (這樣能夠提升訪問速度). 默認的設置是 "/tmp/eaccelerator".
eaccelerator.enable="1"
開啓或關閉 eAccelerator。」1″ 爲開啓,」0″ 爲關閉。默認值爲 「1″。
eaccelerator.optimizer="1"
啓或關閉內部優化器,能夠提高代碼執行速度。」1″ 爲開啓,」0″ 爲關閉。默認值爲 「1″。
eaccelerator.check_mtime="1"
打開或者關閉 PHP 的文件修改檢查. "1" 是指打開, "0" 是指關閉. 若是您在修改之後從新編譯 PHP 的文件,那麼您應當設置爲 "1". 默認值是 "1".
eaccelerator.debug="0"
開啓或關閉調試日誌記錄。」1″ 爲開啓,」0″ 爲關閉。默認值爲 「0″。
eaccelerator.filter=""
判斷哪些 PHP 文件必須緩存。您能夠指定緩存和不緩存的文件類型(如 「*.php *.phtml」等)
若是參數以 「!」 開頭,則匹配這些參數的文件被忽略緩存。默認值爲 「」,即,全部 PHP 文件
都將被緩存。
eaccelerator.shm_max="0"
當使用 」 eaccelerator_put() 」 函數時禁止其向共享內存中存儲過大的文件。該參數指定容許
存儲的最大值,單位:字節 (10240, 10K, 1M)。」0″ 爲不限制。默認值爲 「0″。
eaccelerator.shm_ttl="0"
當 eAccelerator 獲取新腳本的共享內存大小失敗時,它將從共享內存中刪除全部在
最後 「shm_ttl」 秒內沒法存取的腳本緩存。默認值爲 「0″,即:不從共享內春中刪除
任何緩存文件。
eaccelerator.shm_prune_period="0"
當 eAccelerator 獲取新腳本的共享內存大小失敗時,他將試圖從共享內存中刪除早於
「shm_prune_period」 秒的緩存腳本。默認值爲 「0″,即:不從共享內春中刪除
任何緩存文件。
eaccelerator.shm_only="0"
容許或禁止將已編譯腳本緩存在磁盤上。該選項對 session 數據和內容緩存無效。默認
值爲 「0″,即:使用磁盤和共享內存進行緩存。
eaccelerator.compress="1"
容許或禁止壓縮內容緩存。默認值爲 「1″,即:容許壓縮。
eaccelerator.compress_level="9"
指定內容緩存的壓縮等級。默認值爲 「9″,爲最高等級。
最後從新啓動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
也會有eAccelerator的具體信息。

1四、安裝Squid,提供web反向代理緩存
Squid是一個更專業的代理服務器,性能和效率會比Apache的mod_proxy高不少。
Squid Internet Object Cache (Harvest Project的後續版本) 是美國政府大力助的一項研究計劃,其目的爲解決網絡帶寬不足的問題,是如今Unix系統上使用者最多功能也最完整的一套軟體。Apache和 Netscape雖附有相關的Proxy模塊,但因其功能簡單而不夠普及。有關squid的詳細說明可到squid網站(http: //www.squid-cache.org)查詢。
反向代理是和前兩種代理徹底不一樣的一種代理服務。使用它能夠下降原始WEB服務器的負載。反向代理服務器承擔了對原始WEB服務器的靜態頁面的請求,防止原始服務器過載。它位於本地WEB服務器和Internet之間,處理全部對WEB服務器的請求,組織了WEB服務器和Internet的直接通訊。若是互聯網用戶請求的頁面在代理服務器上有緩衝的話,代理服務器直接將緩衝內容發送給用戶。若是沒有緩衝則先向WEB服務器發出請求,取回數據,本地緩存後再發送給用戶。這種方式經過下降了向WEB服務器的請求數從而下降了WEB服務器的負載。
下載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的內核,才能支持epoll的IO模式,舊版本的內核則只能選擇poll或其餘模式了;另外,記得帶上支持大文件的選項,不然在access log等文件達到2G的時候就會報錯。
設定 squid 的配置大概以下內容:
# mv /usr/local/squid/etc/squid.conf /usr/local/squid/etc/squid.conf.bak
# vi /usr/local/squid/etc/squid.conf
#服務器IP 192.168.9.150
#監聽服務器的80端口,反向代理,支持域名和IP的虛擬主機
http_port 192.168.9.150:80 vhost vport
#防止天涯盜鏈,轉嫁給百度
acl tianya referer_regex -i tianya
http_access deny tianya
deny_info http://www.baidu.com/logs.gif tianya
#防止百度機器人爬死服務器,這將致使百度不能收錄你的網站內容,請注意
acl AntiBaidu req_header User-Agent Baiduspider
http_access deny AntiBaidu
#Squid信息設置
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
#單臺使用,不使用該功能
icp_port 0
#設置Squid所能使用的內存共40MB,這個值因人而異,每次處理緩存大小爲40MB,當緩存空間使用達到95%時新的內容將取代舊的而不直接添加到目錄中,直到空間又降低到90%才中止這一活動
cache_mem 40 MB
cache_swap_low 90
cache_swap_high 95
#最大緩存文件大小,超過這個值則不緩存,這個值因人而異,maximum_object_size_in_memory #裝入內存緩存的文件大小,這個值對Squid的性能影響比較大,由於默認值是8K,超過8K的文件都不裝入內存,而實際應用中不少網頁和圖片等都超過 8KB, 我的認爲若是緩存不裝入內存而存在磁盤上,性能和apache直接讀取磁盤文件沒什麼區別,甚至不如直接訪問apache,如今設置成小於4兆的文件統統裝入內存緩存.
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
#磁盤緩存的類型和目錄,大小,一二級目錄的設置,這裏磁盤緩存大小是100MB,都是 16*256 級子目錄
cache_dir ufs /usr/local/squid/var/cache 100 16 256
#這個設置是不記錄store.log
cache_store_log none
#設置默認刷新規則
refresh_pattern -i ^ftp: 1440 20% 10080
refresh_pattern -i ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
#不要相信ETag 由於有gzip
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
#設置超時策略
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
#打開emulate_httpd_log選項,將使Squid仿照Aapche的日誌格式
emulate_httpd_log on
#日誌格式combined的設置
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
#這裏是設置pid和日誌文件的位置,因人而異,同時日誌格式是combined,awstats能夠直接調用分析了
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
#設置不想緩存的目錄或者文件類型
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的反向代理加速配置
#代理到本機的80端口的服務,僅僅作爲原始內容服務器
cache_peer 127.0.0.1 parent 80 0 no-query originserver login=PASS
#錯誤文檔
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
初始化和啓動squid
# /usr/local/squid/sbin/squid -z
# /usr/local/squid/sbin/squid -NCd1
第一條命令是先初始化squid緩存哈希子目錄,只需執行一次便可。
最好還編輯/etc/hosts 文件
添加如下內容
192.168.9.150 cnprint.org www cnprint.org
這樣免去查詢DNS,速度也快一些。
如今你們確定急着要打開瀏覽器訪問你的網站看看效果吧,其實沒啥變化,要等到有流量訪問,squid把文件都裝到內存後,效果才明顯。能夠用top命令觀察squid的內存使用狀況或者用
cat /usr/local/squid/var/logs/access.log |grep TCP_MEM_HIT
若是看到不少的TCP_MEM_HIT ,這代表該文件是從內存緩存讀取的,squid已經起做用了!你再用瀏覽器打開該文件,應該是快如閃電了。。呵呵,大功告成了!還有其餘類型的HIT,如 TCP_HIT等等,這些是從磁盤讀取的,我以爲加速的意義不大,只不過緩解了apache的壓力而已。
3. 啓動squid:./bin/RunCache &
這邊我使用squid附帶的啓動腳原本啓動squid,有個好處就是,若是squid的進程死了的話,這個腳本會自動啓動squid,對於運行在線上的服務器來講,這點過重要了。
開機自動運行squid
修改開機自動運行文件,將 /usr/local/squid/bin/RunCache & 加進開機自動執行的程序中。
由於第一次是以 root 身份啓動,因此,/usr/local/squid/var/squid.out 及 /usr/local/squid/var/squid.pid 的擁有者是 root ,這會形成下列以 nobody 身份啓動 squid 時,會有錯誤出現,因此,必須在第二次由 rc.local 啓動前,先行將 squid.out 及 squid.pid 兩個文件的全部者(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 &

1五、memcache + libevent 安裝
memcached是一個高性能的分佈式的內存對象緩存系統,經過在內存裏維護一個統一的巨大的hash表,它可以用來存儲各類格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等。最初爲了加速 LiveJournal 訪問速度而開發的,後來被不少大型的網站採用。起初做者編寫它多是爲了提升動態網頁應用,爲了減輕數據庫檢索的壓力,來作的這個緩存系統。它的緩存是一種分佈式的,也就是能夠容許不一樣主機上的多個用戶同時訪問這個緩存系統,這種方法不只解決了共享內存只能是單機的弊端,同時也解決了數據庫檢索的壓力,最大的優勢是提升了訪問獲取數據的速度!基於memcached做者對分佈式cache的理解和解決方案。 memcached徹底能夠用到其餘地方好比分佈式數據庫,分佈式計算等領域。
Memcache是danga.com的一個項目,最先是爲 LiveJournal 服務的,目前全世界很多人使用這個緩存項目來構建本身大負載的網站,來分擔數據庫的壓力。(關於Memcache的更多信息請Google)
Memcache官方網站:http://www.danga.com/memcached
服務器端主要是安裝memcache服務器端,目前的最新版本是 memcached-1.2.3。
另外,Memcache用到了libevent這個庫用於Socket的處理,因此還須要安裝libevent,libevent的最新版本是libevent-1.3e。(若是你的系統已經安裝了libevent,能夠不用安裝)
官網:http://www.monkey.org/~provos/libevent/
(1)、安裝memcached服務器端
編譯安裝:
# 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 有可能沒法正常加載。
(2)、安裝php對memcache支持模塊
安裝php-memcache模塊,這是memcache的php客戶端,php-memcache須要pecl庫的支持。
# 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"
運行如下命令來啓動 memcached:
#/usr/local/memcached/bin/memcached \
-l 192.168.9.139 -d -p 11211 -u nobody -m 128
表示用 daemon 的方式啓動 memcached,監聽在 192.168.9.19 的 11211 端口上,運行用戶爲 nobody,爲其分配 128MB 的內存。
這時查看一下進程,看memcached啓動成功沒有。
top -U nobody
能夠看到
5867 nobody 15 0 2352 684 276 S 0.0 0.1 0:00.00 memcached
說明 memcached安裝成功,並正在運行。
設置成開機自動運行
在 /etc/rc.d/rc.local 中加入
/usr/local/memcached/bin/memcached -l 192.168.9.150 -d -p 11211 -u nobody -m 128

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

1五、安裝DBI和DBD for mysql

//用於提供perl訪問mysql數據庫的接口規範,請確認你已經安裝了perl,通常默認系統都裝上了。
由於咱們要用到mysqlhotcopy功能,須要這兩個小程序的支持。
# 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
測試執行 mysqlhotcopy 並出現以下相似錯誤訊息
#/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'] 說明將 mysqlhotcopy 文件修改一下後便可順利執行 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後已經修正這個錯誤。

1六、配置https
vi /usr/local/apache2/conf/httpd.conf
# 監聽443端口,支持https鏈接
取消註釋 httpd.conf 中的 Include conf/extra/httpd-ssl.conf
設置SSL並建立本身的CA
# cd /etc/pki/tls/misc
# ./CA -newca
屏幕上出現以下的提示:CA certificate filename (or enter to create)
這是要求輸入要建立的CA的證書文件名, 能夠直接回車或輸入證書文件名。
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:-
此時要求輸入和驗證CA的私鑰口令、國家代碼(中國是CN)、省份、城市或地區、組織或企業名稱、部門名稱、CA的名稱或服務器的主機名稱、管理員電子郵件地址。
至此,在當前目錄下生成了demoCA的目錄,CA的證書就在該目錄下,文件名爲cacert.pem
生成服務器的證書請求
# ./CA -newreq
屏幕上出現以下的提示:
Generating a 1024 bit RSA private key
.....................................................++++++
.....++++++
writing new private key to 'newreq.pem'
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:
此時要求輸入和驗證服務器的私鑰口令、國家代碼(中國是CN)、省份、城市或地區、組織或企業名稱、部門名稱、CA的名稱或服務器的主機名稱、管理員電子郵件地址。
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
這是要求輸入服務器的相關信息。
此時,在當前目錄下生成了一個名爲newreq.pem的文件,包含了要生成服務器數字證書的請求。
簽署證書
# ./CA -sign
屏幕上出現以下的提示:
Using configuration from /usr/share/ssl/openssl.cnf
Enter PEM pass phrase:
此時同樣須要輸入CA的私鑰口令、國家代碼(中國是CN)、省份、城市或地區、組織或企業名稱、部門名稱、CA的名稱或服務器的主機名稱、管理員電子郵件地址。
Certificate is to be certified until Nov 19 13:46:19 2002 GMT (365 days)
Sign the certificate? [y/n]:y
這時顯示證書請求文件中的各項信息,並詢問是否要簽署證書,回答y,進行簽署。
1 out of 1 certificate requests certified, commit? [y/n]y
回答y,會顯示已經簽署的證書的信息,並在當前目錄下生成服務器的證書文件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
更改服務器的證書文件的相關配置
# 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的根目錄中生成一個index.html,它是以下所示:
<html>
這是SSL示例!
</html>
測試
假如Web服務器的DNS名稱是www.cnprint.org.
在瀏覽器的URL地址欄裏輸入 http://www.cnprint.org/,瀏覽器便會顯示APACHE安裝時確省的Test Page.
在瀏覽器的URL地址欄裏輸入 https://www.cnprint.org/,注意:是 https 而不是http !
瀏覽器會提示站點已經採用了SSL進行數據的加密傳輸.因爲咱們的CA證書不是瀏覽器缺省的信任的根證書,因此,瀏覽器會說沒法確認服務器的證書可信。暫時無論,一直NEXT,最後,瀏覽器會顯示:這是SSL示例!
能夠把CA的證書放在非SSL的站點上,讓瀏覽器下載並安裝CA證書,並將其設置成可信任的根證書,即可解決上面的問題.8 解除HTTPD起動時的口令輸入。
因爲安全的緣由,Web服務器的私鑰是口令加密了的,每次從新起動HTTPD或Linux時,都會要求輸入Web服務器的私鑰的口令。
若是要解除HTTPD起動時的口令輸入,能夠這樣:
# 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
另外在網上看到一個方法,我沒有試。有興趣的能夠試下。
建立SSL密碼自動應答文件,不然每次Apache啓動的時候,都會要求你輸入SSL的密碼.
建立 /usr/local/apache2/conf/ssl.key/sendsslpwd ,內容以下.
#!/bin/bash
SSLpasswd="YOUR PASSPHRASE"
echo $SSLpasswd
chmod 755 /usr/local/apache2/conf/ssl.key/sendsslpwd
此時,Web服務器的私鑰已經沒有口令加密,必定要確保server.pem文件除root外,任何用戶均無權讀取它。

1七、安裝phpmyadmin,管理mysql數據庫
# 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
找到這幾行進行修改:
$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

5、服務器安全配置

1八、編譯安裝mod_security
mod_security是一個集入侵檢測和防護引擎功能的開源web應用安全程序(或web應用程序防火牆)。
它以Apache Web服務器的模塊方式運行, 目標是加強web應用程序的安全性, 防止web應用程序受到已知或未知的攻擊。
# 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/
根據你的須要,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

1九、Iptables規則
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 優化設置
對於訪問量稍大的站點,Apache的這些默認配置是沒法知足需求的,咱們仍需調整Apache的一些參數,使Apache可以在大訪問量環境下發揮出更好的性能。如下咱們對Apache配置文件httpd.conf中對性能影響較大的參數進行一些說明。
(1) Timeout 該參數指定Apache在接收請求或發送所請求內容以前的最長等待時間(秒),若超過該時間Apache則放棄處理該請求,並釋放鏈接。該參數默認值爲120,推薦設置爲60,對於訪問量較大的網站能夠設置爲30。
(2) KeepAlive 該參數控制Apache是否容許在一個鏈接中有多個請求,默認打開。但對於大多數論壇類型站點來講,一般設置爲off以關閉該支持。
(3) MPM - prefork.c 在默認狀況下Apache使用Prefork(進程)工做模式,能夠說這部分的參數設置是對Apache性能影響的核心和關鍵。
查看你的apache運行的模式:
# /usr/local/apache2/bin/httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
而後用戶能夠在配置文檔中找到如下配置段:

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

這就是控制Apache進程工做的配置段,爲了更好的理解上述配置中的各項參數,下面讓咱們先了解一下Apache是如何控制進程工做的。咱們知道,在 Unix系統中,不少服務(Service)的守護進程(Daemon)在啓動時會建立一個進程以準備應答可能的鏈接請求,服務即進入了端口監聽狀態,當一個來自客戶端(Client)的請求被髮送至服務所監聽的端口時,該服務進程即會處理該請求,在處理過程當中,該進程處於獨佔狀態,也就是說若是此時有其餘請求到達,這些請求只能「排隊」等待當前請求處理完成且服務進程釋放。這樣就會致使愈來愈多的請求處於隊列等待狀態,實際表現就是該服務處理能力很是低下。Apache使用Prefork模式很好的解決了這一問題。下面咱們來看看Apache其實是如何高效率工做的。
當Apache啓動時,Apache會啓動StartSpareServers個空閒進程同時準備接收處理請求,當多個請求到來時, StarSpareServers進行會愈來愈少,當空閒進程減小到MinSpareServers個時,Apache爲了可以繼續有充裕的進程處理請求,它會再啓動StartsServers個進程備用,這樣就大大減小了請求隊列等待的可能,使得服務效率提升,這也是爲何叫作Pre-fork的緣由;讓咱們繼續跟蹤Apache的工做,咱們假設Apache已經啓動了200個進程來處理請求,理論上來講,此時Apache一共有205個進程,而過了一段時間,假設有100個請求都獲得了Apache的響應和處理,那麼此時這100個進程就被釋放成爲空閒進程,那麼此時Apache有105個空閒進程。而對於服務而言,啓動太多的空閒進程時沒有任何意義的,反而會下降服務器的總體性能,那麼Apache真的會有105個空閒進程麼?固然不會!實際上 Apache隨時在檢查本身,當發現有超過MaxSpareServers個空閒進程時,則會自動中止關閉一些進程,以保證空閒進程不過過多。說到這裏,用戶應該對Apache的工做方式有了必定的瞭解,若是想得到更多更詳細的說明請參閱Apache手冊文檔。
咱們還有兩個參數沒有介紹:MaxClients和MaxRequestPerchild;MaxClients指定Apache在同一時間內最多容許有多少客戶端可以與其鏈接,若是超過MaxClients個鏈接,客戶端將會獲得一個「服務器繁忙」的錯誤頁面。咱們看到默認狀況下MaxClients設置爲15,這對一些中型站點和大型站點顯然是遠遠不夠的!也許您須要同時容許512個客戶端鏈接才能知足應用需求,好吧,那麼就讓咱們把 MaxClients修改成512,保存httpd.conf並退出,重啓Apache,很遺憾,在重啓過程中您看到了一些錯誤提示,Apache重啓失敗。錯誤提示中告訴您MaxClients最大隻能設定爲256,相信您必定很失望。不過不要沮喪,Apache做爲世界一流的Web Server必定不會如此單薄的!在默認狀況下,MaxClients的確只能設定爲不超過256的整數,可是,若是您有須要徹底能夠隨意定製,此時就須要使用ServerLimit參數來配合使用,簡單的說ServerLimit就像是水桶,而MaxClients就像是水,您能夠經過更換更大的水桶(將ServerLimit設定爲一個較大值)來容納更多的水(MaxClients),但要注意,MaxClients的設定數值是不能大於 ServerLimit的設定數值的!
下面讓咱們瞭解一下MaxRequestPerChild參數,該參數指定一個鏈接進程中能夠有多少個線程同時工做。也許這樣解釋過於專業,那麼您只要想一想「網絡螞蟻」、「網際快車FlashGet」中的「多點同時下載」便可,該參數實際上就是限制最多能夠用幾個「點」。默認設置爲0,即爲:不限制。但須要注意,若是將該值設置的太小會引發訪問問題,若是沒有特殊須要或者訪問量壓力並不是很大能夠保持默認值,若是訪問量很大則推薦設置爲2048。
好了,解釋了這麼多,讓咱們看看通過修改後Perfork.c配置段的推薦配置:

<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 1024
MaxClients 768
MaxRequestsPerChild 0
</IfModule>


完成了上述對Apache的調整,Apache已經得到了較大的性能改善。記住,在修改任何參數後都須要重啓Apache才能生效的。有關Apache的優化遠遠不止這些,有興趣的用戶能夠閱讀Apache手冊文檔或者尋找一些文獻資料學習。
2. PHP優化對於PHP的優化主要是對php.ini中的相關主要參數進行合理調整和設置,如下咱們就來看看php.ini中的一些對性能影響較大的參數應該如何設置。
# vi /etc/php.ini
(1) PHP函數禁用找到:
disable_functions =
該選項能夠設置哪些PHP函數是禁止使用的,PHP中有一些函數的風險性仍是至關大的,能夠直接執行一些系統級腳本命令,若是容許這些函數執行,當PHP程序出現漏洞時,損失是很是嚴重的!如下咱們給出推薦的禁用函數設置:
disable_functions = phpinfo,passthru,exec,system,popen,chroot,escapeshellcmd,escapeshellarg,shell_exec,proc_open,proc_get_status
需注意:若是您的服務器中含有一些系統狀態檢測的PHP程序,則不要禁用shell_exec,proc_open,proc_get_status等函數。
(2) PHP腳本執行時間找到:
max_execution_time = 30
該選項設定PHP程序的最大執行時間,若是一個PHP腳本被請求,且該PHP腳本在max_execution_time時間內沒能執行完畢,則PHP再也不繼續執行,直接給客戶端返回超時錯誤。沒有特殊須要該選項可保持默認設置30秒,若是您的PHP腳本確實須要長執行時間則能夠適當增大該時間設置。
(3) PHP腳本處理內存佔用找到:
memory_limit = 8M
該選項指定PHP腳本處理所能佔用的最大內存,默認爲8MB,若是您的服務器內存爲1GB以上,則該選項能夠設置爲12MB以得到更快的PHP腳本處理效率。
(4) PHP全局函數聲明找到:
register_globals = Off
網絡上不少關於PHP設置的文章都推薦將該選項設置爲On,其實這是一種及其危險的設置方法,極可能引發嚴重的安全性問題。若是沒有特殊的須要,強烈推薦保留默認設置!
(5) PHP上傳文件大小限制找到:
upload_max_filesize = 2M
該選項設定PHP所能容許最大上傳文件大小,默認爲2MB。根據實際應用需求,能夠適當增大該設置。
(6) Session存儲介質找到:
session.save_path
若是你的PHP程序使用Session對話,則能夠將Session存儲位置設置爲/dev/shm,/dev/shm是Linux系統獨有的TMPFS 文件系統,是之內存爲主要存儲方式的文件系統,比RAMDISK更優秀,由於能夠使用DISKSWAP做爲補充,並且是系統自帶的功能模塊,不須要另行配置。想一想看,從磁盤IO操做到內存操做,速度會快多少?只是須要注意,存儲在/dev/shm的數據,在服務器重啓後會所有丟失。不過這對於 Session來講是無足輕重的
(7)找到short_open_tag = Off
修改爲short_open_tag = On,一些國內的php程序不標準,關閉可能會出錯。

2一、mysql優化及安全設置
Mysql的優化設置
打開/etc/my.cnf文件,修改如下設置,若是沒有,可手動添加。調整設置時,請量力而行,這與你的服務器的配置有關,特別是內存大小。如下設置比較適合於1G內存的服務器,但並不絕對。
#指定索引緩衝區的大小,它決定索引處理的速度,尤爲是索引讀的速度。經過檢查狀態值Key_read_requests和Key_reads,能夠知道 key_buffer_size設置是否合理。比例key_reads / key_read_requests應該儘量的低,至少是1:100,1:1000更好(上述狀態值能夠使用show status like 'key_reads'得到)。key_buffer_size只對MyISAM表起做用。即便你不使用MyISAM表,可是內部的臨時磁盤表是 MyISAM表,也要使用該值。能夠使用檢查狀態值created_tmp_disk_tables得知詳情。
key_buffer = 384M
#要求MySQL能有的鏈接數量。當主要MySQL線程在一個很短期內獲得很是多的鏈接請求,這就起做用,而後主線程花些時間(儘管很短)檢查鏈接而且啓動一個新線程。back_log值指出在MySQL暫時中止回答新請求以前的短期內多少個請求能夠被存在堆棧中。只有若是指望在一個短期內有不少鏈接,你須要增長它,換句話說,這值對到來的TCP/IP鏈接的偵聽隊列的大小。你的操做系統在這個隊列大小上有它本身的限制。試圖設定back_log高於你的操做系統的限制將是無效的。默認數值是50
back_log = 200
#一個包的最大尺寸。消息緩衝區被初始化爲net_buffer_length字節,可是可在須要時增長到max_allowed_packet個字節。缺省地,該值過小必能捕捉大的(可能錯誤)包。若是你正在使用大的BLOB列,你必須增長該值。它應該象你想要使用的最大BLOB的那麼大。
max_allowed_packet = 4M
#容許的同時客戶的數量。增長該值增長 mysqld要求的文件描述符的數量。這個數字應該增長,不然,你將常常看到 Too many connections 錯誤。 默認數值是100
max_connections = 1024
#指定表高速緩存的大小。每當MySQL訪問一個表時,若是在表緩衝區中還有空間,該表就被打開並放入其中,這樣能夠更快地訪問表內容。經過檢查峯值時間的狀態值Open_tables和Opened_tables,能夠決定是否須要增長table_cache的值。若是你發現open_tables等於 table_cache,而且opened_tables在不斷增加,那麼你就須要增長table_cache的值了(上述狀態值能夠使用show status like 'Open_tables'得到)。注意,不能盲目地把table_cache設置成很大的值。若是設置得過高,可能會形成文件描述符不足,從而形成性能不穩定或者鏈接失敗。
table_cache = 512
#每一個線程排序所需的緩衝
sort_buffer_size = 4M
#當一個查詢不斷地掃描某一個表,MySQL會爲它分配一段內存緩衝區。read_buffer_size變量控制這一緩衝區的大小。若是你認爲連續掃描進行得太慢,能夠經過增長該變量值以及內存緩衝區大小提升其性能。
read_buffer_size = 4M
#加速排序操做後的讀數據,提升讀分類行的速度。若是正對遠遠大於可用內存的表執行GROUP BY或ORDER BY操做,應增長read_rnd_buffer_size的值以加速排序操做後面的行讀取。仍然不明白這個選項的用處……
read_rnd_buffer_size = 8M
#用於REPAIR TABLE。不明白這個選項的用處,百度上找到的設置方向也是五花八門,有128M、64M、32M等,折中選一個。
myisam_sort_buffer_size = 64M
#能夠複用的保存在中的線程的數量。若是有,新的線程從緩存中取得,當斷開鏈接的時候若是有空間,客戶的線置在緩存中。若是有不少新的線程,爲了提升性能能夠這個變量值。經過比較 Connections 和 Threads_created 狀態的變量,能夠看到這個變量的做用。
thread_cache_size = 128
#查詢結果緩存。第一次執行某條SELECT語句的時候,服務器記住該查詢的文本內容和它返回的結果。服務器下一次碰到這個語句的時候,它不會再次執行該語句。做爲代替,它直接從查詢緩存中的獲得結果並把結果返回給客戶端。
query_cache_size = 32M
#最大併發線程數,cpu數量*2
thread_concurrency = 2
#設置超時時間,能避免長鏈接
wait_timeout = 120
#關閉不須要的表類型,若是你須要,就不要加上這個
skip-innodb
skip-bdb
關於mysql的優化設置及檢查,這篇文章很值得一看 http://tech.itdb.cn/n/200607/27/n20060727_30398.shtml
Mysql的安全設置
打開/etc/my.cnf文件,修改如下設置,若是沒有,可手動添加。
#取消文件系統的外部鎖
skip-locking
#不進行域名反解析,注意由此帶來的權限/受權問題
skip-name-resolve
#禁止MySQL中用「LOAD DATA LOCAL INFILE」命令。這個命令會利用MySQL把本地文件讀到數據庫中,而後用戶就能夠非法獲取敏感信息了。網絡上流傳的一些攻擊方法中就有用它的,它也是不少新發現的SQL Injection攻擊利用的手段!
local-infile = 0
#關閉遠程鏈接,即3306端口。這是MySQL的默認監聽端口。因爲此處MySQL只服務於本地腳本,因此不須要遠程鏈接。儘管MySQL內建的安全機制很嚴格,但監聽一個TCP端口仍然是危險的行爲,由於若是MySQL程序自己有問題,那麼未受權的訪問徹底能夠繞過MySQL的內建安全機制。(你必須肯定,你是否真的不須要遠程鏈接mysql)
skip-networking
修改完my.cnf後,還須要對mysql的用戶名、賬號、及默認數據庫進行調整
首先先登陸mysql,在終端窗口輸入 /usr/local/mysql/bin/mysql -u root -p
而後會提示輸入密碼,輸入正確密碼後,會出現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; (刪除默認的test數據庫)
mysql>flush privileges; (刷新mysql的緩存,讓以上設置當即生效)
mysql>quit;
爲了使以上優化和安全設置生效,請重啓Mysql服務或Linux。
關於Mysql的安全設置,這篇文章很值得一看
http://www.unixren.com/linux/bencandy.php?fid=21&id=459

2二、操做系統安全調整
一、 CentOS或Red Had Enterprise Linux 4 的用戶要首先要打開SElinux,方法是修改/etc/selinux/config文件中的SELINUX="" 爲enforcing 。它能夠保證你的系統不會非正常的崩潰。有些人認爲應該關閉,我強烈不推薦,固然只是將centos用來玩玩,不是用於實際服務器則無所謂了。
二、啓用iptables 防火牆,對增長系統安全有許多好處。設置好防火牆的規則。
三、執行setup 關閉那些不須要的服務 ,記住少開一個服務,就少一個危險。
四、禁止Control-Alt-Delete 鍵盤關閉命令
在"/etc/inittab" 文件中註釋掉下面這行(使用#):
ca::ctrlaltdel:/sbin/shutdown -t3 -r now 
改成:
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now 
爲了使這項改動起做用,輸入下面這個命令:
# /sbin/init q
五、給"/etc/rc.d/init.d" 下script文件設置權限
給執行或關閉啓動時執行的程序的script文件設置權限。
# chmod -R 700 /etc/rc.d/init.d/* 
這表示只有root才容許讀、寫、執行該目錄下的script文件。
六、修改"/etc/host.conf"文件
"/etc/host.conf"說明了如何解析地址。編輯"/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 
第一項設置首先經過DNS解析IP地址,而後經過hosts文件解析。第二項設置檢測是否"/etc/hosts"文件中的主機是否擁有多個IP地址(好比有多個以太口網卡)。第三項設置說明要注意對本機未經許可的電子欺騙。
七、使"/etc/services"文件免疫
使"/etc/services"文件免疫,防止未經許可的刪除或添加服務:
# chattr +i /etc/services
8.阻止你的系統響應任何從外部/內部來的ping請求。
既然沒有人能ping通你的機器並收到響應,你能夠大大加強你的站點的安全性。你能夠加下面的一行命令到/etc/rc.d/rc.local,以使每次啓動後自動運行。
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
九、對你的系統上全部的用戶設置資源限制能夠防止DoS類型攻擊(denial of service attacks)
如最大進程數,內存數量等。例如,對全部用戶的限制象下面這樣:
vi /etc/security/limits.conf
下面的代碼示例中,全部用戶每一個會話都限制在 10 MB,並容許同時有四個登陸。第三行禁用了每一個人的內核轉儲。第四行除去了用戶 bin 的全部限制。ftp 容許有 10 個併發會話(對匿名 ftp 賬號尤爲實用);managers 組的成員的進程數目限制爲 40 個。developers 有 64 MB 的 memlock 限制,wwwusers 的成員不能建立大於 50 MB 的文件。
清單 3. 設置配額和限制
* 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。
十、註釋掉不須要的用戶和用戶組。
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
對於不須要的用戶所有加 # 註釋掉。注意,我不建議直接刪除,當你某種緣由須要某個用戶時,本身從新會很麻煩。
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:
對於不須要的用戶組所有加 # 註釋掉。注意,我不建議直接刪除,當你某種緣由須要某個用戶組時,本身從新會很麻煩。
十一、用chattr命令給下面的文件加上不可更改屬性。
# chattr +i /etc/passwd
# chattr +i /etc/shadow
# chattr +i /etc/group
# chattr +i /etc/gshadow
注意執行這個操做後,以root身份都不能向系統增長用戶或者修改密碼了。若是咱們要增長用戶或者修改密碼的。應該先用chattr -i /etc/passwd等命令解除不可寫設置,再進行操做。
十二、修改sshd的端口。
修改/etc/ssh/sshd_config,將裏面的 Port 改成 59825,(具體的端口你隨意。固然不能和其餘程序的端口衝突了)。並註釋掉前面的#號,而後
pkill sshd
service sshd start
就好了
注意最好在本地修改這個端口,不然容易出現把本身鎖在外面的狀況。修改了本處端口後,還要注意修改防火牆的ssh端口。
1三、 內核參數調整
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 //查看
1四、常常檢查系統日誌。系統日誌主要位於/var/log/目錄下。防患於未然。
經過以上設置你的系統通常來講就比較安全了。固然安全與不安全是道與魔的鬥爭。
通過這幾個步驟,咱們一個比較安全的LAMP服務器就環境基本創建成功啦。感受上也不是很難,是吧?

6、平常經常使用的管理功能
# 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

2三、mysql數據庫自動備份並上傳到服務器
服務器數據的備份
一、數據備份
爲了防止意外狀況的發生形成數據的丟失,關鍵數據或整個系統或對有選擇的系統部分,在本地和異地進行定時備份,以保證系統所有或部分在災害出現時也能持續運行。
二、具體方案
1)、數據庫每日備份
天天4:00,將Cnprintbbs數據庫拷貝至/root/back後進行壓縮,而後上傳至192.168.1.9服務器上,/root/back留有壓縮版本。
運行腳本/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!"


保存,並設置計劃任務。
# crontab -e
增長一行:
00 4 * * * /root/scripts/back.sh
天天凌晨4點將自動備份數據庫並上傳。
2)、數據庫即時備份
每隔1小時,將Cnprintbbs數據庫拷貝至/root/back/hour目錄進行備份,而後將壓縮文件傳給特定服務器。
例子:

#!/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/下前一天的日誌,進行壓縮,而後上傳至192.168.9.1服務器。
運行腳本/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


注:計劃任務經過/etc/crontab –e來進行設置
4)、即時日誌備份
直接運行/home/root/tools/upload 將最新日誌上傳至192.168.1.9服務器,方便研發部門查看。
運行腳本/home/root/tools/upload,(若是全部服務器的日誌都須要上傳,能夠運行網關服務器上的/home/root/tools/allupload)
2四、Squid緩存刪除及重啓
1. squid使用時間長了,速度會變慢,個人建議是每2小時kill掉squid 進程,RunAccel腳本會自動再啓動的它。
2. 寫一腳本,放進crontab中,天天凌晨4點左右把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


7、安裝vBulletin 3.6.8和vBseo 3.1.0
vBulletin和vbseo 3.0.1都是商業軟件,本地址的下載連接僅供試用,請於下載後24小時內刪除,購買正版請聯繫相應官方。
2五、安裝vBulletin 3.6.8
vBulletin 是一個強大的論壇社區解決方案,使用它您能夠輕易爲您的網站建立論壇系統。vBulletin 基於 PHP 和 MySQL (一個高效開源的數據庫引擎)。這些堅固後臺技術使咱們開發的產品有着與衆不同的速度和可靠的穩定性。
wget http://www.cnprint.org/bbs/blogs/1/a...1234567890.zip
安裝教程請見:http://www.vbulletin-china.cn/docs/h...rsion=30608602
特別提醒:請打開config.php有關memcache設置。
2六、安裝vBseo 3.1.0
vBSEO爲vBulletin(最流行的網站論壇)搜索優化程序, 用它可很容易地爲你的vBulletin網站提供強大的搜索功能。
下載vBseo安裝程序:
wget http://www.cnprint.org/bbs/blogs/1/a...eygen-gysn.zip
一、打開vBseo壓縮包,解壓縮,FTP以二進制方式上傳upload文件夾下全部文件及目錄至vbb對應目錄。
二、Linux系統下需首先修改"vB-root/includes/config_vbseo.php" 文件屬性爲可寫(CHMOD 666)
三、確認vbb控制檯啓動插件功能, 在插件與產品欄目--產品管理--添加/管理產品,import導入'Product'目錄中的crawlability_vbseo.xml (若是中文UTF-8版個別狀況下導入錯誤則能夠把此文件用編輯軟件另存爲utf-8編碼),產品添加完畢。
四、將'htaccess'目錄中.htaccess 文件上傳至論壇根目錄,有些操做系統下.htaccess 不可見,這時能夠只將htaccess.txt文件上傳到vbb根目錄,刪除剛纔上傳的.htaccess文件,將剛纔上傳的txt文件改名爲. htaccess。
五、在瀏覽器中輸入http: //你的網址/你的VBB目錄/vbseocp.php配置你的vbseo,輸入兩次你的Vbseo管理面板密碼,也能夠事先編輯upload\ includes\config_vbseo.php文件,在define('VBSEO_ADMIN_PASSWORD', 'ABC')中加入你想要的管理密碼(就在後面的引號中間加入,好比ABC)。
六、vbseo管理界面下若是須要輸入受權碼請用附帶的keygen爲你的Domain算號並拷貝32位受權碼便可,配置完畢後將第二步中'config_vbseo.php' 文件屬性改回只讀(CHMOD 644)
七、開始使用你的VBSEO,第一次安裝之後能夠直接經過VBB後臺進入Vbseo管理界面。
八、若是有必要,將htacess規則移到httpd.conf中。能夠大大下降apache的負載。

NameVirtualHost *:80
<VirtualHost *:80>
ServerName  www.cnprint.org DocumentRoot "/usr/local/apache2/htdocs" #ErrorLog logs/error_log # CustomLog logs/access_log combined </VirtualHost> <Directory "/usr/local/apache2/htdocs"> Options Indexes FollowSymLinks AllowOverride none Order allow,deny Allow from all </Directory> <Directory "/usr/local/apache2/htdocs/bbs"> 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 </Directory>
相關文章
相關標籤/搜索