nginx 是一个高性能的HTTP和反向代理,负载均衡服务器,nginx是以事件驱动的方式编写的,所以有着非常高效的性能,闲话不多说,下面将在一台默认安装有rhel5.8的机器上,安装nginx + php (FastCGI模式)+mysql 配置成一个高效的web服务器,

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
目录
一,安装基本开发库及依赖的软件包
二,安装并配置mysql数据库
三,安装并配置nginx
四,安装PHP的加密算法库,编码转换库,等软件
五,安装php并配置为fastcgi模式
六,安装php加速器,xcache
七,整合nginx跟php(FastCGI模式)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~需要准备以下软件包,并复制到系统的/usr/src目录下
mysql-5.0.56.tar.gz       数据库,当然也可以是更高的版本,或者使用rpm包安装也是可以的
nginx-1.2.2.tar.gz          nginx,目前官方最新版是1.2.2的 
libiconv-1.13.1.tar.gz     编码转换库
libmcrypt-2.5.8.tar.bz2  加密算法库
mhash-0.9.9.9.tar.bz2   加密算法扩展库
mcrypt-2.6.8.tar.gz       加密算法工具
php-5.4.4.tar.bz2          php官方目前最新版,5.4的版本不用打fpm补丁,
xcache-2.0.0.tar.gz       xcacne PHP加速器,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

rhel5.8的系统上安装nginx+php(FastCGI)+mysql 来构建一个高效的web服务器

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
一,安装基本开发库,及相关依赖软件包

   
   
   
   
  1. #yum -y groupinstall "Development Libraries" "Development Tools" "X Software Development" 
  2. #yum -y install pcre-devel 

二,安装并配置mysql数据库
1 ,编译安装mysql数据库

   
   
   
   
  1. #cd /usr/src 
  2. #tar xzvf mysql-5.0.56.tar.gz  
  3. #cd mysql-5.0.56 
  4. #./configure --prefix=/usr/local/mysql --sysconfdir=/usr/local/mysql/etc --with-ssl \ 
  5. --localstatedir=/usr/local/mysql/database --enable-assembler --with-readline \ 
  6. --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables \ 
  7. --with-embedded-server --enable-local-infile --with-plugins=innobase 
  8. #make && make install 

2.把mysql的命令加入到系统搜索路径

   
   
   
   
  1. #vim /etc/profile 
  2. PATH=/usr/local/mysql/bin:$PATH   将次行加入到文件的44行 
  3.  
  4. #export PATH=/usr/local/mysql/bin:$PATH 

3.把mysql的头文件添加到系统搜索路径

   
   
   
   
  1. #ln -sv /usr/local/mysql/include/mysql /usr/include/mysql 

4,把mysql的库文件添加到系统搜索路径

   
   
   
   
  1. #vim /etc/ld.so.conf.d/mysql.conf 
  2. /usr/local/mysql/lib/mysql 
  3. #ldconfig

5,给mysql提供配置文件及服务启动脚本

   
   
   
   
  1. #cp /usr/src/mysql-5.0.56/support-files/my-huge.cnf /etc/my.cnf 
  2. #cp /usr/src/mysql-5.0.56/support-files/mysql.server /etc/init.d/mysqld 
  3. #chmod a+x /etc/init.d/mysqld 
  4. #chkconfig --add mysqld 
  5. #chkconfig mysqld on 

6,添加执行mysql的用户,及初始化数据库,

   
   
   
   
  1. #useradd -s /sbin/nologin mysql 
  2. #chown -R mysql:mysql /usr/local/mysql 
  3. #mysql_install_db --user=mysql 
  4. #service mysqld start 


三,安装并配置nginx
1. 编译安装nginx

   
   
   
   
  1. #useradd -s /sbin/nologin nginx 
  2. #cd /usr/src 
  3. #tar xzvf nginx-1.2.2.tar.gz 
  4. #cd nginx-1.2.2 
  5. #./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid \ 
  6. --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module \ 
  7. --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module \ 
  8. --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy \ 
  9. --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --with-pcre 
  10. #make && make install 

2.给nginx提供SysV服务启动脚本

   
   
   
   
  1. #vim /etc/init.d/nginx  内容如下 
  2. #!/bin/sh 
  3. # nginx - this script starts and stops the nginx daemon 
  4. # chkconfig:   - 85 15  
  5. # description:  Nginx is an HTTP(S) server, HTTP(S) reverse \ 
  6. #               proxy and IMAP/POP3 proxy server 
  7. # processname: nginx 
  8. # config:      /etc/nginx/nginx.conf 
  9. # config:      /etc/sysconfig/nginx 
  10. # pidfile:     /var/run/nginx.pid 
  11.   
  12. # Source function library. 
  13. . /etc/rc.d/init.d/functions 
  14.   
  15. # Source networking configuration. 
  16. . /etc/sysconfig/network 
  17.   
  18. # Check that networking is up. 
  19. [ "$NETWORKING" = "no" ] && exit 0 
  20.   
  21. nginx="/usr/local/nginx/sbin/nginx" 
  22. prog=$(basename $nginx) 
  23.   
  24. NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf" 
  25.   
  26. [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx 
  27.   
  28. lockfile=/var/lock/subsys/nginx 
  29.   
  30. make_dirs() { 
  31.    # make required directories 
  32.    user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` 
  33.    options=`$nginx -V 2>&1 | grep 'configure arguments:'` 
  34.    for opt in $options; do 
  35.        if [ `echo $opt | grep '.*-temp-path'` ]; then 
  36.            value=`echo $opt | cut -d "=" -f 2` 
  37.            if [ ! -d "$value" ]; then 
  38.                # echo "creating" $value 
  39.                mkdir -p $value && chown -R $user $value 
  40.            fi 
  41.        fi 
  42.    done 
  43.   
  44. start() { 
  45.     [ -x $nginx ] || exit 5 
  46.     [ -f $NGINX_CONF_FILE ] || exit 6 
  47.     make_dirs 
  48.     echo -n $"Starting $prog: " 
  49.     daemon $nginx -c $NGINX_CONF_FILE 
  50.     retval=$? 
  51.     echo 
  52.     [ $retval -eq 0 ] && touch $lockfile 
  53.     return $retval 
  54.   
  55. stop() { 
  56.     echo -n $"Stopping $prog: " 
  57.     killproc $prog -QUIT 
  58.     retval=$? 
  59.     echo 
  60.     [ $retval -eq 0 ] && rm -f $lockfile 
  61.     return $retval 
  62.   
  63. restart() { 
  64.     configtest || return $? 
  65.     stop 
  66.     sleep 1 
  67.     start 
  68.   
  69. reload() { 
  70.     configtest || return $? 
  71.     echo -n $"Reloading $prog: " 
  72.     killproc $nginx -HUP 
  73.     RETVAL=$? 
  74.     echo 
  75.   
  76. force_reload() { 
  77.     restart 
  78.   
  79. configtest() { 
  80.   $nginx -t -c $NGINX_CONF_FILE 
  81.   
  82. rh_status() { 
  83.     status $prog 
  84.   
  85. rh_status_q() { 
  86.     rh_status >/dev/null 2>&1 
  87.   
  88. case "$1" in 
  89.     start) 
  90.         rh_status_q && exit 0 
  91.         $1 
  92.         ;; 
  93.     stop) 
  94.         rh_status_q || exit 0 
  95.         $1 
  96.         ;; 
  97.     restart|configtest) 
  98.         $1 
  99.         ;; 
  100.     reload) 
  101.         rh_status_q || exit 7 
  102.         $1 
  103.         ;; 
  104.     force-reload) 
  105.         force_reload 
  106.         ;; 
  107.     status) 
  108.         rh_status 
  109.         ;; 
  110.     condrestart|try-restart) 
  111.         rh_status_q || exit 0 
  112.             ;; 
  113.     *) 
  114.         echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" 
  115.         exit 2 
  116. esac 

3.加入系统服务,并启动服务,

   
   
   
   
  1. 给脚本执行权限 
  2. #chmod a+x /etc/init.d/nginx 
  3. #chkconfig --add nginx 
  4. #chkconfig nginx on 
  5. #service nginx restart 

 

四,安装PHP的加密算法库,编码转换库,等软件
1.  安装libiconv编码转换库

   
   
   
   
  1. #cd /usr/src 
  2. #tar xzvf libiconv-1.13.1.tar.gz 
  3. #cd libiconv-1.13.1 
  4. #./configure --prefix=/usr/local 
  5. #make && make install 

2. 安装libmcryp加密算法扩展库

   
   
   
   
  1. #cd /usr/src 
  2. #tar xjvf libmcrypt-2.5.8.tar.bz2 
  3. #cd libmcrypt-2.5.8 
  4. #./configure 
  5. #make && make install 
  6. #ldconfig 
  7. #cd libltdl/ 
  8. #./configure --enable-ltdl-install 
  9. #make && make install 

3. 安装mhash 加密算法扩展库

   
   
   
   
  1. #cd /usr/src 
  2. #tar xjvf mhash-0.9.9.9.tar.bz2 
  3. #cd mhash-0.9.9.9 
  4. #./configure 
  5. #make && make install 
  6.  
  7. #ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la 
  8. #ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so 
  9. #ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4 
  10. #ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8 
  11. #ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a 
  12. #ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la 
  13. #ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so 
  14. #ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2 
  15. #ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1 

4. 安装mcrypt 加密算法工具

   
   
   
   
  1. #cd /usr/src 
  2. #tar xzvf mcrypt-2.6.8.tar.gz 
  3. #cd mcrypt-2.6.8 
  4. #./configure 
  5. #make && make install 


五,安装php并配置为fastcgi模式
1.  编译安装php

   
   
   
   
  1. #cd /usr/src 
  2. #tar xjvf php-5.4.4.tar.bz2 
  3. #cd php-5.4.4 
  4. #./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql/ --with-openssl \
  5. --enable-fpm --enable-sockets --enable-sysvshm --with-mysqli=/usr/local/mysql/bin/mysql_config \
  6. --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib-dir \
  7. --with-libxml-dir=/usr/ --enable-xml --with-mhash --with-mcrypt --with-config-file-path=/etc \
  8. --with-config-file-scan-dir=/etc/php.d --with-bz2 --with-curl --with-ldap --with-iconv-dir  
  9. #make  ZEND_EXTRA_LIBS='-liconv' 
  10. #make install 

2.为php提供配置文件

   
   
   
   
  1. #cp /usr/src/php-5.4.4/php.ini-production /etc/php.ini 

3. 为fpm提供SysV服务启动脚本

   
   
   
   
  1. #cp /usr/src/php-5.4.4/sapi/fpm/init.d.php-fpm  /etc/rc.d/init.d/php-fpm 
  2. #chmod a+x /etc/init.d/php-fpm 
  3. #chkconfig --add php-fpm 
  4. #chkconfig php-fpm on 

4, 为fpm提供配置文件

   
   
   
   
  1. #cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf  
  2. #vim /usr/local/php/etc/php-fpm.conf  修改以下项 
  3. pid = /usr/local/php/var/run/php-fpm.pid  
  4. pm.max_children = 50 
  5. pm.start_servers = 5 
  6. pm.min_spare_servers = 2 
  7. pm.max_spare_servers = 8 

5.启动php-fpm服务

   
   
   
   
  1. #service php-fpm restart 


六,安装php加速器,xcache
1.编译安装xcache

   
   
   
   
  1. #cd /usr/src 
  2. #tar xzvf xcache-2.0.0.tar.gz 
  3. #cd xcache-2.0.0 
  4. #/usr/local/php/bin/phpize 
  5. #./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config 
  6. #make  
  7. #make install 

2.整合php跟xcache

   
   
   
   
  1. #mkdir /etc/php.d 
  2. #cp /usr/src/xcache-2.0.0/xcache.ini /etc/php.d/ 
  3. #vim /etc/php.d/xcache.ini  将三行替换为以下行 
  4. zend_extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/xcache.so 

七,整合nginx跟php(FastCGI模式)
1. 编辑nginx主配置文件

   
   
   
   
  1. vim /usr/local/nginx/conf/nginx.conf  内容如下,可以将原文替换为以下内容
  2. user  nginx; 
  3. worker_processes  10; 
  4.  
  5. error_log  logs/error.log crit; 
  6.      
  7. pid        logs/nginx.pid; 
  8.      
  9.  
  10. events 
  11.   use epoll; 
  12.   worker_connections 51000; 
  13.  
  14. http { 
  15.     include       mime.types; 
  16.     default_type  application/octet-stream; 
  17.         client_header_buffer_size 32k; 
  18.         large_client_header_buffers 4 32k; 
  19.         client_max_body_size 10m; 
  20.  
  21.     sendfile        on; 
  22.     tcp_nopush     on; 
  23.  
  24.     keepalive_timeout  60; 
  25.     tcp_nodelay on; 
  26.         fastcgi_connect_timeout 300; 
  27.         fastcgi_send_timeout 300; 
  28.         fastcgi_read_timeout 300; 
  29.         fastcgi_buffer_size 64k; 
  30.         fastcgi_buffers 4 64k; 
  31.         fastcgi_busy_buffers_size 128k; 
  32.         fastcgi_temp_file_write_size 128k; 
  33.  
  34.         gzip on; 
  35.         gzip_min_length 1k; 
  36.         gzip_buffers    4 16k; 
  37.         gzip_http_version 1.0; 
  38.         gzip_comp_level 2; 
  39.         gzip_types      text/plain application/x-javascript text/ccs application/xml; 
  40.         gzip_vary on; 
  41.  
  42.     server { 
  43.         listen       80; 
  44.         server_name  www.andy.com; 
  45.         index index.html index.htm index.php; 
  46.         root /web/www; 
  47.  
  48.         location ~ .*\.(php|php5)?$ 
  49.         { 
  50.                 fastcgi_pass    127.0.0.1:9000; 
  51.                 fastcgi_index index.php; 
  52.                 fastcgi_param HTTPS on; 
  53.                 include fastcgi.conf; 
  54.         } 
  55.         location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 
  56.         { 
  57.                 expires 30d; 
  58.         } 
  59.         location ~ .*\.(js|css)?$ 
  60.         { 
  61.                 expires         1h; 
  62.         } 
  63.         
  64.         access_log      logs/www.log; 
  65.  
  66.             } 
  67.  
  68.         server { 
  69.                 listen       80; 
  70.                 server_name  bbs.andy.com; 
  71.                 index index.html index.htm index.php; 
  72.                 root /web/bbs; 
  73.  
  74.                 location ~ .*\.(php|php5)?$ 
  75.                 { 
  76.                 fastcgi_pass    127.0.0.1:9000; 
  77.                 fastcgi_index index.php; 
  78.                 fastcgi_param HTTPS on; 
  79.                 include fastcgi.conf; 
  80.                 } 
  81.              
  82.                 access_log      logs/bbs.log; 
  83.         } 
  84.          
  85.         ##下面的是查看nginx状态的访问地址   配置下面的之后在地址栏输入 status.andy.com 
  86.         ##就可以看到并发连接数等等信息 
  87.         server  { 
  88.                         listen 80; 
  89.                         server_name     status.andy.com; 
  90.                         location / { 
  91.                             stub_status on; 
  92.                             access_log      off; 
  93.                             } 
  94.             } 

2.编辑/usr/local/nginx/conf/fastcgi.conf文件

   
   
   
   
  1. #vim /usr/local/nginx/conf/fastcgi.conf  
  2.  
  3. fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name; 
  4. fastcgi_param  QUERY_STRING       $query_string; 
  5. fastcgi_param  REQUEST_METHOD     $request_method; 
  6. fastcgi_param  CONTENT_TYPE       $content_type; 
  7. fastcgi_param  CONTENT_LENGTH     $content_length; 
  8.  
  9. fastcgi_param  SCRIPT_NAME        $fastcgi_script_name; 
  10. fastcgi_param  REQUEST_URI        $request_uri; 
  11. fastcgi_param  DOCUMENT_URI       $document_uri; 
  12. fastcgi_param  DOCUMENT_ROOT      $document_root; 
  13. fastcgi_param  SERVER_PROTOCOL    $server_protocol; 
  14. fastcgi_param  HTTPS              $https if_not_empty; 
  15.  
  16. fastcgi_param  GATEWAY_INTERFACE  CGI/1.1; 
  17. fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version; 
  18.  
  19. fastcgi_param  REMOTE_ADDR        $remote_addr; 
  20. fastcgi_param  REMOTE_PORT        $remote_port; 
  21. fastcgi_param  SERVER_ADDR        $server_addr; 
  22. fastcgi_param  SERVER_PORT        $server_port; 
  23. fastcgi_param  SERVER_NAME        $server_name; 
  24.  
  25. # PHP only, required if PHP was built with --enable-force-cgi-redirect 
  26. fastcgi_param  REDIRECT_STATUS    200; 

3.建立网站目录及测试文件

   
   
   
   
  1. #mkdir -pv /web/{www,bbs} 
  2. #vim /web/www/index.php 内容如下  这个页面是测试php跟nginx 
  3. php 
  4. phpinfo(); 
  5. ?> 
  6.  
  7. #vim /web/bbs/index.php  内容如下 这个页面是测试php跟mysql 
  8. php 
  9. $link=mysql_connect('localhost','root',''); 
  10. if ($link) 
  11.         echo ok; 
  12. else 
  13.         echo no; 
  14. mysql_close($link); 
  15. ?> 

4.重启服务

   
   
   
   
  1. #service nginx restart 
  2. #service php-fpm restart 
  3. #service mysqld restart 

ok 到这里基本已经结束了,