简介:

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,内核访问该Socketcallback,不需要遍历轮询
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的管理,我们写了一个脚本
 
         
 
   
  1. [root@zlj sbin]# vim /etc/init.d/nginxd  
  2.  
  3. #!/bin/bash 
  4. # chkconfig: 2345 90 60 
  5. # description: A very good web server 
  6. function start(){ 
  7.  
  8. echo -n "nginx is start ." 
  9. sleep 1 
  10. echo -n " ." 
  11. sleep 1 
  12.  
  13.  
  14. if [ -e /var/lock/subsys/nginx ];then 
  15. sleep 1 
  16. echo -e "\033[31m [faile]\033[0m" 
  17. else 
  18. /usr/local/nginx/sbin/nginx 
  19. sleep 1 
  20. echo -e "\033[32m [ok]\033[0m" 
  21. touch /var/lock/subsys/nginx 
  22. fi 
  23.  
  24.  
  25. function stop(){ 
  26. echo -n "nginx is stoping ..." 
  27. if [ -e /var/lock/subsys/nginx ];then 
  28. killall nginx 
  29. sleep 1 
  30. echo -e "\033[32m [ok]\033[0m" 
  31. rm -f /var/lock/subsys/nginx 
  32.  
  33. else 
  34. sleep 1 
  35. echo -e "\033[31m [faile]\033[0m" 
  36. fi 
  37.  
  38. case $1 in 
  39. start) 
  40. start 
  41. ;; 
  42. stop) 
  43. stop 
  44. ;; 
  45. restart) 
  46. stop;start 
  47. ;; 
  48. *) 
  49. echo "Usage {start|stop|restart}" 
  50. ;; 
  51. 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,整合phpxcache
[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 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和管理虚拟目录名
 

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

 

 

这就搭建成功了!