Nginx服务器 是一个高性能的 HTTP 和 反向代理 服务器软件,一个 IMAP/POP3/SMTP 代理服务器。
Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。尽管还是测试版,但是,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。
nginx服务器是一个小巧而高效的Linux下的web服务器软件。开发人员 Igor Sysoev 来自俄罗斯,nginx的话其实已经在一些俄罗斯的大型网站上运行多年,相当的稳定,最近才在美国开始知名起来。
而另外一个热门的web服务器软件是Lighttpd,因为运行在Youtube的 后台,所以知名度很高。Lighttpd特色在于它能做 Flash streaming和对fastcgi的支持,这样对于Ruby on Rails之类的程序提速不少,比起Apache要好很多。
但是 nginx服务器 要比 Lighttpd 更稳定,功能上并不弱于Lighttpd,差不多什么都有,而且比Lighttpd对于URL rewrite的支持更完善一点。
不管是 nginx 还是 lighttpd, 对于用来提供静态文件都要比Apache好很多很多,主要就是占用的内存小,Apache和这两个小巧的服务器软件来比实在是个庞然大物啊。
为什么选择Nginx服务器
Nginx服务器 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:
作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.
作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx服务器 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。
Nginx服务器 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。
------------------------------------------------------
1、Nginx介绍
2、Nginx安装与启用
3、Nginx的基本配置与优化
4、Nginx与PHP(FastCGI)的安装、配置与优化
************************************************
一、Nginx介绍:
Nginx是一款高性能的HTTP和反向代理服务器,能够选择高效的 epoll(linux2.6内核)、kqueue(freebsd)、eventport(solaris10)作为网络I/O模型,能够支持高达 50000个并发连接数的响应,而内存、CPU等系统资源消耗却非常低、运行非常稳定。
2008年12月:Nginx市场占有量为3354329、占有率为1.80%
1、选择Nginx的理由
1.1 支持高并发连接
通过top命令可以查看系统负载和CPU使用率
由于apache采用的是select网络I/O模型,处理大量连续的读写很低效
1.2 内存消耗少
在服务器3W并发连接下,开启10个Nginx进程消耗150MB内存(15MB*10),开启64个php-cgi进程消耗128MB内存(20MB*64),共消耗不到2GB内存,可以使用webbench做压力测试,运行依旧很快。
1.3 成本低廉
购买F5 BIG-IP、NetScaler等负载均衡交换机需要几十万RMB,而开源Nginx替代这些商业设备。
1.4 其他理由
网络配置简单,对比apache就知道了
支持rewrite重写规则,能够根据域名、URL的不同、将HTTP请求分到不同的后端服务器群组
内置的健康检查功能
节省带宽,支持GZIP压缩,可以添加浏览器本地缓存的Header头
支持热部署,能够在不间断服务的情况下、对软件版本进行升级
结论:Nginx在反向代理、rewrite规则、稳定性、静态文件处理、内存消耗等方面都表现出很强的优势。
二、Nginx安装与启用
Nginx服务器的安装与配置
http://www.nginx.net/
最新稳定版nginx-1.0.0
首先linux系统得安装有GCC编译器,再者还有autoconf和automake工具用于自动创建功能完善的makefile,因为Nginx也是用这一工具生成makefile的。
用yum命令安装GCC和autoconf和automake工具:
yum install gcc gcc-c++ autoconf automake -y
Nginx的一些模块需要其他第三方库的支持,例如gzip模块需要zlib库、rewrite模块需要pcre库 、ssl功能需要openssl库等。同样可以使用Yum安装这些模块依赖的库:
yum install zlib zlib-devel openssl openssl-devel pcre pcre-devel
(当然最好使用最新版本源码包安装,像系统ISO文件里头自带的pcre库就相对旧些)
1、安装Nginx
1.1 安装Nginx所需要的pcre库、才得以支持rewrite
tar zxvf pcre-8.02.tar.gz
cd pcre-8.02
./configure
make && make install
1.2 安装Nginx
tar zxvf nginx-1.0.0.tar.gz
cd nginx-1.0.0
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make && make install
--->
Configuration summary
+ using system PCRE library
+ using system OpenSSL library
+ md5: using OpenSSL library
+ using system zlib library
2、启动Nginx
# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
查看进程:
# ps -ef |grep nginx
root 11659 1 0 14:13 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody 11660 11659 0 14:13 ? 00:00:00 nginx: worker process
查看端口号:
# netstat -antup |grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 11659/nginx.conf
从上面可以看到Nginx启用一个主进程和一个子进程,我们可以修改nginx.conf里头的
worker_processes使得运行多个子进程。
3、停止Nginx
当Nginx服务启动起来后,就会在原本空目录/usr/local/nginx/logs/下自动生成3个文件:
access.log error.log nginx.pid
这里包含nginx的主进程号:nginx.pid ,我们可以通过如上的ps命令查看、也可以直接cat出来
3.1 从容停止Nginx
kill -QUIT Nginx主进程号
# kill -QUIT `cat /usr/local/nginx/logs/nginx.pid`
3.2 快速停止Nginx
kill -TERM Nginx主进程号
# kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
4、重启Nginx
如果改变了Nginx的主配置文件,想重启Nginx,可以先检查Nginx的配置文件是否正确后才发送系统信号给Nginx主进程的方式进行,检查方法如下:
# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
只有出现如上OK信息才会加载新的配置文件。
4.1 平滑重启Nginx
kill -HUP Nginx主进程号
# kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
如果Nginx本身都还没启动,平滑重启可是会报错的。
5、Nginx的信号控制
TERM,INT 快速关闭
QUIT 从容关闭
HUP 平滑重启
USR1 重新打开日志文件、在切割日志时用途大
USR2 平滑升级可执行程序
WINCH 从容关闭工作进程
三、Nginx的基本配置与优化
首先看Nginx的主配置文件,可以发现原本的配置文件非常简练
1.1、配置基于IP的虚拟主机
首先添加虚拟网卡:
ifconfig eth0:1 110.65.99.209 broadcast 110.65.99.255 netmask 255.255.252.0 up
route add -host 110.65.99.209 dev eth0:1
ifconfig eth0:2 110.65.99.210 broadcast 110.65.99.255 netmask 255.255.252.0 up
route add -host 110.65.99.210 dev eth0:2
如上命令最好写进/etc/rc.local中使得系统开机自动创建。
或者直接cp ifcfg-eth0 ifcfg-eth0:1
修改Nginx的主配置文件: /usr/local/nginx/conf/nginx.conf
在原本定义的一个server之后添加如下两个虚拟主机
检查配置文件是否写正确,然后才平滑重启Nginx
# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
# kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
测试:
# links http://110.65.99.209
# links http://110.65.99.210
测试后在/usr/local/nginx/logs目录下会自动创建Log日志文件
server2.access.log server3.access.log
# cat server2.access.log
110.65.99.209 - - [21/Apr/2011:22:34:11 +0800] "GET / HTTP/1.1" 200 8 "-" "ELinks/0.11.1 (textmode; Linux; 142x38-2)"
# cat server3.access.log
110.65.99.210 - - [21/Apr/2011:22:34:24 +0800] "GET / HTTP/1.1" 200 8 "-" "ELinks/0.11.1 (textmode; Linux; 142x38-2)"
1.2、配置基于域名的虚拟主机
接着如上的配置在server3下面添加如下两个虚拟主机
检查配置文件是否写正确,然后才平滑重启Nginx
# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
# kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
为了让系统直接缓存域名解析,在/etc/hosts后面追加如下内容(110.65.99.208是eth0-IP):
110.65.99.208 server5.com
110.65.99.208 server4.com
测试:
# links http://server4.com
# links http://server5.com
测试后在/usr/local/nginx/logs目录下会自动创建Log日志文件
# cat server4.access.log
110.65.99.208 - - [21/Apr/2011:22:41:46 +0800] "GET / HTTP/1.1" 200 8 "-" "ELinks/0.11.1 (textmode; Linux; 142x38-2)"
# cat server5.access.log
110.65.99.208 - - [21/Apr/2011:22:40:56 +0800] "GET / HTTP/1.1" 200 8 "-" "ELinks/0.11.1 (textmode; Linux; 142x38-2)"
2、Nginx的日志文件配置与切割
如上的日志文件内容是有一定的指令定义的,在Nginx的主配置文件中是通过
log_format指令来设置日志格式:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
如上指令的解析:
$remote_addr用户获取客户端的IP地址,但如果前端使用了反向代理,则获取到的是反向代理服务器的IP地址
$http_x_forwarded_for"则可以使得反向代理服务器转发请求的HTTP头信息来记录客户端IP
$request用于记录请求的URL和HTTP协议
$time_local用于记录访问时间与时区
$status用于记录请求状态,成功时状态为200,页面找到时状态为404
$body_bytes_sent用于记录发送给客户端的文件主体内容大小
$http_user_agent用于记录客户端浏览器的相关信息
$http_referer用于记录是从哪个页面链接访问过来的
上面指定好了日志格式后就要定义日志存放的路径了,access_log指令用于指定日志存放的路径
如果说不想记录日志,则直接
access_log off;
如果使用如下定义的日志格式存储日志,则可以通过
access_log logs/access.log main;
表示采用main的日志格式,记录在/usr/local/nginx/logs/access.log文件中
(如果把日志存储路径定义在其他地方,要确保Nginx进程设置的用户和组对该目录有读写权限,否则该日志文件就无法生成了)
对于生产系统下的server,由于巨大的访问量会导致日志文件的增加非常快,日志太大会影响server的效率,同时为了方便对日志进行分析计算,所以需要对日志文件做定时切割,这里使用按天计算切割。
先前的文档提及过kill -USR1的作用时重新打开日志文件,这样我们就可以先对旧的日志文件重命名,通过kill -USR1重新生成access.log文件。最后借助crontab进行按天切割的计划任务。
如下通过一个shell脚本进行日志切割:
3、Nginx的压缩输出配置与自动列目录配置
3.1、Nginx的压缩输出配置
gzip(GNU-ZIP)是一种压缩技术,通过gzip压缩后的页面可以变为原来的30%,使得用户浏览页面的时候速度会快很多,gzip的压缩需要 browser和server都支持。其过程是server端进行gzip压缩,browser端解压并解析。目前大多数browser都支持gzip过 的页面,如IE、firefox、chrome。
Nginx的压缩输出由一组gzip指令来实现,默认的Nginx配置文件仅仅为
gzip on;
这么个简单的指令,所以我们需要参考gzip模块相关介绍,实现gzip的具体压缩功能
如下:
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_vary on;
3.2、 Nginx的自动列目录配置
当指定目录下不存在index指令设置的默认首页文件,当访问该页面的时候会出现403 Forbidden
的信息,所以可以通过在Nginx的主配置文件中的location / {......}目录控制中配置自动列目录,如下代码:
location / {
autoindex on;
}
这样就可以访问页面显示出该目录下的文件或目录,而不是403 Forbidden信息。
3.3、 Nginx的浏览器本地缓存设置
browser caching是为了加速浏览,在用户磁盘上对最近请求过的文档进行存储。当访问者再次请求这个页面的时候,browser就可以直接从本地磁盘显示文档,从而加速页面的阅览,最终到达节约网络资源。
browser caching通过expires指令输出header头来实现,该指令语法如下:
语法:expires [time|epoch|max|off]
默认值: expires off
作用域: http ,server ,location
假设一个html页面会引用到一些javascript文件、图片文件,而这些格式的文件很少会被修改,则可以通过expires设置browser caching
eg:对常见格式的图片、flash文件在浏览器本地缓存30天,对Js、css文件在本地缓存1个小时:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
四、Nginx与PHP(FastCGI)的安装、配置与优化
CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的 反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。
FastCGI的工作原理(摘自百度百科)
1、web server(Nginx)启动时载入FastCGI进程管理器
2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自web server的连接
3、当客户端请求到达web server时,FastCGI进程管理器选择并连接到一个CGI解释器。web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi
4、FastCGI子进程完成处理后将标准输出和错误信息从同一个连接返回web server,当FastCGI子进程关闭连接时,请求便高处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器的下一个连接。
所以,如果是使用CGI技术的话,每一个Web请求PHP都必须重新解析 php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。然而不足之处在于FastCGI比 CGI消耗更多的系统内存,因为FastCGI是多进程的,CGI是多线程的。
1、安装PHP所需库(FastCGI模式)
1.1、 编译安装PHP所需的支持库
1>libiconv
GNU的libiconv是为nicode和其他的传统编码两种应用设计的编码转换库
http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
tar zxvf libiconv-1.13.1.tar.gz
cd libiconv-1.13.1
./configure --prefix=/usr/local/
make && make install
2>libmcrypt
Libmcrypt is a library which provides a uniform interface to several symmetric encryption algorithms. It is intended to have a simple interface to access encryption algorithms in ofb, cbc, cfb, and ecb modes. The algorithms it supports are DES, 3DES, RIJNDAEL, Twofish, IDEA, GOST, CAST-256, ARCFOUR, SERPENT, SAFER+, and more. The algorithms and modes are also modular so you can add and remove them on the fly without recompiling the library.
主要功能用于加密解密
http://down1.chinaunix.net/distfiles/libmcrypt-2.5.7.tar.gz
tar zxvf libmcrypt-2.5.7.tar.gz
cd libmcrypt-2.5.7
./configure
make && make install
/sbin/ldconfig #ldconfig通常在系统启动时运行,当用户安装了一个新的动态链接库时,就需要手工运行这个命令
cd libltdl/
./configure --enable-ltdl-install
make && make install
3>mhash
mhash是哈希函数库,比如用来计算消息的校验码之类的
http://sourceforge.net/projects/mhash/files/mhash/0.9.9/mhash-0.9.9.tar.gz/download
tar jxvf mhash-0.9.9.9.tar.bz2
cd mhash-0.9.9.9
./configure
make && make install
4>mcrypt
Mcrypt扩展库可以对数据进行加密和解密
http://code.google.com/p/lcmp/downloads/detail?name=mcrypt-2.6.8.tar.gz
tar zxvf mcrypt-2.6.8.tar.gz.gz
cd mcrypt-2.6.8
/sbin/ldconfig
./configure
make && make install
5>建立软连接
ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.7 /usr/lib/libmcrypt.so.4.4.7
ln -s /usr/local/lib/libmhash.* /usr/lib/
2、安装mysql
http://www.mysql.com/downloads/mysql/5.1.html#downloads
选择下拉“source code”最后一个
useradd mysql
tar zxvf mysql-5.1.56.tar.gz
cd mysql-5.1.56
./configure --prefix=/usr/local/mysql --enable-assembler --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
cp support-files/my-medium.cnf /etc/my.cnf
cd /usr/local/mysql/
bin/mysql_install_db --user=mysql
chown -R root .
chown -R mysql var/
chgrp -R mysql .
bin/mysqld_safe --user=mysql &
ln -s /usr/local/mysql/bin/* /usr/bin/
mysqladmin -uroot password 123456
mysql -uroot -p123456
mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY '123456';
3、安装PHP
1、编译安装PHP(FastCGI模式)
tar zxvf php-5.2.17.tar.gz
gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | patch -d php-5.2.17 -p1 //打补丁
cd php-5.2.17
./configure --prefix=/usr/local/php --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr/ --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap --without-pear --with-mysql=/usr/local/mysql/
make ZEND_EXTRA_LTBS='-liconv'
在执行编译的时候,这里遇到一个error:
xxx:undefined reference to `libiconv_open'
xxx: undefined reference to `libiconv'
xxx: undefined reference to `libiconv_close'
解决办法是:
编辑Makefile
EXTRA_LIBS = -lcrypt ...
在最后添加-liconv
然后重新编译
make ZEND_EXTRA_LTBS='-liconv'
make install
cp php.ini-dist /usr/local/php/etc/php.ini
cp php.ini-dist /usr/local/lib/php.ini
4、编译安装php5扩展模块
1>memcache
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。
php中的所讲的memcache是PHP的一个扩展,是一个客户端,用于连接memcached。
http://pecl.php.net/get/memcache-2.2.6.tgz
tar zxvf memcache-2.2.6.tgz
cd memcache-2.2.6
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
2>eaccelerator
eAccelerator是一个自由开放源码php加速器,优化和动态内容缓存,提高了php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。 它还有对脚本起优化作用,以加快其执行效率。使PHP程序代码执效率能提高1-10倍;
http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
tar jxvf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1
/usr/local/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config
make && make install
3>PDO_MYSQL
PDO_MYSQL is a driver that implements the PHP Data Objects (PDO) interface to enable access from PHP to MySQL 3.x, 4.x and 5.x databases.
http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
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
4>ImageMagick
ImageMagick是一套功能强大、稳定而且 免费的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD等格式。利用ImageMagick,你可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存。
ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz
tar zxvf ImageMagick-6.6.5-10.tar.gz
cd ImageMagick-6.6.5-10
./configure
make && make install
5>imagick
imagick 是PHP的一个扩展程序,它是默认的GD图象函数库的绝佳替代方案。面向对象的PHP编程使用非常方便。
imagick 默认并没有在PHP的安装包里,需要去PHP网站上下载,并在PHP.INI中打开此扩展。
http://pecl.php.net/get/imagick-3.0.1.tgz 或者
http://pecl.php.net/get/imagick-3.0.0.tgz
tar zxvf imagick-3.0.0.tgz
cd imagick-3.0.0
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
6>修改php.ini文件,配置eaccelerator加速PHP
1、查找/usr/local/php/etc/php.ini中的extension_dir = "./"
修改extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
并在此行后添加如下几行用于调用上面的扩展模块
extension = "memcache.so"
extension = "pdo_mysql.so"
extension = "imagick.so"
最后查找output_buffering = Off,修改成output_buffering = On
2、创建目录/usr/local/eaccelerator_cache
mkdir /usr/local/eaccelerator_cache
修改/usr/local/php/etc/php.ini在最后添加如下:
[eaccelerator]
zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="64"
eaccelerator.cache_dir=/usr/local/eaccelerator_cache
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
5、配置启用php-cgi
/usr/sbin/groupadd www
/usr/sbin/useradd -g www www
修改php-fpm配置文件(php-fpm是为PHP打的一个FastCGI管理补丁),可以实现平滑变更php.ini配置而无需重启php-cgi
vim /usr/local/php/etc/php-fpm.conf
把两处nobody修改成www,并且去掉<--!-->这样的注释,表示使用www启用进程php-cgi
然后通过 /usr/local/php/sbin/php-fpm start 来启用php-cgi。
ps -ef |grep php-cgi 可以查看php-cgi进程
6、配置Nginx支持PHP
修改Nginx的主配置文件/usr/local/nginx/conf/nginx.conf
去掉下面代码前面的#号:
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
然后在/usr/local/nginx/html目录下创建index.php文件测试即可.
Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。尽管还是测试版,但是,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。
nginx服务器是一个小巧而高效的Linux下的web服务器软件。开发人员 Igor Sysoev 来自俄罗斯,nginx的话其实已经在一些俄罗斯的大型网站上运行多年,相当的稳定,最近才在美国开始知名起来。
而另外一个热门的web服务器软件是Lighttpd,因为运行在Youtube的 后台,所以知名度很高。Lighttpd特色在于它能做 Flash streaming和对fastcgi的支持,这样对于Ruby on Rails之类的程序提速不少,比起Apache要好很多。
但是 nginx服务器 要比 Lighttpd 更稳定,功能上并不弱于Lighttpd,差不多什么都有,而且比Lighttpd对于URL rewrite的支持更完善一点。
不管是 nginx 还是 lighttpd, 对于用来提供静态文件都要比Apache好很多很多,主要就是占用的内存小,Apache和这两个小巧的服务器软件来比实在是个庞然大物啊。
为什么选择Nginx服务器
Nginx服务器 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:
作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.
作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx服务器 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。
Nginx服务器 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。
------------------------------------------------------
1、Nginx介绍
2、Nginx安装与启用
3、Nginx的基本配置与优化
4、Nginx与PHP(FastCGI)的安装、配置与优化
************************************************
一、Nginx介绍:
Nginx是一款高性能的HTTP和反向代理服务器,能够选择高效的 epoll(linux2.6内核)、kqueue(freebsd)、eventport(solaris10)作为网络I/O模型,能够支持高达 50000个并发连接数的响应,而内存、CPU等系统资源消耗却非常低、运行非常稳定。
2008年12月:Nginx市场占有量为3354329、占有率为1.80%
1、选择Nginx的理由
1.1 支持高并发连接
通过top命令可以查看系统负载和CPU使用率
由于apache采用的是select网络I/O模型,处理大量连续的读写很低效
1.2 内存消耗少
在服务器3W并发连接下,开启10个Nginx进程消耗150MB内存(15MB*10),开启64个php-cgi进程消耗128MB内存(20MB*64),共消耗不到2GB内存,可以使用webbench做压力测试,运行依旧很快。
1.3 成本低廉
购买F5 BIG-IP、NetScaler等负载均衡交换机需要几十万RMB,而开源Nginx替代这些商业设备。
1.4 其他理由
网络配置简单,对比apache就知道了
支持rewrite重写规则,能够根据域名、URL的不同、将HTTP请求分到不同的后端服务器群组
内置的健康检查功能
节省带宽,支持GZIP压缩,可以添加浏览器本地缓存的Header头
支持热部署,能够在不间断服务的情况下、对软件版本进行升级
结论:Nginx在反向代理、rewrite规则、稳定性、静态文件处理、内存消耗等方面都表现出很强的优势。
二、Nginx安装与启用
Nginx服务器的安装与配置
http://www.nginx.net/
最新稳定版nginx-1.0.0
首先linux系统得安装有GCC编译器,再者还有autoconf和automake工具用于自动创建功能完善的makefile,因为Nginx也是用这一工具生成makefile的。
用yum命令安装GCC和autoconf和automake工具:
yum install gcc gcc-c++ autoconf automake -y
Nginx的一些模块需要其他第三方库的支持,例如gzip模块需要zlib库、rewrite模块需要pcre库 、ssl功能需要openssl库等。同样可以使用Yum安装这些模块依赖的库:
yum install zlib zlib-devel openssl openssl-devel pcre pcre-devel
(当然最好使用最新版本源码包安装,像系统ISO文件里头自带的pcre库就相对旧些)
1、安装Nginx
1.1 安装Nginx所需要的pcre库、才得以支持rewrite
tar zxvf pcre-8.02.tar.gz
cd pcre-8.02
./configure
make && make install
1.2 安装Nginx
tar zxvf nginx-1.0.0.tar.gz
cd nginx-1.0.0
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make && make install
--->
Configuration summary
+ using system PCRE library
+ using system OpenSSL library
+ md5: using OpenSSL library
+ using system zlib library
2、启动Nginx
# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
查看进程:
# ps -ef |grep nginx
root 11659 1 0 14:13 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody 11660 11659 0 14:13 ? 00:00:00 nginx: worker process
查看端口号:
# netstat -antup |grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 11659/nginx.conf
从上面可以看到Nginx启用一个主进程和一个子进程,我们可以修改nginx.conf里头的
worker_processes使得运行多个子进程。
3、停止Nginx
当Nginx服务启动起来后,就会在原本空目录/usr/local/nginx/logs/下自动生成3个文件:
access.log error.log nginx.pid
这里包含nginx的主进程号:nginx.pid ,我们可以通过如上的ps命令查看、也可以直接cat出来
3.1 从容停止Nginx
kill -QUIT Nginx主进程号
# kill -QUIT `cat /usr/local/nginx/logs/nginx.pid`
3.2 快速停止Nginx
kill -TERM Nginx主进程号
# kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
4、重启Nginx
如果改变了Nginx的主配置文件,想重启Nginx,可以先检查Nginx的配置文件是否正确后才发送系统信号给Nginx主进程的方式进行,检查方法如下:
# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
只有出现如上OK信息才会加载新的配置文件。
4.1 平滑重启Nginx
kill -HUP Nginx主进程号
# kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
如果Nginx本身都还没启动,平滑重启可是会报错的。
5、Nginx的信号控制
TERM,INT 快速关闭
QUIT 从容关闭
HUP 平滑重启
USR1 重新打开日志文件、在切割日志时用途大
USR2 平滑升级可执行程序
WINCH 从容关闭工作进程
三、Nginx的基本配置与优化
首先看Nginx的主配置文件,可以发现原本的配置文件非常简练
1、配置虚拟主机
- # grep -v "#" nginx.conf
- worker_processes 1;
- events {
- worker_connections 1024;
- }
- http {
- include mime.types;
- default_type application/octet-stream;
- sendfile on;
- keepalive_timeout 65;
- server {
- listen 80;
- server_name localhost;
- location / {
- root html;
- index index.html index.htm;
- }
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root html;
- }
- }
- }
1.1、配置基于IP的虚拟主机
首先添加虚拟网卡:
ifconfig eth0:1 110.65.99.209 broadcast 110.65.99.255 netmask 255.255.252.0 up
route add -host 110.65.99.209 dev eth0:1
ifconfig eth0:2 110.65.99.210 broadcast 110.65.99.255 netmask 255.255.252.0 up
route add -host 110.65.99.210 dev eth0:2
如上命令最好写进/etc/rc.local中使得系统开机自动创建。
或者直接cp ifcfg-eth0 ifcfg-eth0:1
修改Nginx的主配置文件: /usr/local/nginx/conf/nginx.conf
在原本定义的一个server之后添加如下两个虚拟主机
然后创建目录server2和server3,并且在各自目录下创建index.html测试文件
- ###############server2################################
- server {
- listen 110.65.99.209:80;
- server_name server2;
- access_log logs/server2.access.log combined;
- location / {
- index index.html index.htm;
- root /usr/local/nginx/server2;
- }
- }
- ###############server3################################
- server {
- listen 110.65.99.210:80;
- server_name server3;
- access_log logs/server3.access.log combined;
- location / {
- index index.html index.htm;
- root /usr/local/nginx/server3;
- }
- }
检查配置文件是否写正确,然后才平滑重启Nginx
# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
# kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
测试:
# links http://110.65.99.209
# links http://110.65.99.210
测试后在/usr/local/nginx/logs目录下会自动创建Log日志文件
server2.access.log server3.access.log
# cat server2.access.log
110.65.99.209 - - [21/Apr/2011:22:34:11 +0800] "GET / HTTP/1.1" 200 8 "-" "ELinks/0.11.1 (textmode; Linux; 142x38-2)"
# cat server3.access.log
110.65.99.210 - - [21/Apr/2011:22:34:24 +0800] "GET / HTTP/1.1" 200 8 "-" "ELinks/0.11.1 (textmode; Linux; 142x38-2)"
1.2、配置基于域名的虚拟主机
接着如上的配置在server3下面添加如下两个虚拟主机
然后创建目录server4和server5,并且在各自目录下创建index.html测试文件
- ###############server4################################
- server {
- listen 80;
- server_name server4.com;
- access_log logs/server4.access.log combined;
- location / {
- index index.html index.htm;
- root /usr/local/nginx/server4;
- }
- }
- ###############server5################################
- server {
- listen 80;
- server_name server5.com;
- access_log logs/server5.access.log combined;
- location / {
- index index.html index.htm;
- root /usr/local/nginx/server5;
- }
- }
检查配置文件是否写正确,然后才平滑重启Nginx
# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
# kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
为了让系统直接缓存域名解析,在/etc/hosts后面追加如下内容(110.65.99.208是eth0-IP):
110.65.99.208 server5.com
110.65.99.208 server4.com
测试:
# links http://server4.com
# links http://server5.com
测试后在/usr/local/nginx/logs目录下会自动创建Log日志文件
# cat server4.access.log
110.65.99.208 - - [21/Apr/2011:22:41:46 +0800] "GET / HTTP/1.1" 200 8 "-" "ELinks/0.11.1 (textmode; Linux; 142x38-2)"
# cat server5.access.log
110.65.99.208 - - [21/Apr/2011:22:40:56 +0800] "GET / HTTP/1.1" 200 8 "-" "ELinks/0.11.1 (textmode; Linux; 142x38-2)"
2、Nginx的日志文件配置与切割
如上的日志文件内容是有一定的指令定义的,在Nginx的主配置文件中是通过
log_format指令来设置日志格式:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
如上指令的解析:
$remote_addr用户获取客户端的IP地址,但如果前端使用了反向代理,则获取到的是反向代理服务器的IP地址
$http_x_forwarded_for"则可以使得反向代理服务器转发请求的HTTP头信息来记录客户端IP
$request用于记录请求的URL和HTTP协议
$time_local用于记录访问时间与时区
$status用于记录请求状态,成功时状态为200,页面找到时状态为404
$body_bytes_sent用于记录发送给客户端的文件主体内容大小
$http_user_agent用于记录客户端浏览器的相关信息
$http_referer用于记录是从哪个页面链接访问过来的
上面指定好了日志格式后就要定义日志存放的路径了,access_log指令用于指定日志存放的路径
如果说不想记录日志,则直接
access_log off;
如果使用如下定义的日志格式存储日志,则可以通过
access_log logs/access.log main;
表示采用main的日志格式,记录在/usr/local/nginx/logs/access.log文件中
(如果把日志存储路径定义在其他地方,要确保Nginx进程设置的用户和组对该目录有读写权限,否则该日志文件就无法生成了)
对于生产系统下的server,由于巨大的访问量会导致日志文件的增加非常快,日志太大会影响server的效率,同时为了方便对日志进行分析计算,所以需要对日志文件做定时切割,这里使用按天计算切割。
先前的文档提及过kill -USR1的作用时重新打开日志文件,这样我们就可以先对旧的日志文件重命名,通过kill -USR1重新生成access.log文件。最后借助crontab进行按天切割的计划任务。
如下通过一个shell脚本进行日志切割:
- #!/bin/bash
- logs_path1="/usr/local/nginx/oldlog"
- logs_path2="/usr/local/nginx/logs"
- mkdir -p $logs_path1
- time=`date +%Y%m%d`
- mv ${logs_path2}/access.log ${logs_path1}/$time.access.log
- kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
- 通过crontab计划任务实现每天凌晨3点做一次日志切割
- # chmod +x /usr/local/nginx/log.sh
- # crontab -l
- * 3 * * * /usr/local/nginx/log.sh
3、Nginx的压缩输出配置与自动列目录配置
3.1、Nginx的压缩输出配置
gzip(GNU-ZIP)是一种压缩技术,通过gzip压缩后的页面可以变为原来的30%,使得用户浏览页面的时候速度会快很多,gzip的压缩需要 browser和server都支持。其过程是server端进行gzip压缩,browser端解压并解析。目前大多数browser都支持gzip过 的页面,如IE、firefox、chrome。
Nginx的压缩输出由一组gzip指令来实现,默认的Nginx配置文件仅仅为
gzip on;
这么个简单的指令,所以我们需要参考gzip模块相关介绍,实现gzip的具体压缩功能
如下:
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_vary on;
3.2、 Nginx的自动列目录配置
当指定目录下不存在index指令设置的默认首页文件,当访问该页面的时候会出现403 Forbidden
的信息,所以可以通过在Nginx的主配置文件中的location / {......}目录控制中配置自动列目录,如下代码:
location / {
autoindex on;
}
这样就可以访问页面显示出该目录下的文件或目录,而不是403 Forbidden信息。
3.3、 Nginx的浏览器本地缓存设置
browser caching是为了加速浏览,在用户磁盘上对最近请求过的文档进行存储。当访问者再次请求这个页面的时候,browser就可以直接从本地磁盘显示文档,从而加速页面的阅览,最终到达节约网络资源。
browser caching通过expires指令输出header头来实现,该指令语法如下:
语法:expires [time|epoch|max|off]
默认值: expires off
作用域: http ,server ,location
假设一个html页面会引用到一些javascript文件、图片文件,而这些格式的文件很少会被修改,则可以通过expires设置browser caching
eg:对常见格式的图片、flash文件在浏览器本地缓存30天,对Js、css文件在本地缓存1个小时:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
四、Nginx与PHP(FastCGI)的安装、配置与优化
CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的 反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。
FastCGI的工作原理(摘自百度百科)
1、web server(Nginx)启动时载入FastCGI进程管理器
2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自web server的连接
3、当客户端请求到达web server时,FastCGI进程管理器选择并连接到一个CGI解释器。web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi
4、FastCGI子进程完成处理后将标准输出和错误信息从同一个连接返回web server,当FastCGI子进程关闭连接时,请求便高处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器的下一个连接。
所以,如果是使用CGI技术的话,每一个Web请求PHP都必须重新解析 php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。然而不足之处在于FastCGI比 CGI消耗更多的系统内存,因为FastCGI是多进程的,CGI是多线程的。
1、安装PHP所需库(FastCGI模式)
1.1、 编译安装PHP所需的支持库
1>libiconv
GNU的libiconv是为nicode和其他的传统编码两种应用设计的编码转换库
http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
tar zxvf libiconv-1.13.1.tar.gz
cd libiconv-1.13.1
./configure --prefix=/usr/local/
make && make install
2>libmcrypt
Libmcrypt is a library which provides a uniform interface to several symmetric encryption algorithms. It is intended to have a simple interface to access encryption algorithms in ofb, cbc, cfb, and ecb modes. The algorithms it supports are DES, 3DES, RIJNDAEL, Twofish, IDEA, GOST, CAST-256, ARCFOUR, SERPENT, SAFER+, and more. The algorithms and modes are also modular so you can add and remove them on the fly without recompiling the library.
主要功能用于加密解密
http://down1.chinaunix.net/distfiles/libmcrypt-2.5.7.tar.gz
tar zxvf libmcrypt-2.5.7.tar.gz
cd libmcrypt-2.5.7
./configure
make && make install
/sbin/ldconfig #ldconfig通常在系统启动时运行,当用户安装了一个新的动态链接库时,就需要手工运行这个命令
cd libltdl/
./configure --enable-ltdl-install
make && make install
3>mhash
mhash是哈希函数库,比如用来计算消息的校验码之类的
http://sourceforge.net/projects/mhash/files/mhash/0.9.9/mhash-0.9.9.tar.gz/download
tar jxvf mhash-0.9.9.9.tar.bz2
cd mhash-0.9.9.9
./configure
make && make install
4>mcrypt
Mcrypt扩展库可以对数据进行加密和解密
http://code.google.com/p/lcmp/downloads/detail?name=mcrypt-2.6.8.tar.gz
tar zxvf mcrypt-2.6.8.tar.gz.gz
cd mcrypt-2.6.8
/sbin/ldconfig
./configure
make && make install
5>建立软连接
ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.7 /usr/lib/libmcrypt.so.4.4.7
ln -s /usr/local/lib/libmhash.* /usr/lib/
2、安装mysql
http://www.mysql.com/downloads/mysql/5.1.html#downloads
选择下拉“source code”最后一个
useradd mysql
tar zxvf mysql-5.1.56.tar.gz
cd mysql-5.1.56
./configure --prefix=/usr/local/mysql --enable-assembler --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
cp support-files/my-medium.cnf /etc/my.cnf
cd /usr/local/mysql/
bin/mysql_install_db --user=mysql
chown -R root .
chown -R mysql var/
chgrp -R mysql .
bin/mysqld_safe --user=mysql &
ln -s /usr/local/mysql/bin/* /usr/bin/
mysqladmin -uroot password 123456
mysql -uroot -p123456
mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY '123456';
3、安装PHP
1、编译安装PHP(FastCGI模式)
tar zxvf php-5.2.17.tar.gz
gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | patch -d php-5.2.17 -p1 //打补丁
cd php-5.2.17
./configure --prefix=/usr/local/php --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr/ --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap --without-pear --with-mysql=/usr/local/mysql/
make ZEND_EXTRA_LTBS='-liconv'
在执行编译的时候,这里遇到一个error:
xxx:undefined reference to `libiconv_open'
xxx: undefined reference to `libiconv'
xxx: undefined reference to `libiconv_close'
解决办法是:
编辑Makefile
EXTRA_LIBS = -lcrypt ...
在最后添加-liconv
然后重新编译
make ZEND_EXTRA_LTBS='-liconv'
make install
cp php.ini-dist /usr/local/php/etc/php.ini
cp php.ini-dist /usr/local/lib/php.ini
4、编译安装php5扩展模块
1>memcache
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。
php中的所讲的memcache是PHP的一个扩展,是一个客户端,用于连接memcached。
http://pecl.php.net/get/memcache-2.2.6.tgz
tar zxvf memcache-2.2.6.tgz
cd memcache-2.2.6
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
2>eaccelerator
eAccelerator是一个自由开放源码php加速器,优化和动态内容缓存,提高了php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。 它还有对脚本起优化作用,以加快其执行效率。使PHP程序代码执效率能提高1-10倍;
http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
tar jxvf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1
/usr/local/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config
make && make install
3>PDO_MYSQL
PDO_MYSQL is a driver that implements the PHP Data Objects (PDO) interface to enable access from PHP to MySQL 3.x, 4.x and 5.x databases.
http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
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
4>ImageMagick
ImageMagick是一套功能强大、稳定而且 免费的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD等格式。利用ImageMagick,你可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存。
ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz
tar zxvf ImageMagick-6.6.5-10.tar.gz
cd ImageMagick-6.6.5-10
./configure
make && make install
5>imagick
imagick 是PHP的一个扩展程序,它是默认的GD图象函数库的绝佳替代方案。面向对象的PHP编程使用非常方便。
imagick 默认并没有在PHP的安装包里,需要去PHP网站上下载,并在PHP.INI中打开此扩展。
http://pecl.php.net/get/imagick-3.0.1.tgz 或者
http://pecl.php.net/get/imagick-3.0.0.tgz
tar zxvf imagick-3.0.0.tgz
cd imagick-3.0.0
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
6>修改php.ini文件,配置eaccelerator加速PHP
1、查找/usr/local/php/etc/php.ini中的extension_dir = "./"
修改extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
并在此行后添加如下几行用于调用上面的扩展模块
extension = "memcache.so"
extension = "pdo_mysql.so"
extension = "imagick.so"
最后查找output_buffering = Off,修改成output_buffering = On
2、创建目录/usr/local/eaccelerator_cache
mkdir /usr/local/eaccelerator_cache
修改/usr/local/php/etc/php.ini在最后添加如下:
[eaccelerator]
zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="64"
eaccelerator.cache_dir=/usr/local/eaccelerator_cache
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
5、配置启用php-cgi
/usr/sbin/groupadd www
/usr/sbin/useradd -g www www
修改php-fpm配置文件(php-fpm是为PHP打的一个FastCGI管理补丁),可以实现平滑变更php.ini配置而无需重启php-cgi
vim /usr/local/php/etc/php-fpm.conf
把两处nobody修改成www,并且去掉<--!-->这样的注释,表示使用www启用进程php-cgi
然后通过 /usr/local/php/sbin/php-fpm start 来启用php-cgi。
ps -ef |grep php-cgi 可以查看php-cgi进程
6、配置Nginx支持PHP
修改Nginx的主配置文件/usr/local/nginx/conf/nginx.conf
去掉下面代码前面的#号:
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
然后在/usr/local/nginx/html目录下创建index.php文件测试即可.