首页 > 代码库 > 基于CentOS 5.4搭建nginx+php+spawn-fcgi+mysql高性能php平台

基于CentOS 5.4搭建nginx+php+spawn-fcgi+mysql高性能php平台

一、安装准备 1.1平台环境:

  1. CentOS 5.4 x86_64 GNU/Linux
  2. nginx-0.8.21
  3. php-5.2.9
  4. spawn-fcgi-1.6.3
  5. mysql-5.1.34

.2系统安装及分区:
1.2.1操作系统安装:
         安装过程中选择最少的包,采用文本模式安装,不安装图形。
1.2.3系统分区:
         /boot  100M    (大约100左右) 
         SWAP  4G      物理内存的2倍(如果你的物理内存大于4G,分配4G即可) 
         /       50G 
         /data             剩余所有空间.
         注:具体分区请根据相关业务划分
1.2.4系统软件包安装规范
    系统约定: 
         软件源代码包存放位置             /usr/local/src 
         源码包编译安装位置(prefix)     /usr/local/software_name 
         脚本以及维护程序存放位置       /usr/local/sbin 
         MySQL 数据库位置                /data/mysql/data(可按情况设置) 
         网站根目录                          /data/www/wwwroot(可按情况设置) 
         虚拟主机日志根目录               /data/logs(可按情况设置) 
         Nginx运行账户                     www:www 
         install_software_name.sh     //存放编译参数脚本习惯将所有编译脚本存放在install_software_name.sh便于升级和更新软件. 
1.3.系统初始化
#vi init_network.sh

#welcome cat << EOF +--------------------------------------------------------------+ |         === Welcome to Centos System init ===                | +--------------------------------------------------------------+ +----------------------Author:NetSeek--------------------------+ EOF #disable ipv6 cat << EOF +--------------------------------------------------------------+ |         === Welcome to Disable IPV6 ===                      | +--------------------------------------------------------------+ EOF echo "alias net-pf-10 off" >> /etc/modprobe.conf echo "alias ipv6 off" >> /etc/modprobe.conf /sbin/chkconfig --level 35 ip6tables off echo "ipv6 is disabled!" #disable selinux sed -i ‘/SELINUX/s/enforcing/disabled/‘ /etc/selinux/config echo "selinux is disabled,you must reboot!" #vim sed -i "8 s/^/alias vi=‘vim‘/" /root/.bashrc echo ‘syntax on‘ > /root/.vimrc #zh_cn sed -i -e ‘s/^LANG=.*/LANG="en"/‘   /etc/sysconfig/i18n #init_ssh ssh_cf="/etc/ssh/sshd_config" sed -i -e ‘74 s/^/#/‘ -i -e ‘76 s/^/#/‘ $ssh_cf sed -i "s/#UseDNS yes/UseDNS no/" $ssh_cf #client sed -i -e ‘44 s/^/#/‘ -i -e ‘48 s/^/#/‘ $ssh_cf echo "ssh is init is ok.............." #chkser #tunoff services #-------------------------------------------------------------------------------- cat << EOF +--------------------------------------------------------------+ |         === Welcome to Tunoff services ===                   | +--------------------------------------------------------------+ EOF #--------------------------------------------------------------------------------- for i in `ls /etc/rc3.d/S*` do              CURSRV=`echo $i|cut -c 15-` echo $CURSRV case $CURSRV in          crond | irqbalance | microcode_ctl | network | random | sendmail | sshd | syslog | local | mysqld )      echo "Base services, Skip!"      ;;      *)          echo "change $CURSRV to off"          chkconfig --level 235 $CURSRV off          service $CURSRV stop      ;; esac done

1.4 系统环境部署及调整
检查系统是否正常 
# tail -n100 /var/log/messages   (检查有无系统级错误信息) 
# dmesg                     (检查硬件设备是否有错误信息) 
# ifconfig                    (检查网卡设置是否正确) 
# ping www.cqseo.org       (检查网络是否正常)
1.5使用 yum 程序安装所需开发包
1.5.1 更换快源

#cd /etc/yum.repos.d/

#mv CentOS-Base.repo CentOS-Base.repo.linuxtone

#wget http://docs.linuxtone.org/soft/lemp/CentOS-Base.repo

1.5.2 yum安装相关软件包:

#yum -y install ntp vim-enhanced gcc gcc-c++ gcc-g77 flex bison autoconf automake glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel libtool* zlib-devel libxml2-devel libjpeg-devel libpng-devel libtiff-devel fontconfig-devel freetype-devel libXpm-devel gettext-devel curl curl-devel pam-devel e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers

 1.6 定时校正服务器时钟,定时与中国国家授时中心授时服务器同步 
# crontab -e 
加入一行: 15 3 * * * /usr/sbin/ntpdate 210.72.145.44 > /dev/null 2>&1

1.7下载相关软件包
#cd /usr/local/src
#vi list_tar.list

http://docs.linuxtone.org/soft/lemp/ImageMagick.tar.gz
 
http://docs.linuxtone.org/soft/lemp/PDO_MYSQL-1.0.2.tgz
 
http://docs.linuxtone.org/soft/lemp/eaccelerator-0.9.5.3.tar.bz2
 
http://docs.linuxtone.org/soft/lemp/imagick-2.2.2.tgz
 
http://docs.linuxtone.org/soft/lemp/libiconv-1.13.tar.gz
 
http://docs.linuxtone.org/soft/lemp/libmcrypt-2.5.8.tar.gz
 
http://docs.linuxtone.org/soft/lemp/mcrypt-2.6.8.tar.gz
 
http://docs.linuxtone.org/soft/lemp/memcache-2.2.5.tgz
 
http://docs.linuxtone.org/soft/lemp/mhash-0.9.9.9.tar.gz
 
http://docs.linuxtone.org/soft/lemp/mysql-5.1.34.tar.gz
 
http://docs.linuxtone.org/soft/lemp/pcre-7.8.tar.gz
 
http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
 
http://docs.linuxtone.org/soft/lemp/php-5.2.9.tar.bz2
 
http://sysoev.ru/nginx/nginx-0.8.21.tar.gz
 
http://docs.linuxtone.org/soft/lemp/ZendOptimizer-3.3.3-linux-glibc23-x86_64.tar.gz

#wget -i list_tar.list
1.8.添加nginx 运维账户:
#vi add_webuser.sh

/usr/sbin/groupadd www
 
/usr/sbin/useradd -g www www
 
mkdir -p /data/www/wwwroot
 
chmod +w /data/www/wwwroot
 
chown www:www /data/www/wwwroot -R

#sh add_webuser.sh
二.编译安装
2.1 编译安装pcre

#tar zxvf pcre-7.8.tar.gz 
#cd pcre-7.8
 
#./configure && make && make install

2.2 编译安装nginx
#tar zxvf nginx-0.8.21.tar.gz
 
#cd nginx-0.8.21

2.2.1 附加:修改nginx源代码,伪装nginx服务器(仅供参考,安全还得认真做起^.^):
(1).修改gcc
#vi auto/cc/gcc

NGX_GCC_OPT="-O"

NGX_GCC_OPT="-O3"

(2).修改nginx.h 
#vi nginx-0.8.21/src/core/nginx.h 

#define NGINX_VERSION      "0.7.58"
 
#define NGINX_VER          "nginx/" NGINX_VERSION

修改为:

#define NGINX_VERSION      "1.0"
 
#define NGINX_VER          "LTWS/" NGINX_VERSION

(3).修改nginx_http_header_filter_module 
#vi nginx-0.8.21/src/http/ngx_http_header_filter_module.c

static char ngx_http_server_string[] = "Server: nginx" CRLF;

修改为:

static char ngx_http_server_string[] = "Server: LTWS" CRLF;

(4).修改ngx_http_special_response.c
#vi nginx-0.8.21/src/http/ngx_http_special_response.c
将如下

static u_char ngx_http_error_full_tail[] =  

"<hr><center>" NGINX_VER "</center>" CRLF  

"</body>" CRLF  

"</html>" CRLF  

;  

static u_char ngx_http_error_tail[] =  

"<hr><center>nginx</center>" CRLF  

"</body>" CRLF  

"</html>" CRLF  

;

static u_char ngx_http_error_full_tail[] =  

"<hr><center> "NGINX_VER" </center>" CRLF  

"<hr><center>http://www.linuxtone.com</center>" CRLF  

"</body>" CRLF  

"</html>" CRLF  

;  

static u_char ngx_http_error_tail[] =  

"<hr><center>HMGWS</center>" CRLF  

"</body>" CRLF  

"</html>" CRLF  

;

2.2.2 nginx 编译安装

./configure \
 
    "--user=www" \
 
    "--group=www" \
 
    "--prefix=/usr/local/nginx/" \
 
    "--with-http_stub_status_module" \
 
    "--with-http_ssl_module" \
 
    "--with-md5=/usr/lib" \
 
    "--with-sha1=/usr/lib"
 
make
 
make install

2.3 编译安装配置mysql

./configure      "--prefix=/usr/local/mysql"      "--localstatedir=/data/mysql/data"      "--with-comment=Source"      "--with-server-suffix=-Linuxtone.Org"      "--enable-assembler"      "--with-charset=utf8"      "--with-collation=utf8_chinese_ci"      "--with-collation=utf8_chinese_ci"      "--with-extra-charsets=complex"      "--enable-thread-safe-client"      "--with-big-tables"      "--with-readline"      "--with-ssl"      "--with-embedded-server"      "--enable-local-infile"      "--with-plugins=innobase" 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 . mkdir -p /data/mysql/data chown -R mysql /data/mysql/data cp share/mysql/my-huge.cnf /etc/my.cnf.bak wget http://www.caifw.com/api/my.cnf sed -i ‘50 s/^/#/‘ /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

2.4 编译安装php 
2.4.1安装php相应的lib
  2.4.1.1 libiconv-1.13

#tar zxvf libiconv-1.13.tar.gz #cd libiconv-1.13 #./configure --prefix=/usr && make && make install

2.4.1.2 libmcrypt-2.5.8

#tar zxvf libmcrypt-2.5.8.tar.gz #cd libmcrypt-2.5.8/ #./configure --prefix=/usr && make && make install #echo "/usr/lib" >> /etc/ld.so.conf #ldconfig #cd libltdl/ #./configure --enable-ltdl-install #make && make install

2.4.1.3 mhash-0.9.9.9

#tar zxvf mhash-0.9.9.9.tar.gz #cd mhash-0.9.9.9 #./configure --prefix=/usr && make && make install #ldconfig

2.4.1.4 mcrypt-2.6.8

#tar zxvf mcrypt-2.6.8.tar.gz #cd mcrypt-2.6.8 #./configure --prefix=/usr && make&& make install

2.4.2 安装spawn-fcgi

#tar zvxf spawn-fcgi-1.6.3.tar.gz #cd spawn-fcgi-1.6.3 #./configure && make && make install

2.4.3 安装php

#tar jvxf php-5.2.9.tar.bz2 #vi install_php.sh ./configure       "--prefix=/usr/local/php"      "--enable-fastcgi"      "--enable-fpm"      "--enable-discard-path"      "--enable-force-cgi-redirect"      "--with-config-file-path=/usr/local/php/etc"      "--with-mysql=/usr/local/mysql"      "--with-mysqli=/usr/local/mysql/bin/mysql_config"      "--with-iconv-dir"      "--with-freetype-dir"      "--with-jpeg-dir"      "--with-png-dir"      "--with-gd"      "--with-zlib"      "--with-libxml-dir"      "--with-curl"      "--with-curlwrappers"      "--with-openssl"      "--with-mhash"      "--with-xmlrpc"      "--with-mcrypt"      "--with-ldap"      "--with-ldap-sasl"      "--enable-xml"      "--disable-rpath"      "--enable-discard-path"      "--enable-safe-mode"      "--enable-bcmath"      "--enable-shmop"      "--enable-sysvsem"      "--enable-inline-optimization"      "--enable-mbregex"      "--enable-mbstring"      "--enable-gd-native-ttf"      "--enable-ftp"      "--enable-pcntl"      "--enable-sockets"      "--enable-zip"      "--disable-debug"      "--disable-ipv6" make ZEND_EXTRA_LIBS=‘-liconv‘ make install cp php.ini-dist /usr/local/php/etc/php.ini

#sh install_php.sh
2.4.4安装PHP扩展模块
  2.4.4.1 memcache-2.2.5

#tar zvxf memcache-2.2.5.tgz #cd memcache-2.2.5 #/usr/local/php/bin/phpize #./configure --with-php-config=/usr/local/php/bin/php-config #make && make install

2.4.4.2 eaccelerator-0.9.5.3

#tar jvxf eaccelerator-0.9.5.3.tar.bz2#cd eaccelerator-0.9.5.3#/usr/local/php/bin/phpize#./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config#make && make install

2.4.4.3 PDO_MYSQL-1.0.2

#tar zxvf PDO_MYSQL-1.0.2.tgz #cd PDO_MYSQL-1.0.2#/usr/local/php/bin/phpize#./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql#make && make install

2.4.4.4 ImageMagick

#tar zxvf ImageMagick.tar.gz#cd ImageMagick-6.5.1-2/   #./configure --enable-shared --with-modules --without-x --with-gs-font-dir=default --with-perl=yes --with-xml=yes --with-zlib=yes --with-jpeg=yes # make && make install

2.4.4.5 imagick-2.2.2

#tar zxvf imagick-2.2.2.tgz #cd imagick-2.2.2/ #/usr/local/php/bin/phpize #./configure --with-php-config=/usr/local/php/bin/php-config #make #make install

2.4.5脚本配置php.ini
# vi init_php.sh

#!/bin/bash fcgi_cf="/usr/local/php/etc/php.ini" ea(){ cat << EOF [eAccelerator] zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so" eaccelerator.shm_size="32" eaccelerator.cache_dir="/data/cache/ea" 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" EOF } #mkdir mkdir -p /data/cache/ea ea >> $fcgi_cf #config for php.ini sed -i ‘205 s#;open_basedir =#open_basedir = /data/www/wwwroot:/tmp#g‘ $fcgi_cf sed -i ‘210 s#disable_functions =#;disable_functions = phpinfo,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server#g‘ $fcgi_cf sed -i ‘/expose_php/s/On/Off/‘ $fcgi_cf sed -i ‘/display_errors/s/On/Off/‘ $fcgi_cf sed -i ‘s#extension_dir = "./"#extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"\nextension = "memcache.so"\nextension = "pdo_mysql.so"\nextension = "imagick.so"\n#‘ $fcgi_cf sed -i ‘s#output_buffering = Off#output_buffering = On#‘ $fcgi_cf

2.5安装Zend

#tar zvxf ZendOptimizer-3.3.3-linux-glibc23-x86_64.tar.gz # cd ZendOptimizer-3.3.3-linux-glibc23-x86_64 # ./install

注:php.ini的位置为/usr/local/php/etc 服务器不选用apache
三、配置整合
3.1 配置nginx
注:本文spawn-fcgi开启9000跟9001两个端口,利用nginx的upstream负载均衡php程序到不同的fcgi端口上面,解决502 gateway错误
#cd /usr/local/nginx/conf
#cp nginx.conf nginx.conf.linuxtone
#vi nginx.conf

user  www www; worker_processes 10; pid /var/run/nginx.pid; # [ debug | info | notice | warn | error | crit ] error_log  /dev/null; #error_log /data/logs/nginxerror.log; #Specifies the value for maximum file descriptors that can be opened by this process. worker_rlimit_nofile 51200; events {        use epoll;        #maxclient = worker_processes * worker_connections / cpu_number        worker_connections 51200; } http {        include       /usr/local/nginx/conf/mime.types;        default_type  application/octet-stream;        #charset  gb2312;        charset utf8;        log_format  main  ‘$remote_addr - $remote_user [$time_local] $request ‘                          ‘"$status" $body_bytes_sent "$http_referer" ‘                          ‘"$http_user_agent" "$http_x_forwarded_for"‘;        #access_log  /data/www/logs/access.log  main;        access_log  /dev/null;        #General Options        server_names_hash_bucket_size 128;        client_header_buffer_size 32k;        large_client_header_buffers 4 32k;        ignore_invalid_headers   on;        recursive_error_pages    on;        server_name_in_redirect off;               sendfile                 on;        #timeouts        keepalive_timeout 60;               #TCP Options        tcp_nopush  on;        tcp_nodelay on;        #fastcgi options        fastcgi_connect_timeout 300;        fastcgi_send_timeout 300;        fastcgi_read_timeout 300;               fastcgi_buffer_size 128k;        fastcgi_buffers 4 128k;        fastcgi_busy_buffers_size 128k;        fastcgi_temp_file_write_size 128k;        fastcgi_intercept_errors on;        ssi on;        ssi_silent_errors on;        ssi_types text/shtml;        #size limits        client_max_body_size       50m;        client_body_buffer_size    256k;        #gzip  compression        gzip on;        gzip_min_length  0;        gzip_buffers     16 8k;        gzip_http_version 1.0;        gzip_comp_level 9;        gzip_types       text/plain text/css image/x-icon image/png;        gzip_vary on;        #temp files        proxy_temp_path            /dev/shm/proxy_temp;        fastcgi_temp_path          /dev/shm/fastcgi_temp;        client_body_temp_path      /dev/shm/client_body_temp;        #client_body_temp_path  /usr/local/nginx/client_body_temp 1 2;        #proxy_temp_path        /usr/local/nginx/proxy_temp 1 2;        #fastcgi_temp_path      /usr/local/nginx/fastcgi_temp 1 2;               #upstream        upstream  spawn {        # ip_hash;         server   127.0.0.1:9000 max_fails=0 fail_timeout=30s;         server   127.0.0.1:9001 max_fails=0 fail_timeout=30s;        }        # The following includes are specified for virtual hosts         #www.linuxtone.org         include          /usr/local/nginx/conf/vhosts/www.linuxtone.org.conf; }

#mkdir vhosts
#vi vhosts/www.linuxtone.org.conf

server        {                listen       80;                server_name  www.linuxtone.org .linuxtone.org;                index index.html index.htm index.php;                root  /data/www/wwwroot/linuxtone;                error_page 404 http://www.linuxtone.org;                #rewrite ^/bbs/(.*) http://bbs.linuxtone.org/$1;                location ~ .*\.php?$                {                        fastcgi_pass spawn;                        include /usr/local/nginx/conf/spawn_php5.conf;                        fastcgi_index  index.php;                }                location ~* \.(js|css|jpg|jpeg|gif|png)$ {                if (-f $request_filename) {                   access_log   off;                   expires      1d;                   break;                   }                 }        }

#vi /usr/local/nginx/conf/spawn_php5.conf

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1; fastcgi_param  SERVER_SOFTWARE    nginx; fastcgi_param  QUERY_STRING       $query_string; fastcgi_param  REQUEST_METHOD     $request_method; fastcgi_param  CONTENT_TYPE       $content_type; fastcgi_param  CONTENT_LENGTH     $content_length; fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name; fastcgi_param  SCRIPT_NAME        $fastcgi_script_name; fastcgi_param  REQUEST_URI        $request_uri; fastcgi_param  DOCUMENT_URI       $document_uri; fastcgi_param  DOCUMENT_ROOT      $document_root; fastcgi_param  SERVER_PROTOCOL    $server_protocol; fastcgi_param  REMOTE_ADDR        $remote_addr; fastcgi_param  REMOTE_PORT        $remote_port; fastcgi_param  SERVER_ADDR        $server_addr; fastcgi_param  SERVER_PORT        $server_port; fastcgi_param  SERVER_NAME        $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect #fastcgi_param  REDIRECT_STATUS    200;

3.2 配置spawn-fcgi启动脚本
#mkdir /usr/local/php/sbin
# vi /usr/local/php/sbin/spawn-fcgi

#! /bin/sh set -e PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DESC="spawn-fcgi daemon" NAME=spawn-fcgi DAEMON=/usr/local/bin/$NAME # Gracefully exit if the package has been removed. test -x $DAEMON || exit 0 d_start() {   $DAEMON -a 127.0.0.1 -p 9000 -C 128 -u www -g www -f /usr/local/php/bin/php-cgi > /dev/null 2>&1   $DAEMON -a 127.0.0.1 -p 9001 -C 128 -u www -g www -f /usr/local/php/bin/php-cgi > /dev/null 2>&1 || echo -n " already running" } d_stop() {   /usr/bin/killall -9 php-cgi > /dev/null 2>&1 || echo -n " not running" }    case "$1" in   start)         echo -n "Starting $DESC: $NAME"         d_start         echo "."         ;;   stop)         echo -n "Stopping $DESC: $NAME"         d_stop         echo "."         ;;   restart)         echo -n "Restarting $DESC: $NAME"         d_stop         sleep 1         d_start         echo "."         ;;   *)           echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2           exit 3         ;; esac exit 0

#chmod 755 /usr/local/php/sbin/spawn-fcgi
四、启动WEB服务
4.1.启动spawn-fcgi
#/usr/local/php/sbin/spawn-fcgi start
4.2.启动nginx
4.2.1检查nginx配置:
# /usr/local/nginx/sbin/nginx ?t     //返回如下信息说明配置正确

the configuration file /usr/local/nginx//conf/nginx.conf syntax is okconfiguration file /usr/local/nginx//conf/nginx.conf test is successful

#/usr/local/nginx/sbin/nginx    //启动nginx
4.3.加入开机启动
#vi /etc/rc.local
在最后加入:

ulimit -SHn 51200 /usr/local/nginx/sbin/nginx /usr/local/php/sbin/spawn-fcgi start

五、测试
#mkdir /data/www/wwwroot/linuxtone
#vi phpinfo.php

<?php Phpinfo(); ?>

打开浏览器输入:http://www.linuxtone.org/phpinfo.php
即可查看当前配置环境. 查看完成后出于安全考虑请再将此函数禁掉.

 (文章来自:http://www.cnblogs.com/ado-geek/archive/2012/05/31/2528098.html)