这里以CentOS 5.5下 Nginx 1.2.3和PHP 5.2.17为准,其他版本安装方式是类似的。
一、创建Nginx和PHP专用的用户和用户组
代码如下 | 复制代码 |
1.[root@localhost /]# groupadd www 2.[root@localhost /]# useradd -s /sbin/nologin -M -g www www |
二、PHP与PHP-FPM的安装及优化
PHP-FPM是一个第三方的FastCGI进程管理器,它是作为PHP的一个补丁来开发的,在安装的时候需要和PHP源码一起编译。因为Nginx是一个轻量级的HTTP Server,必须借助第三方的FastCGI处理器才可以对PHP进行解析。
1. 首先下载并安装PHP的依赖
代码如下 | 复制代码 |
1.# 下载libmcrypt,有两个文件 2.[root@localhost downloads]# wget -c "http://downloads.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz?ts=1347243907&use_mirror=ncu" 3.[root@localhost downloads]# wget -c "http://downloads.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz?r=&ts=1347244005&use_mirror=nchc" 4.# 下载libmhash 5.[root@localhost downloads]# wget -c "http://downloads.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.bz2?ts=1347245105&use_mirror=ncu" 6. 7.# 首先安装libmcrypt 8.[root@localhost downloads]# tar zxvf libmcrypt-2.5.8.tar.gz 9.[root@localhost downloads]# cd libmcrypt-2.5.8 10.[root@localhost libmcrypt-2.5.8]# ./configure 11.[root@localhost libmcrypt-2.5.8]# make && make install 12.[root@localhost libmcrypt-2.5.8]# ldconfig 13.[root@localhost libltdl]# cd libltdl/ 14.[root@localhost libltdl]# ./configure --enable-ltdl-install 15.[root@localhost libltdl]# make && make install 16. 17.# 接下来安装mhash,因为mcrypt需要mhash的依赖 18.[root@localhost libltdl]# cd ../../ 19.[root@localhost downloads]# tar jxvf mhash-0.9.9.9.tar.bz2 20.[root@localhost downloads]# cd mhash-0.9.9.9 21.[root@localhost mhash-0.9.9.9]# ./configure 22.[root@localhost mhash-0.9.9.9]# make && make install 23. 24.# 最后安装mcrypt 25.[root@localhost mhash-0.9.9.9]# cd .. 26.[root@localhost downloads]# tar xzxvf mcrypt-2.6.8.tar.gz 27.[root@localhost downloads]# cd mcrypt-2.6.8 28.# 将mhash加入ld library路径中 29.[root@localhost mcrypt-2.6.8]# export LD_LIBRARY_PATH=/usr/local/lib 30.[root@localhost mcrypt-2.6.8]# ldconfig 31.[root@localhost mcrypt-2.6.8]# ./configure 32.[root@localhost mcrypt-2.6.8]# make && make install 33.[root@localhost mcrypt-2.6.8]# cd .. |
2. 下载PHP和对应版本的PHP-FPM
代码如下 | 复制代码 |
1.[root@localhost downloads]# wget -c http://www.php.net/get/php-5.2.17.tar.gz/from/this/mirror 2.# 在http://php-fpm.org/downloads目录下选择与安装php版本一致的PHP-FPM,否则会引起兼容性问题 3.[root@localhost downloads]# wget -c http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz 4.# 如果是5.2.x的版本的话,还需要下载PHP Hash冲突的补丁,5.3+不需要下载了 5.[root@localhost downloads]# wget -c https://github.com/laruence/laruence.github.com/raw/master/php-5.2-max-input-vars/php-5.2.17-max-input-vars.patch |
3. 安装PHP、PHP-FPM和对应的补丁
代码如下 | 复制代码 |
[root@localhost downloads]# tar xzvf php-5.2.17.tar.gz |
4. 编译安装PHP的扩展模块(根据实际情况选择)
代码如下 | 复制代码 |
1.# 设置php的根目录,注意切换为实际的php目录 2.[root@localhost downloads]# export PHP_HOME="/usr/local/php" 3. 4.# 安装pdo_mysql 5.[root@localhost downloads]# wget -c http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz 6.[root@localhost downloads]# tar zxvf PDO_MYSQL-1.0.2.tgz 7.[root@localhost downloads]# cd PDO_MYSQL-1.0.2 8.# 注意切换为实际的mysql目录 9.[root@localhost PDO_MYSQL-1.0.2]# $PHP_HOME/bin/phpize 10.[root@localhost PDO_MYSQL-1.0.2]# ./configure --with-php-config=$PHP_HOME/bin/php-config --with-pdo-mysql=/usr/local/mysql 11.[root@localhost PDO_MYSQL-1.0.2]# make && make install 12.[root@localhost PDO_MYSQL-1.0.2]# cd .. 13. 14.# 安装eAccelerator 15.[root@localhost downloads]# wget -c https://github.com/downloads/eaccelerator/eaccelerator/eaccelerator-0.9.6.1.tar.bz2 16.[root@localhost downloads]# tar jxvf eaccelerator-0.9.6.1.tar.bz2 17.[root@localhost downloads]# cd eaccelerator-0.9.6.1 18.[root@localhost eaccelerator-0.9.6.1]# $PHP_HOME/bin/phpize 19.[root@localhost eaccelerator-0.9.6.1]# ./configure --enable-shared --with-php-config=$PHP_HOME/bin/php-config 20.[root@localhost eaccelerator-0.9.6.1]# make && make install 21.[root@localhost eaccelerator-0.9.6.1]# cd .. |
接下来修改php.ini文件来启用安装的第三方模块
代码如下 | 复制代码 |
1.# 打开php.ini,查找extension_dir 2.[root@localhost downloads]# vim $PHP_HOME/etc/php.ini 3.# 将extension_dir设置为新的目录/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/ 4.extension_dir="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/" 5.# 增加扩展 6.extension=eaccelerator.so 7.extension=pdo_mysql.so 8.## ------- 按shift+g键跳到配置文件的最末尾,加上eaccelerator配置信息: 9.[eaccelerator] 10.# 共享内存,单位为M 11.eaccelerator.shm_size="32" 12.eaccelerator.cache_dir="/tmp/eaccelerator" 13.eaccelerator.enable="1" 14.eaccelerator.optimizer="1" 15.eaccelerator.check_mtime="1" 16.eaccelerator.debug="0" 17.eaccelerator.filter="" 18.eaccelerator.shm_ttl="0" 19.eaccelerator.shm_prune_period="0" 20.eaccelerator.shm_only="0" 21. 22.[root@localhost downloads]# mkdir /tmp/eaccelerator 23.[root@localhost downloads]# chmod 777 /tmp/eaccelerator 24.# 这个时候运行php应该可以看到eaccelerator已经加载成功 25.[root@localhost downloads]# $PHP_HOME/bin/php -version 26.PHP 5.2.17p1 (cli) (built: Sep 10 2012 18:41:32) 27.Copyright (c) 1997-2010 The PHP Group 28.Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies 29. with eAccelerator v0.9.6.1, Copyright (c) 2004-2010 eAccelerator, by eAccelerator |
5. 配置与优化PHP-FPM
PHP-FPM默认的配置文件在$PHP_HOME/etc/php-fpm.conf中,下面对常用的配置项进行说明:
1.
2.
3.
4.
5.
6.
7.
8.
6. 启动FastCGI进程
1.[root@localhost /]# ulimit -SHn 65535
2.# start为启动,reload可以在进程不中断的情况下重新加载php.ini配置信息
3.[root@localhost /]# /usr/local/php/sbin/php-fpm start
其中php-fpm除了start之外还有很多参数,如stop为强制终止、quit为平滑终止、restart重启进程、reload为在不终止php的情况下重新加载php的配置文件php.ini。
三、安装Nginx
1. 首先安装Nginx所需的pcre-devel库
安装pcre库的目的是为了让Nginx支持HTTP rewrite模块。安装很简单,过程如下:
1.# 下载安装最新的pcre库
代码如下 | 复制代码 |
2.[root@localhost downloads]# wget -c ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.31.tar.gz 3.[root@localhost downloads]# tar xzvf pcre-8.31.tar.gz 4.[root@localhost downloads]# cd pcre-8.31 5.[root@localhost pcre-8.31]# ./configure 6.[root@localhost pcre-8.31]# make && make install 7.[root@localhost pcre-8.31]# cd .. |
2. 安装TCMalloc提升Nginx性能(可选)
TCMalloc的全称为Thread-Caching Malloc,是谷歌开发的开源工具google-perftools中的一个成员。与标准的glibc库的Malloc相比,TCMalloc库在内存分配效率和速度上要高很多。
如果是64位系统的话首先需要安装libunwind库,32位系统不需要安装。
代码如下 | 复制代码 |
1.[root@localhost downloads]# wget -c http://download.savannah.gnu.org/releases/libunwind/libunwind-1.0.1.tar.gz 2.[root@localhost downloads]# tar xzvf libunwind-1.0.1.tar.gz 3.[root@localhost downloads]# cd libunwind-1.0.1 4.[root@localhost libunwind-1.0.1]# CFLAGS=-fPIC ./configure 5.[root@localhost libunwind-1.0.1]# make CFLAGS=-fPIC 6.[root@localhost libunwind-1.0.1]# make CFLAGS=-fPIC install 7.[root@localhost libunwind-1.0.1]# cd .. |
然后安装google-perftools,可以从https://code.google.com/p/gperftools/downloads/list下载。
代码如下 | 复制代码 |
1.[root@localhost downloads]# wget -c https://gperftools.googlecode.com/files/gperftools-2.0.tar.gz 2.[root@localhost downloads]# tar xzvf gperftools-2.0.tar.gz 3.[root@localhost downloads]# cd gperftools-2.0 4.[root@localhost gperftools-2.0]# ./configure 5.[root@localhost gperftools-2.0]# make && make install 6.[root@localhost gperftools-2.0]# echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf 7.[root@localhost gperftools-2.0]# ldconfig |
3. 安装Nginx
代码如下 | 复制代码 |
1.[root@localhost downloads]# wget -c http://nginx.org/download/nginx-1.2.3.tar.gz 2.[root@localhost downloads]# tar xzvf nginx-1.2.3.tar.gz 3.[root@localhost downloads]# cd nginx-1.2.3 4.[root@localhost nginx-1.2.3]# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-google_perftools_module 5.[root@localhost nginx-1.2.3]# make && make install |
相对来说Nginx的安装也比较简单,在默认情况下,经过编译安装的Nginx包含了大部分可用的模块。可以通过“./configure --help”选项来查看各个配置项的信息,也可以查看Nginx官方文档 http://nginx.org/en/docs/install.html。
下面是几个常用的配置项:
--prefix 安装目录,默认为/usr/local/nginx
--user和--group 用来指定允许的用户和组
--with-http_stub_status_module 该模块可以启用Nginx的NginxStatus功能,来监控Nginx的当前状态
--with-http_ssl_module 支持SSL
--with-google_perftools_module 支持TCMalloc,如果前面安装了该模块选择该项
4. 检查Nginx配置文件是否正确
1.# 通过以下命令检查配置文件是否正确
代码如下 | 复制代码 |
2.[root@localhost downloads]# /usr/local/nginx/sbin/nginx -t |
如果一切正常的话会显示如下信息:
代码如下 | 复制代码 |
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok |
对于64位系统的话可能会出现类似下面的信息:
代码如下 | 复制代码 |
/usr/local/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory |
这个时候可以通过如下命令检查nginx缺少的依赖:
代码如下 | 复制代码 |
1. [root@localhost downloads]# ldd /usr/local/nginx/sbin/nginx 2. /usr/local/nginx/sbin/nginx: 3. libpthread.so.0 => /lib64/libpthread.so.0 (0x000000375a000000) 4. libcrypt.so.1 => /lib64/libcrypt.so.1 (0x000000375bc00000) 5. libpcre.so.1 => /lib64/libpcre.so.1 (0x0000003759c00000) 6. libssl.so.6 => /lib64/libssl.so.6 (0x000000375e000000) 7. libcrypto.so.6 => /lib64/libcrypto.so.6 (0x000000375d000000) 8. libdl.so.2 => /lib64/libdl.so.2 (0x00002adbfb645000) 9. libz.so.1 => /lib64/libz.so.1 (0x000000375b000000) 10. libpcre.so.1 => not found 11. libprofiler.so.0 => not found 12. libunwind.so.8 => not found 13. libc.so.6 => /lib64/libc.so.6 (0x0000003759800000) 14. /lib64/ld-linux-x86-64.so.2 (0x0000003759400000) 15. libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x000000375d800000) 16. libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x000000375f800000) 17. libcom_err.so.2 => /lib64/libcom_err.so.2 (0x000000375dc00000) 18. libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x000000375f400000) 19. libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x000000375fc00000) 20. libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x000000375cc00000) 21. libresolv.so.2 => /lib64/libresolv.so.2 (0x000000375c800000) 22. libselinux.so.1 => /lib64/libselinux.so.1 (0x000000375ac00000) 23. libsepol.so.1 => /lib64/libsepol.so.1 (0x000000375a800000) |
对于出现not found的依赖可以首先通过whereis查询所在的位置,然后通过ln建立链接到/lib64/目录下面:
代码如下 | 复制代码 |
1.[root@localhost downloads]# ln -s /lib64/libpcre.so.0.0.1 /lib64/libpcre.so.1 2.[root@localhost downloads]# ln -s /usr/local/lib/libprofiler.so /lib64/libprofiler.so.0 3.[root@localhost downloads]# ln -s /usr/local/lib/libunwind.so /lib64/libunwind.so.8 |
5. Ngnix的启动、停止和平滑重启
1.# 启动Nginx
2.[root@localhost downloads]# /usr/local/nginx/sbin/nginx
3.# 使用下面命令查看是否启动成功
4.[root@localhost downloads]# ps -ef | grep nginx
5.# 关闭Nginx使用kill pid,其中pid存放在nginx安装目录的 logs/nginx.pid下面,可以使用下面的方法直接关闭
6.[root@localhost downloads]# kill `cat /usr/local/nginx/logs/nginx.pid`
7.# 然后查看是否有nginx的进程
8.[root@localhost downloads]# ps -ef | grep nginx
9.# 平滑切换Nginx,0.8.x及以上版本可以直接使用-s reload方法
10.[root@localhost downloads]# /usr/local/nginx/sbin/nginx -s reload
6. 启用TCMalloc(可选)
代码如下 | 复制代码 |
1.# 创建一个线程目录,将文件放在/tmp/tcmalloc下面 2.[root@localhost downloads]# mkdir /tmp/tcmalloc 3.[root@localhost downloads]# chmod 777 /tmp/tcmalloc 4.# 修改nginx.conf配置文件,在pid这行下面添加配置如下信息 5.[root@localhost downloads]# vim /usr/local/nginx/conf/nginx.conf 6.google_perftools_profiles /tmp/tcmalloc; 7.# 重启nginx 8.[root@localhost downloads]# /usr/local/nginx/sbin/nginx -s reload 9.[root@localhost downloads]# lsof -n | grep tcmalloc |
7. 自动切割Nginx的日志文件
Nginx自身没有日志切割的功能,如果时间长的话日志文件会很大,可以使用下面的脚本实现日志文件自动每天进行切割:
代码如下 | 复制代码 |
1. #!/bin/bash 2. 3. # The Nginx logs path 4. nglogs='/usr/local/nginx/logs' 5. 6. mkdir -p ${nglogs}/$(date +%Y)/$(date +%m) 7. mv ${nglogs}/access.log ${nglogs}/$(date +%Y)/$(date +%m)/access.$(date +%Y%m%d).log 8. mv ${nglogs}/error.log ${nglogs}/$(date +%Y)/$(date +%m)/error.$(date +%Y%m%d).log 9. kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` |
以上文件保存在/usr/local/nginx/sbin/cutlogs.sh中,然后修改执行权限并添加到任务中
代码如下 | 复制代码 |
1.[root@localhost ~]# chmod +x /usr/local/nginx/sbin/cutlogs.sh |
四、将Nginx和php-fpm加入到开机启动
代码如下 | 复制代码 |
[root@localhost downloads]# cat >> /etc/rc.local < |
我的博物馆故事 官方安卓版v1.61.2
我的博物馆故事是一款以消除为主题的经营养成类手游,在这里玩家
专业模拟飞行10 手机版v12.2.4
专业模拟飞行10安卓版是一款飞行休闲手游,顶尖的物理飞行引擎
动物起义战斗模拟器二琳同款 最新版v4.1.1
动物起义战斗模拟器是一个非常有趣的模拟类游戏,玩家可以召唤各
迷你世界七周年 安卓手机版v1.43.0
迷你世界7周年是一款由《迷你世界》官方推出的庆祝特别版本,在
劫后公司无限资源版 v1.0.5.1
劫后公司内置菜单版是游戏的破解版本,在该版本中为玩家提供了内