当前位置: 我爱LAMP > Apache > 文章正文

在 CentOS 5.1 下安装 Nginx 替换 apache

发表于 2009-06-27 06:57    文章来源:互联网

== 为什么选择 Nginx ==

      Nginx 是一个很牛的高性能 Web 和反向代理服务器, 它具有有很多非常优越的特性:

      在高连接并发的情况下,Nginx 是 Apache 服务器不错的替代品:Nginx 在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应。

      Nginx 作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务, 也可以支持作为 HTTP 代理服务器对外进行服务。Nginx 采用 C 进行编写,不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好很多。

      作为邮件代理服务器:Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。

      Nginx 是一个 安装非常的简单,配置文件 非常简洁(还能够支持 perl 语法),Bugs 非常少的服务器:Nginx 启动特别容易,并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动。还能够不间断服务的情况下进行软件版本的升级。

(一)CentOS 5.1 系统安装

     系统的安装这部分,请参看我之前写的:

     CentOS 5.1 下用源码编译安装 ExtMail (第一部分)

(二)安装 PHP 和 MySQL

     (注明:因为我的实际使用环境还需要用到 bz2,GD,gettext,memcache,mhash,pcre,xml,zlib,FreeType 等,因此该步骤的安装除了把 PHP 和 MySQL 装好外,这些额外的软件包也一起安装上,省的麻烦。)

rpm -ivh perl-DBI-1.56-1.noarch.rpm

rpm -ivh mysql-5.0.22-2.2.el5_1.1.i386.rpm
rpm -ivh perl-DBD-MySQL-3.0007-1.fc6.i386.rpm
rpm -ivh mysql-server-5.0.22-2.2.el5_1.1.i386.rpm
rpm -ivh unixODBC-2.2.11-7.1.i386.rpm
rpm -ivh libtool-ltdl-1.5.22-6.1.i386.rpm
rpm -ivh mysql-connector-odbc-3.51.12-2.2.i386.rpm
rpm -ivh mysql-devel-5.0.22-2.2.el5_1.1.i386.rpm
rpm -ivh mysql-test-5.0.22-2.2.el5_1.1.i386.rpm
rpm -ivh mysql-bench-5.0.22-2.2.el5_1.1.i386.rpm

rpm -ivh apr-devel-1.2.7-11.i386.rpm
rpm -ivh apr-util-devel-1.2.7-6.i386.rpm

rpm -Uvh libxml2-2.6.26-2.1.2.1.i386.rpm
rpm -Uvh libxml2-python-2.6.26-2.1.2.1.i386.rpm
rpm -ivh libxslt-python-1.1.17-2.i386.rpm
rpm -Uvh libxml2-devel-2.6.26-2.1.2.1.i386.rpm

rpm -ivh libjpeg-devel-6b-37.i386.rpm

rpm -Uvh libpng-1.2.10-7.1.el5_0.1.i386.rpm
rpm -ivh freetype-demos-2.2.1-19.el5.i386.rpm
rpm -ivh libpng-devel-1.2.10-7.1.el5_0.1.i386.rpm
rpm -ivh freetype-devel-2.2.1-19.el5.i386.rpm

rpm -ivh aspell-ca-0.50-4.2.2.i386.rpm
rpm -ivh aspell-sv-0.51-1.2.1.i386.rpm
rpm -ivh aspell-fr-0.50-9.2.2.i386.rpm
rpm -ivh aspell-ga-0.50-4.2.2.i386.rpm
rpm -ivh aspell-sr-0.02-1.2.1.i386.rpm
rpm -ivh aspell-devel-0.60.3-7.1.i386.rpm
rpm -ivh aspell-id-0.50.1-4.2.2.i386.rpm
rpm -ivh aspell-ru-0.99f7-2.2.2.i386.rpm
rpm -ivh aspell-pt-0.50-10.2.2.i386.rpm
rpm -ivh aspell-es-0.50-13.2.2.i386.rpm
rpm -ivh aspell-br-0.50-4.2.2.i386.rpm
rpm -ivh aspell-el-0.50-4.2.2.i386.rpm
rpm -ivh aspell-gd-0.50-4.2.2.i386.rpm
rpm -ivh aspell-nl-0.1e-1.fc6.i386.rpm
rpm -ivh aspell-is-0.51.1-2.2.2.i386.rpm
rpm -ivh aspell-af-0.50-4.2.2.i386.rpm
rpm -ivh aspell-de-0.50-11.2.2.i386.rpm
rpm -ivh aspell-sl-0.50-1.2.1.i386.rpm
rpm -ivh aspell-cy-0.50-4.2.2.i386.rpm
rpm -ivh aspell-da-0.50-12.2.2.i386.rpm
rpm -ivh aspell-pl-0.51-5.2.2.i386.rpm
rpm -ivh aspell-bg-0.50-11.2.2.i386.rpm
rpm -ivh aspell-hr-0.51-4.2.2.i386.rpm
rpm -ivh aspell-no-0.50.1-9.2.2.i386.rpm
rpm -ivh aspell-gl-0.50-4.2.2.i386.rpm
rpm -ivh aspell-cs-0.51-3.2.2.i386.rpm
rpm -ivh aspell-it-0.53-4.2.1.i386.rpm
rpm -ivh aspell-fo-0.51-4.2.2.i386.rpm

rpm -ivh libc-client-2004g-2.2.1.i386.rpm
rpm -ivh libc-client-devel-2004g-2.2.1.i386.rpm

rpm -Uvh net-snmp-libs-5.3.1-19.el5_1.4.i386.rpm
rpm -ivh beecrypt-devel-4.1.2-10.1.1.i386.rpm
rpm -ivh lm_sensors-2.10.0-3.1.i386.rpm

rpm -ivh net-snmp-5.3.1-19.el5_1.4.i386.rpm
rpm -ivh net-snmp-utils-5.3.1-19.el5_1.4.i386.rpm
rpm -ivh net-snmp-perl-5.3.1-19.el5_1.4.i386.rpm

rpm -ivh –nodeps elfutils-devel-0.125-3.el5.i386.rpm
rpm -ivh net-snmp-devel-5.3.1-19.el5_1.4.i386.rpm
rpm -ivh elfutils-devel-static-0.125-3.el5.i386.rpm

rpm -Uvh pcre-6.6-2.el5_1.7.i386.rpm
rpm -ivh pcre-devel-6.6-2.el5_1.7.i386.rpm

rpm -ivh tcl-devel-8.4.13-3.fc6.i386.rpm
rpm -ivh tcl-html-8.4.13-3.fc6.i386.rpm

rpm -ivh tk-8.4.13-5.el5_1.1.i386.rpm
rpm -ivh tclx-8.4.0-5.fc6.i386.rpm
rpm -ivh tclx-doc-8.4.0-5.fc6.i386.rpm
rpm -ivh tclx-devel-8.4.0-5.fc6.i386.rpm

rpm -ivh gamin-devel-0.1.7-8.el5.i386.rpm

rpm -ivh libart_lgpl-devel-2.3.17-4.i386.rpm

rpm -ivh php-common-5.1.6-15.el5.i386.rpm
rpm -ivh php-pdo-5.1.6-15.el5.i386.rpm
rpm -ivh php-cli-5.1.6-15.el5.i386.rpm
rpm -ivh php-5.1.6-15.el5.i386.rpm
rpm -ivh php-pear-1.4.9-4.noarch.rpm
rpm -ivh php-pear-Net-Socket-1.0.8-1.el5.centos.noarch.rpm
rpm -ivh php-pear-MDB2-2.4.1-2.el5.centos.noarch.rpm
rpm -ivh php-pear-Net-URL-1.0.15-1.el5.centos.noarch.rpm
rpm -ivh php-pear-Auth-SASL-1.0.2-4.el5.centos.noarch.rpm
rpm -ivh php-pear-Net-SMTP-1.2.10-1.el5.centos.noarch.rpm
rpm -ivh php-pear-DB-1.7.13-1.el5.centos.noarch.rpm
rpm -ivh libtidy-0.99.0-12.20070228.el5.centos.i386.rpm
rpm -ivh libmcrypt-2.5.8-4.el5.centos.i386.rpm
rpm -ivh mhash-0.9.9-1.el5.centos.i386.rpm
rpm -ivh php-odbc-5.1.6-15.el5.i386.rpm
rpm -ivh php-dbase-5.1.6-12.el5.centos.i386.rpm
rpm -ivh php-pear-Net-Sieve-1.1.5-2.el5.centos.noarch.rpm
rpm -ivh php-ldap-5.1.6-15.el5.i386.rpm
rpm -ivh php-imap-5.1.6-15.el5.i386.rpm
rpm -ivh php-mhash-5.1.6-12.el5.centos.i386.rpm
rpm -ivh php-pear-HTTP-Request-1.4.2-1.el5.centos.noarch.rpm
rpm -ivh php-pear-Mail-1.1.14-1.el5.centos.noarch.rpm
rpm -ivh php-pear-Date-1.4.7-2.el5.centos.noarch.rpm
rpm -ivh php-snmp-5.1.6-15.el5.i386.rpm
rpm -ivh php-pecl-Fileinfo-1.0.4-3.el5.centos.i386.rpm
rpm -ivh php-bcmath-5.1.6-15.el5.i386.rpm
rpm -ivh php-mcrypt-5.1.6-12.el5.centos.i386.rpm
rpm -ivh php-ncurses-5.1.6-15.el5.i386.rpm
rpm -ivh php-devel-5.1.6-15.el5.i386.rpm
rpm -ivh php-pear-MDB2-Driver-mysql-1.4.1-3.el5.centos.noarch.rpm
rpm -ivh php-soap-5.1.6-15.el5.i386.rpm
rpm -ivh php-mbstring-5.1.6-15.el5.i386.rpm
rpm -ivh php-xml-5.1.6-15.el5.i386.rpm
rpm -ivh php-tidy-5.1.6-12.el5.centos.i386.rpm
rpm -ivh php-pear-Mail-Mime-1.4.0-1.el5.centos.noarch.rpm
rpm -ivh php-dba-5.1.6-15.el5.i386.rpm
rpm -ivh php-pear-File-1.2.2-1.el5.centos.noarch.rpm
rpm -ivh php-pgsql-5.1.6-15.el5.i386.rpm
rpm -ivh php-readline-5.1.6-12.el5.centos.i386.rpm
rpm -ivh php-mysql-5.1.6-15.el5.i386.rpm
rpm -ivh php-pear-Log-1.9.13-1.el5.centos.noarch.rpm
rpm -ivh php-gd-5.1.6-15.el5.i386.rpm
rpm -ivh php-xmlrpc-5.1.6-15.el5.i386.rpm
rpm -ivh php-pecl-memcache-2.2.1-1.el5.centos.i386.rpm

rpm -ivh compat-libstdc++-33-3.2.3-61.i386.rpm
rpm -ivh cabextract-1.2-1.el5.rf.i386.rpm
rpm -ivh nomarch-1.4-2.el5.i386.rpm
rpm -ivh unarj-2.63-0.a.2.el5.rf.i386.rpm
rpm -ivh unrar-3.7.4-1.el5.rf.i386.rpm

Nginx 安装

# tar zxvf nginx-0.6.31.tar.gz
# cd nginx-0.6.31
# ./configure –prefix=/usr/local/nginx –conf-path=/usr/local/nginx/conf/nginx.conf –pid-path=/var/run/nginx.pid –error-log-path=/var/log/nginx –http-log-path=var/log/nginx –user=apache –group=apache –with-pcre=/usr/include/pcre –with-http_stub_status_module –with-http_ssl_module

     (注意:在这里,需要说明一下,由于 Nginx 的配置文件中我需要用到正则,所以需要 pcre 模块的支持。而我们在第一部分的安装中已经安装了 pcre 及 pcre-devel 的 相应 rpm 包,但是 Ngxin 并不能正确找到 .h/.so/.a/.la 文件,因此需要变通一下)

# mkdir /usr/include/pcre
# mkdir /usr/include/pcre/.libs

# cp /usr/lib/libpcre.a /usr/include/pcre/libpcre.a
# cp /usr/lib/libpcre.a /usr/include/pcre/libpcre.la

# cp /usr/lib/libpcre.a /usr/include/pcre/.libs/libpcre.a
# cp /usr/lib/libpcre.a /usr/include/pcre/.libs/libpcre.la

      然后,修改 objs/Makefile 文件,注释掉以下内容:

     ./configure –disable-shared

      接下来,就可以正常执行 make 及 make install 了。

# make
# make install

# mkdir /var/log/nginx

      接下来,修改 Nginx 的配置文件

# cd /usr/local/nginx/conf

# vi nginx.conf (如下图所示)

      运行以下命令检测配置文件是否无误:

# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

      如出现下面的字符则为配置文件正确:

the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully

      启动 nginx:

# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

      检查 nginx 进程是否启动:

# ps aux|grep nginx|grep -v grep (若看到如下几个进程,就已经启动 OK,若无则要检查配置)

root      2173  0.0  0.1   5308   596 ?        Ss   10:41   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
apache    2174  0.0  0.1   5504   932 ?        S    10:41   0:00 nginx: worker process                                          
apache    2175  0.0  0.1   5504   960 ?        S    10:41   0:00 nginx: worker process                                          
apache    2177  0.0  0.1   5504   956 ?        S    10:41   0:00 nginx: worker process

      打开浏览器输入地址,如出现下面的图示则为 nginx 已正常:

(二)配置 Nginx 的 PHP FastCGI

      安装 lighthttp 以得到 spawn-fcgi ,并以此来控制 php-cgi 进程运行

# rpm -ivh lua-5.1.2-1.el5.i386.rpm
# rpm -ivh lighttpd-1.4.18-1.el5.i386.rpm
# rpm -ivh lighttpd-fastcgi-1.4.18-1.el5.i386.rpm

      编辑 /usr/local/nginx/conf/fastcgi.conf 配置文件:(如下图所示)

      修改 /usr/local/nginx/conf/nginx.conf 配置文件:(如下图所示)

      启动 php-cgi 进程,监听 127.0.0.1 的 9000 端口,进程数为 5(如果服务器内存小于3GB,可以只开启25个进程),用户为 apache,用户组为 apache:

      /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u apache -g apache -P /var/run/php-cgi.pid -f /usr/bin/php-cgi

      

参数含义如下:

-f <fcgiapp> 指定调用 FastCGI 的进程的执行程序位置,根据系统上所装的 PHP 的情况具体设置
-a <addr> 绑定到地址 addr
-p <port> 绑定到端口 port
-s <path> 绑定到 unix socket 的路径path
-C <childs> 指定产生的 FastCGI 的进程数,默认为 5(仅用于PHP)
-P <path> 指定产生的进程的PID文件路径
-u 和-g FastCGI 使用什么身份(-u 用户 -g 用户组)运行,Ubuntu 下可以使用www-data,其他的根据情况配置,如nobody、apache 等

      检查 9000 端口是否正常开启:

# netstat -tlunp

(三)测试 Nginx 的 PHP FastCGI

# vi /usr/local/nginx/html/phpinfo.php (内容如下所示:)

<?php
phpinfo();
?>

      在浏览器打开 phpinfo.php 页面,如出现下面的图示则为 nginx 的 PHP 已正常:

(四)安装 PHP 扩展模块:xcache

# php -m  (使用该命令列出当前系统安装的 PHP Modules)

      使用下面命令查看是否在上面第一个步骤中安装了 memcache,如果没有,就手动安装。

# rpm -qa |grep memcache
   
php-pecl-memcache-2.2.1-1.el5.centos

# tar zxvf xcache-1.2.2.tar.gz
# cd xcache-1.2.2
# /usr/bin/phpize
# ./configure –with-php-config=/usr/bin/php-config –enable-xcache
# make
# make install

(五)配置 XCache 加速 PHP

# vi /etc/php.ini (在文件最下面加入以下内容:)

[xcache-common]
zend_extension = /usr/lib/php/modules/xcache.so

[xcache.admin]
xcache.admin.user = “xcache”
; xcache.admin.pass = md5($yourpasswd)
xcache.admin.pass = “8e6867a5d05144cf4761d6481fc674a8″

[xcache]
xcache.cacher = On
xcache.shm_scheme = “mmap”
xcache.size = 32M
; cpu number (cat /proc/cpuinfo |grep -c processor)
xcache.count = 2
xcache.slots = 8k
xcache.ttl = 0
xcache.gc_interval = 0
xcache.var_size = 2M
; cpu number (cat /proc/cpuinfo |grep -c processor)
xcache.var_count = 2
xcache.var_slots = 8K
xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.var_gc_interval = 300
xcache.readonly_protection = Off
xcache.mmap_path = “/dev/zero”

      再查找 display_errors = On 并将其修改为 display_errors = Off

      重新启动 nginx ,然后在浏览器中刷新 phpinfo.php 页面,出现如下:

      当前官方网站发布的最新稳定版本是 0.6.31 :

      http://wiki.codemongers.com/NginxNews#latest_stable

本文链接: http://www.52lamp.com.cn/detail/387.html

喜欢我爱LAMP – lamp开发程序交流学习平台的文章,那就通过 RSS Feed 功能订阅阅读吧!