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
的管理,我写了一个脚本
[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;
编辑 vim /usr/local/nginx/html/inde.php
<?php
phpinfo();
?>
测试能否打开php 页面
测试是否能连接数据库,修改 index.php
<?php
$link=mysql_connect('127.0.0.1','root','123456');
if($link)
echo "scuess";
else
echo "fail";
?>
四、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"
密码必须是md5
加密的
#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
和管理虚拟目录名
可以看到非常详细的内存管理页面
这就搭建成功了!