一、NGINX的搭建
1.Nginx说明:
Nginx是一个轻量级的HTTP服务器,也是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。
在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 可以承受3万以上的并发连接数,相当于同等环境下Apache的10倍。
为什么Nginx的性能要比Apache高得多?这得益于Nginx使用了最新的epoll(Linux 2.6内核)和kqueue(freebsd)网络I/O模型,而Apache则使用的是传统的select模型。目前Linux下能够承受高并发访问的 Squid、Memcached都采用的是epoll网络I/O模型。
处理大量的连接的读写,Apache所采用的select网络I/O模型非常低效。下面用一个比喻来解析Apache采用的select模型和Nginx采用的epoll模型进行之间的区别: 假设你在大学读书,住的宿舍楼有很多间房间,你的朋友要来找你。select版宿管大妈就会带着你的朋友挨个房间去找,直到找到你为止。而epoll版 宿管大妈会先记下每位同学的房间号,你的朋友来时,只需告诉你的朋友你住在哪个房间即可,不用亲自带着你的朋友满大楼找人。如果来了10000个人,都要 找自己住这栋楼的同学时,select版和epoll版宿管大妈,谁的效率更高,不言自明。同理,在高并发服务器中,轮询I/O是最耗时间的操作之 一,select和epoll的性能谁的性能更高,同样十分明了。
2.系统要求
系统要求:Linux 2.6+ 内核
方法一: 命令: uname -a 作用: 查看系统内核版本号及系统名称 方法二: 命令: cat /proc/version
作用: 查看目录"/proc"下version的信息,也可以得到当前系统的内核版本号及系统名称
Nginx版本:nginx/1.8.0
3.安装过程说明
groupadd www OR /usr/sbin/groupadd www
useradd -g www www OR /usr/sbin/useradd -g www www
(1)获取nginx的安装包
wget http://nginx.org/download/nginx-1.8.0.tar.gz
(2)解压nginx的安装包
yum -y install gcc
yum install gcc-c++
yum -y install gcc yum -y install gcc-c++
解压安装包
# tar zxvf nginx-1.8.0.tar.gz
跳转到目录
# cd nginx-1.8.0
设置编译路径为 /usr/local/nginx
# ./configure --prefix=/usr/local/nginx
pcre(作用rewrite)、zlib(作用压缩)、ssl,这个也可以自己下载编译安装
yum -y install zlib;
yum -y install yum-fastestmirror
yum -y install pcre-devel
yum –y install pcre;
yum -y install openssl openssl-devel
yum –y install openssl;
编译 :
Make
编译安装:
Make install
4.遇到的问题:
[root@localhost sbin]# ./nginx -s reload
nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
解决方法:
[root@localhost nginx]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
使用nginx -c的参数指定nginx.conf文件的位置
5.NGINX常用操作
启动操作
/usr/nginx/sbin/nginx (/usr/nginx/sbin/nginx -t 查看配置信息是否正确)
停止操作停止操作是通过向nginx进程发送信号(什么是信号请参阅linux文 章)来进行的步骤1:查询nginx主进程号ps -ef | grep nginx在进程列表里 面找master进程,它的编号就是主进程号了。步骤2:发送信号从容停止Nginx:kill -QUIT 主进程号快速停止Nginx:kill -TERM 主进程号强制停止Nginx:pkill -9 nginx另外, 若在nginx.conf配置了pid文件存放路径则该文件存放的就是Nginx主进程号,如果没指定则放在nginx的logs目录下。有了pid文 件,我们就不用先查询Nginx的主进程号,而直接向Nginx发送信号了,命令如下:kill -信号类型 '/usr/nginx/logs/nginx.pid'平滑重启如果更改了配置就要重启Nginx,要先关闭Nginx再打开?不是的,可以向Nginx 发送信号,平滑重启。平滑重启命令:kill -HUP 住进称号或进程号文件路径
或者使用
/usr/nginx/sbin/nginx -s reload
注意,修改了配置文件后最好先检查一下修改过的配置文件是否正 确,以免重启后Nginx出现错误影响服务器稳定运行。判断Nginx配置是否正确命令如下:nginx -t -c /usr/nginx/conf/nginx.conf
或者
/usr/nginx/sbin/nginx -t
完整server.conf
- server {
- listen 80 default;
- server_name dev.localhost;
- access_log logs/dev.access.log;
- root /var/www/html/dev;
- server_name_in_redirect off;
- location / {
- index index.html index.php;
- }
- location ~ .php$ {
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi_params;
- }
- }
PHP安装
wget
http://cn2.php.net/distributions/php-5.5.36.tar.gz
wget
ftp://ftp.gnome.org/pub/GNOME/sources/libxml2/2.6/libxml2-2.6.30.tar.gz
wget
http://120.52.73.49/jaist.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
wget
http://zlib.net/zlib-1.2.8.tar.gz
wget
http://down1.chinaunix.net/distfiles/gd-2.0.32.tar.gz
wget
ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
http://ftp.twaren.net/Unix/NonGNU//freetype/freetype-2.5.0.1.tar.gz
ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng16/libpng-1.6.7.tar.gz
http://www.ijg.org/files/jpegsrc.v9.tar.gz
开始安装:
注意:按如下顺序安装
1.安装libxml2
cd /usr/local/src/
tar zxvf libxml2-2.6.30.tar.gz
cd libxml2-2.6.30
./configure --prefix=/usr/local/libxml2
make && make install
2.安装libmcrypt、zlib、libpng、freetype
安装方法同libxml2,分别安装到如下路径
/usr/local/libmcrypt
/usr/local/zlib
/usr/local/libpng
/usr/local/freetype
注意,安装freetype时有可能提示如下错误:
either set the LIBPNG_CFLAGS and LIBPNG_LDFLAGS environment variables
这是提示找不到libpng的安装位置,所以需要将libpng的bin目录配置到环境变量中:
解决方法:
编辑:vi /etc/profile
LIB_PNG=/usr/local/libpng/bin
PATH=$LIB_PNG:$PATH
export PATH
生效:. /etc/profile
重新安装freetype即可。
3.安装jpeg9
mkdir /usr/local/jpeg9
mkdir /usr/local/jpeg9/bin
mkdir /usr/local/jpeg9/lib
mkdir /usr/local/jpeg9/include
mkdir -p /usr/local/jpeg9/man/man1
cd /usr/local/src/
tar zxvf jpegsrc.v9.tar.gz
cd jpeg-9
./configure
> --prefix=/usr/local/jpeg9/
> --enable-shared //建立共享库使用的GNU 的libtool
> --enable-static //建立静态库使用的GNU 的libtool
make && make install
4.安装autoconf
cd /usr/local/src/
tar zxvf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure
make && make install
5.安装GD
cd /usr/local/src/
tar zxvf libgd-2.1.0.tar.gz
cd libgd-2.1.0
./configure //配置命令
> --prefix=/usr/local/gd2/ //指定软件安装的位置
> --with-zlib=/usr/local/zlib/ //指定到哪去找zlib 库文件的位置
> --with-jpeg=/usr/local/jpeg9/ //指定到哪去找jpeg 库文件的位置
> --with-png=/usr/local/libpng/ //指定到哪去找png 库文件的位置
> --with-freetype=/usr/local/freetype/ //指定到哪去找freetype 2.x 字体库的位置
make && make install
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-apxs2=/usr/local/apache2/bin/apxs --with-libxml-dir=/usr/local/libxml2 --with-png-dir=/usr/local/libpng/ --with-jpeg-dir=/usr/local/jpeg6/ --with-freetype-dir=/usr/local/freetype/ --with-gd=/usr/local/gd2/ --with-zlib-dir=/usr/local/zlib/ --with-mcrypt=/usr/local/libmcrypt/ --with-mysql --with-mysqli --enable-soap --enable-mbstring=all --enable-sockets --enable-pdo --with-pdo-mysql
ok,以上过程应该不会遇到问题,
接下来安装PHP
。
问题从这里开始,我们一步一步说明:
cd /usr/local/src/
tar zxvf php-5.5.6.tar.gz
cd php-5.5.6
./configure //执行当前目录下软件自带的配置命令
> --prefix=/usr/local/php //设置PHP5 的安装路径
> --with-config-file-path=/usr/local/php/etc //指定PHP5 配置文件存入的路径
> --with-apxs2=/usr/local/apache2/bin/apxs //告诉PHP 查找Apache 2 的地方
> --with-libxml-dir=/usr/local/libxml2/ //告诉PHP 放置libxml2 库的地方
> --with-png-dir=/usr/local/libpng/ //告诉PHP 放置libpng 库的地方
> --with-jpeg-dir=/usr/local/jpeg6/ //告诉PHP 放置jpeg 库的地方
> --with-freetype-dir=/usr/local/freetype/ //告诉PHP 放置freetype 库的地方
> --with-gd=/usr/local/gd2/ //告诉PHP 放置gd 库的地方
> --with-zlib-dir=/usr/local/zlib/ //告诉PHP 放置zlib 库的地方
> --with-mcrypt=/usr/local/libmcrypt/ //告诉PHP 放置libmcrypt 库的地方
> --with-mysql //激活MySQL功能,缺省为mysqlnd
> --with-mysqli //变量激活新增加的MySQLi 功能,缺省为mysqlnd
> --enable-soap //变量激活SOAP 和Web services 支持
> --enable-mbstring=all //使多字节字符串支持
> --enable-sockets //变量激活socket 通信特性
> --enable-pdo //激活pdo
> --with-pdo-mysql //激活pdo-mysql,缺省为mysqlnd
--enable-fpm
接下来就都是重点了
问题1:
按照以上配置,make时可能报如下错误:
/usr/local/src/php-5.5.6/ext/gd/gd.c:57:22: error: X11/xpm.h: No such file or directory
make: *** [ext/gd/gd.lo] Error 1
问题说明:这是提示gd库不支持xpm
解决方法:
1.安装libxpm
yum install libXpm-devel.x86_64
2.按照上面的方法重新安装gd库
安装成功后会看到如下信息,说明gd已经支持xpm了:
** Configuration summary for libgd 2.1.0:
Support for Zlib: yes
Support for PNG library: yes
Support for JPEG library: yes
Support for VPX library: no
Support for TIFF library: no
Support for Freetype 2.x library: yes
Support for Fontconfig library: no
Support for Xpm library: yes
Support for pthreads: yes
3.再次按照上面的方法安装php:
问题2:
报错:
ext/gd/gd.c:1330: undefined reference to `XpmLibraryVersion'
问题说明:没有找到xpm库的安装位置
解决方法:
1.rpm -ql libXpm :查询出libXpm的安装位置,发现在/usr/lib64/ 下
2.重新编译php,./configure中增加 --with-xpm-dir=/usr/lib64/
3.make && make install 成功!
- PHP和
nginx
整合
Php-fpm配置
修改配置文件
1
cd
/home/likang/package/
php-5.6.2
cp php.ini-production /usr/local/php/etc/php.ini
cp /usr/local/php/etc/php-fpm.conf.default.conf php-fpm.conf
保存配置文件后,检验配置是否正确的方法为:
/usr/local/php/sbin/php-fpm -t
如果出现诸如
“test is successful”
字样,说明配置没有问题。
启动php-fpm
cp /usr/local/src/php-5.3.27/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod 755 /etc/init.d/php-fpm
service php-fpm start
如果想让它开机启动,执行:
chkconfig php-fpm on
检测是否启动:
ps aux |grep php-fpm
netstat -ant |grep 9000