简介:

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。

预备知识:

所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

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、解压
# tar -zxvf mysql-5.5.15-linux2.6-i686.tar.gz -C /usr/local/
2、创建 mysql 用户及组
# groupadd -r mysql # 创建 mysql

# useradd -r -g mysql mysql -M #创建mysql用户所属组为mysql,不创建家目录3、切换目录

# cd /usr/local/

为了方便我们管理,我们将mysql-5.5.15-linux2.6-i686 创建软连接
# ln -s mysql-5.5.15-linux2.6-i686 mysql


4、改变文件权限

#   cd mysql

# chown -R mysql .

# chgrp -R mysql .

# scripts/mysql_install_db --user=mysql #执行脚本

# chown -R root .

# chown -R mysql data


5、创建配置文件

# cp support-files/my-medium.cnf /etc/my.cnf # 拷贝配置文件
# cp support-files/mysql.server /etc/init.d/mysqld# service 管理
# chmod a+x /etc/init.d/mysqld # 给文件执行权

# service mysqld start# 启用mysql

为了能够直接操作mysql

修改环境变量
# vim /etc/profile
添加

PATH=$PATH:/usr/local/mysql/bin

# . /etc/profile #加载环境变量

# 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 -v |grep mysql  # 刷新缓冲文件,并查看
二、安装nginx
1 、首先要安装 pcre (正则表达式)和 libevent( 能够显著地提高软件的性能 )
# rpm -ivh pcre-6.6-2.el5_1.7.i386.rpm # 安装 pcre

# tar -zxvf libevent-2.0.16-stable.tar.gz -C /usr/local/src #解压

#cd /usr/local/src/libevent-2.0.16-stable

# ./configure --prefix=/usr/local/libevent #将它安装在/usr/local/libevent目

录下

# make && make install #编译安装

安装成功

为了让系统能够调用libevent 的库函数
编辑
# vim /etc/ld.so.conf.d/libevent.conf

/usr/local/libevent/lib

为了能够调用到libevent头文件,需要创建软连接

# ln -s /usr/local/libevent/include /usr/include/libevent
安装 nginx
# tar -zxvf nginx-1.0.11.tar.gz -C /usr/local/src/ # 解压
#  groupadd  -r  nginx # 创建 nginx
#  useradd -r -g nginx -s /bin/false  -M nginx # 创建 nginx 用户
#  cd /usr/local/src/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@localhost ~]# cat /etc/init.d/nginx
    #!/bin/bash
    #chkconfig: 2345 99 88
    #description: this is nginx server
    prog=/usr/local/nginx/sbin/nginx
    lockfile=/var/lock/nginx.lock
    pidfile=/var/run/nginx/nginx.pid
    tmpfile=/var/tmp/nginx/client/
     #创建临时文件目录
     [ ! -e $tmpfile ] && make -p $tmpfile
    start( ){
        echo -n "nginx is start.."
        sleep 1
        echo -n "."
        if [ -f $lockfile  ];then
            sleep 1
            echo -e "\t\t\t[\033[31m fail \033[0m]"
         else
            $prog && touch $lockfile && echo -e "\t\t\t[\033[32m ok \033[0m]"
        fi
    }
    stop(){
        echo -n "nginx is stoping...."
        if [ -f $lockfile ];then
            sleep 1
            $prog -s stop && rm -rf $lockfile && echo -e  "\t\t\t[\033[32m ok \033[0m]"
        else
            sleep 1
            echo -e "\t\t\t[\033[31m fail \033[0m]"
        fi
    }
    status (){
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
        if [ -f $lockfile ];then
            echo "nginx pid $(cat $pidfile) is running"
        else
            echo "nginx is stopped"
        fi
    }
    case $1 in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        status
        ;;
    *)
        echo "Usage $0 {start|stop|restart|status}"
        ;;
    esac



给它执行权
# chmod a+x /etc/init.d/nginxd
# service nginxd start # 启动
# chkconfig --add nginxd # 设置开机启动
三、安装php
1 、我们下的是php-5.4.13.tar.bz2

# tar -jxvf php-5.4.13.tar.bz2 -C /usr/local/src 解压

#cd /usr/local/src/php-5.4.13

检测环境

 [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 扩展功能目录
# make && make install # 安装
2 、创建 php 的配置文件
# mkdir /etc/php  # 创建这个目录
# cp php.ini-production  /etc/php/php.ini # 拷贝这个文件


# mkdir /etc/php5.d  # 创建这个目录
# cp sapi/fpm/init.d.php-fpm  /etc/init.d/php-fpm # 创建 service 管理文件
# chmod a+x /etc/init.d/php-fpm # 更改权限


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


让nginx 支持php-fpm修改配置文件
[root@zlj ~]# vim  /etc/nginx/nginx.conf
65         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;

test.jsp?url=http%3A%2F%2Fimg1.51cto.com


编辑 vim /usr/local/nginx/html/inde.php

<?php

phpinfo();

?>

测试能否打开php 页面

wKioL1L9zXfjJ8ZkAAMlH2Gu_zM804.jpg

测试是否能连接数据库,修改 index.php

<?php
$link=mysql_connect('127.0.0.1','root','123456');
if($link)

echo "scuess";

else

echo "fail";

?>

wKiom1L9zvKh1Vw0AAJwOAk3O0c339.jpg

四、php加速

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


2 、编译
#./configure--enable-xcache --with-php-config=/usr/local/php/bin/php-config  # 检查环境
# make && make install # 安装
3 编辑 php ,整合 php xcache
# cp xcache.ini  /etc/php5.d
# 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 的站点目录
# cp -rp admin /usr/local/nginx/html/
更改文件权限
#chmod a+rx admin # 给它读和切换目录的权限
# chmod a+r admin/index.php # 给它读取的权限


添加认证
# vim /etc/php5.d/xcache.ini
xcache.admin.user = "admin"
xcache.admin.pass = "21232f297a57a5a743894a0e4a801fc3"

test.jsp?url=http%3A%2F%2Fimg1.51cto.com

密码必须是md5 加密的
#echo -n "admin" |md5sum # 输出 admin 加密后的密文

test.jsp?url=http%3A%2F%2Fimg1.51cto.com

将密文拷到上面即可
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 和管理虚拟目录名

test.jsp?url=http%3A%2F%2Fimg1.51cto.com

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

test.jsp?url=http%3A%2F%2Fimg1.51cto.com

test.jsp?url=http%3A%2F%2Fimg1.51cto.com

test.jsp?url=http%3A%2F%2Fimg1.51cto.com

这就搭建成功了!

下面来搭建搭建一下Dvbbs吧,


Dvbbs安装配置



注:可以去这http://dp.dvbbs.net/下载dvbbs的软件包,


1.将软件包解压后将所需upload目录上传到/usr/local/nginx/html/命名为dvbbs


2.通过浏览器访问http://192.168.10.100/dvbbs,如下图;

修改下面文件的权限为777

# chmod -R 777 p_w_upload/

# chmod -R 777 htm_data/

# chmod -R 777 data

然后进行在线安装


wKiom1L93MTBl4gYAANOay3HpH8881.jpg

wKioL1L93J2xAwUpAALlvhPWvZ4309.jpg

wKioL1L93J_DDmOSAAKxtAFIsFo119.jpg