Nginx
是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
预备知识:
Web服务器常用的机制
select
、
poll
和
epoll
:
Select:
1.Socket数量限制:该模式可操作的Socket数由FD_SETSIZE决定,内核默认32*32=1024
。
2.操作限制:通过遍历FD_SETSIZE(1024)个Socket来完成调度,不管哪个Socket是活跃的, 都遍历一遍.
Poll:
1.Socket数量几乎无限制:该模式下的Socket对应的fd列表由一个数组来保存
,
大小不限(默认4k)
。
2.操作限制:同Select
。
Epoll:
1.Socket数量无限制:同Poll
2.操作无限制:基于内核提供的反射模式,有活跃Socket时,内核访问该Socket的callback,不需要遍历轮询
。
select 和epoll效率差的原因
:
select是轮询、epoll是触发式的,所以在特定的应用上效率相差会很多
。
nginx:支持高并发连接.官方测试的是5w并发连接但在实际生产中可制成2-4w并发连接数, 得益于nginx使用最新的epoll(linux 2.6内核)和kqueue(freebsd)网络I/O模型
,
而apache使用的则是传统的select模型,其比较稳定的prefork模式为多进程模式
,
需要经常派生子进程,所消耗的CPU等服务器资源要比nginx高的多
。
下面我们来看看
lnmp环境的搭建:
一、安装
mysql
这次我们下了一个二进制的包
mysql-5.5.15-linux2.6-i686.tar.gz
1、
解压
[root@zlj ~]# tar -zxvf mysql-5.5.15-linux2.6-i686.tar.gz -C /usr/local/
2、
创建mysql 用户及组
[root@zlj ~]# groupadd -r mysql
#创建mysql组
[root@zlj ~]# useradd -r -g mysql mysql
-M #创建mysql用户所属组为mysql,不创建家目录

3、
切换目录
[root@zlj ~]# cd /usr/local/
为了方便我们管理,我们将
mysql-5.5.15-linux2.6-i686
创建软连接
[root@zlj local]# ln -s mysql-5.5.15-linux2.6-i686 mysql

4、
改变文件权限
[root@zlj local]# cd mysql
[root@zlj mysql]# chown -R mysql .
[root@zlj mysql]# chgrp -R mysql .
[root@zlj mysql]# scripts/mysql_install_db --user=mysql
#执行脚本

[root@zlj mysql]# chown -R root .
[root@zlj mysql]# chown -R mysql data
再将权限改过来

5、创建配置文件
[root@zlj mysql]# cp support-files/my-medium.cnf /etc/my.cnf
#拷贝配置文件
[root@zlj mysql]# cp support-files/mysql.server /etc/init.d/mysqld
# 给service 管理
[root@zlj mysql]# chmod a+x /etc/init.d/mysqld
#给文件执行权
[root@zlj mysql]# service mysqld start
# 启用mysql

为了能够直接操作
mysql
修改环境变量
[root@zlj mysql]# vim /etc/profile
添加
PATH=$PATH:/usr/local/mysql/bin

[root@zlj mysql]# . /etc/profile
#加载环境变量
[root@zlj mysql]# mysqladmin -u root -p password '123'
#给数据库创建密码
让系统能够调用mysql的库
编辑配置文件
[root@zlj mysql]# vim /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib

[root@zlj mysql]# ldconfig
#刷新缓冲文件
二、
安装nginx
1、首先要安装 pcre (正则表达式)和libevent(能够显著地提高软件的性能)
[root@zlj Server]# rpm -ivh pcre-6.6-2.el5_1.7.i386.rpm
#安装pcre
[root@zlj ~]# tar -zxvf libevent-2.0.16-stable.tar.gz -C /usr/local/src
#解压
[root@zlj libevent-2.0.16-stable]# ./configure --prefix=/usr/local/libevent
#将它安装在
/usr/local/libevent
目录下
[root@zlj libevent-2.0.16-stable]# make && make install
#编译安装

安装成功
为了让系统能够调用
libevent的库函数
编辑
[root@zlj libevent-2.0.16-stable]# vim /etc/ld.so.conf.d/libevent.conf
/usr/local/libevent/lib

为了能够调用到
libevent头文件,需要创建软连接
[root@zlj libevent-2.0.16-stable]# ln -s /usr/local/libevent/include /usr/include/libevent
安装nginx
[root@zlj ~]# tar -zxvf nginx-1.0.11.tar.gz -C /usr/local/src/
#解压
[root@zlj nginx-1.0.11]# groupadd -r nginx
#创建nginx 组
[root@zlj nginx-1.0.11]# useradd -r -g nginx -s /bin/false -M nginx
#创建nginx 用户
[root@zlj nginx-1.0.11]#

编译
./configure \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
--with-pcre
提示:
checking for PCRE library ... not found
checking for PCRE library in /usr/local/ ... not found
checking for PCRE library in /usr/include/pcre/ ... not found
checking for PCRE library in /usr/pkg/ ... not found
checking for PCRE library in /opt/local/ ... not found
我们可能要将
pcre-devel
装上
[root@zlj Server]# rpm -ivh pcre-devel-6.6-2.el5_1.7.i386.rpm

再次编译就能够成功
[root@zlj nginx-1.0.11]# make && make install
#安装
为了实现nginx的管理,我们写了一个脚本
- [root@zlj sbin]
-
-
-
-
- function start(){
-
- echo -n "nginx is start ."
- sleep 1
- echo -n " ."
- sleep 1
-
-
- if [ -e /var/lock/subsys/nginx ];then
- sleep 1
- echo -e "\033[31m [faile]\033[0m"
- else
- /usr/local/nginx/sbin/nginx
- sleep 1
- echo -e "\033[32m [ok]\033[0m"
- touch /var/lock/subsys/nginx
- fi
-
-
- }
- function stop(){
- echo -n "nginx is stoping ..."
- if [ -e /var/lock/subsys/nginx ];then
- killall nginx
- sleep 1
- echo -e "\033[32m [ok]\033[0m"
- rm -f /var/lock/subsys/nginx
-
- else
- sleep 1
- echo -e "\033[31m [faile]\033[0m"
- fi
-
- }
- case $1 in
- start)
- start
- ;;
- stop)
- stop
- ;;
- restart)
- stop;start
- ;;
- *)
- echo "Usage {start|stop|restart}"
- ;;
- esac

给它执行权
[root@zlj sbin]# chmod a+x /etc/init.d/nginxd
[root@zlj ~]# service nginxd start
#启动
[root@zlj ~]# chkconfig --add nginxd
#设置开机启动

三、
安装php
1、我们下的是
php-5.4.13.tar.bz2
[root@zlj ~]# tar -jxvf php-5.4.13.tar.bz2 -C /usr/local/src
解压
检测环境
[root@zlj ~]#./configure \
--prefix=/usr/local/php \
# 预安装目录
--enable-fpm \
#支持fastcgi
--enable-sockets \
--with-mysql=/usr/local/mysql \
#告诉它mysql
--with-mysqli=/usr/local/mysql/bin/mysql_config \
#支持mysql扩展
--enable-mbstring \
--enable-xml \
--with-png-dir \
--with-png \
--with-jpeg-dir \
--with-zlib \
--with-freetype-dir \
--with-config-file-path=/etc/php \
--with-config-file-scan-dir=/etc/php5.d
#php扩展功能目录
[root@zlj php-5.4.13]# make && make install
#安装
2、创建php的配置文件
[root@zlj php-5.4.13]# mkdir /etc/php
#创建这个目录
[root@zlj php-5.4.13]# cp php.ini-production /etc/php/php.ini
#拷贝这个文件

[root@zlj php-5.4.13]# mkdir /etc/php
5.d #创建这个目录
[root@zlj php-5.4.13]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
#创建service管理文件
[root@zlj php-5.4.13]# chmod a+x /etc/init.d/php-fpm
#更改权限

3、
产生php-fpm的配置文件
PHP-FPM是一个PHPFastCGI管理器
,
PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中
。
进入php的安装目录,下的etc
[root@zlj etc]# cp php-fpm.conf.default php-fpm.conf
#
启动php-fpm
[root@zlj php-5.4.13]# service php-fpm start
[root@zlj php-5.4.13]# chkconfig --add php-fpm
#设置自动启动

让
nginx 支持
php-fpm
修改配置文件
[root@zlj ~]# vim /etc/nginx/nginx.conf
6
5 location ~ \.php$ {
66 root html;
67 fastcgi_pass 127.0.0.1:9000;
68 fastcgi_index index.php;
69 fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
#nginx的安装目录
70 include fastcgi_params;
71 }

45 index index.php index.html index.htm;

四、
php加速
我们用这个包
xcache-2.0.1.tar.gz
[root@zlj ~]# tar -zxvf xcache-2.0.1.tar.gz -C /usr/local/src/
#解压
1、安装前先看看安装说明
[root@zlj xcache-2.0.1]# vim INSTALL
$ phpize --clean && phpize
#让我们用phpize生成configure文件
$ ./configure --help
$ CFLAGS='your cflags' ./configure --enable-xcache --enable...
$ make
$ su
phpize
文件在
/usr/local/php/bin
目录下
[root@zlj xcache-2.0.1]# /usr/local/php/bin/phpize
#执行

2、编译
[root@zlj xcache-2.0.1]#
./configure
--enable-xcache
--with-php-config=/usr/local/php/bin/php-config
#检查环境
[root@zlj xcache-2.0.1]# make && make install
#安装
3、
编辑php,整合php和xcache
[root@zlj xcache-2.0.1]# cp xcache.ini /etc/php5.d
[root@zlj xcache-2.0.1]# vim /etc/php5.d/xcache.ini
#编辑
zend_extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/xcache.so
;;zend_extension = c:/php/extensions/php_xcache.dll
#给它注释掉

4、
配置
xcache的管理
Xcache自带管理页面
拷贝admin目录到nginx的站点目录
[root@zlj xcache-2.0.1]# cp -rp admin /usr/local/nginx/html/
更改文件权限
[root@zlj html]# chmod a+r
x
admin
#给它读和切换目录的权限
[root@zlj html]# chmod a+r admin/index.php
#给它读取的权限

添加认证
[root@zlj xcache-2.0.1]# vim /etc/php5.d/xcache.ini
xcache.admin.user = "admin"
xcache.admin.pass = "21232f297a57a5a743894a0e4a801fc3"

密码必须是
md5加密的
[root@zlj html]# echo -n "admin" |md5sum
#输出admin加密后的密文

将密文拷到上面即可
5、
测试
[root@zlj xcache-2.0.1]# /usr/local/nginx/sbin/nginx
#启动
提示:
nginx: [emerg] mkdir() "/var/tmp/nginx/client/" failed (2: No such file or directory)
说明没有这个文件夹
创建这样的文件夹
[root@zlj xcache-2.0.1]# mkdir -p /var/tmp/nginx/client
在启动
[root@zlj html]# /usr/local/nginx/sbin/nginx
在浏览器
url
中输入
192.168.1.100/admin 我们服务器的ip和管理虚拟目录名

可以看到非常详细的内存管理页面



这就搭建成功了!