Nginx 是一个很强大的高性能Web和反向代理服务器,它具有很多非常优越的特性:
在高连接并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。
服务器同样的4G的内存(系统保留1G)apache能达到3000并发量,而nginx轻松达到3w并发,这源于他的工作机制。在处理大量的连接读写时,Apache采用的是select网络的I/O模型,而nginx采用的是epoll模型,两者差距就像apache进行便利查询,而nginx利用索引进行查询,所以nginx的效率要远远高于apache。
Nginx内部master信号
.QUIT从容关闭;
・HUP平滑重启,重新加载配置文件;
・USRI重新打开日志文件,在切割日志时用途较大;
・USR2平滑升级可执行程序;
・WINCH从容关闭工作进程;
TERM,INT 快速关闭
1. Nginx创建虚拟机(修改文件$nginx_home/conf/nginx.conf)
Server
{
Lisent 80; #监听端口
Servername www.xxxxx.com; #主机名
Access_log logs/www.xxxxx.com.access.log combined; #日志文件存放路径
Location /
{
index index.html index.htm; #首页文件,如果找不到index,―>index.html,―index.Htm
}
}
#第二个主机
Server
{
Lisent 80; #监听端口
Servername www.yyyy.com; #主机名
Access_log logs/www.yyyy.com.access.log combined; #日志文件存放路径
Location /
{
index index.html index.htm; #首页文件,如果找不到index,―>index.html,―index.Htm
}
}
2, 在不停止Nginx服务的情况下平滑变更Nginx配置,及平滑升级
1、修改/usr/local/webserver/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:
/usr/local/webserver/nginx/sbin/nginx -t
如果屏幕显示以下两行信息,说明配置文件正确:
the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok
the configuration file /usr/local/webserver/nginx/conf/nginx.conf was tested successfully
2、平滑重启:
①、对于Nginx 0.8.x版本,现在平滑重启Nginx配置非常简单,执行以下命令即可:
/usr/local/webserver/nginx/sbin/nginx -s reload
②、对于Nginx 0.8.x之前的版本,平滑重启稍微麻烦一些,按照以下步骤进行即可。输入以下命令查看Nginx主进程号:
ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'
屏幕显示的即为Nginx主进程号,例如:
6302
这时,执行以下命令即可使修改过的Nginx配置文件生效:
kill -HUP 6302
或者无需这么麻烦,找到Nginx的Pid文件:
kill -HUP `cat /usr/local/webserver/nginx/nginx.pid`
1, 在不停止Nginx服务的情况下平滑升级Nginx
(1) 首先把旧的可执行文件进行备份。
(2) 将新版本的nginx编译安装到旧版本目录。
(3) 给master发送升级信号:kill USER2 旧版本nginx进程号。
(4) 旧版本的主进程文件尾部‘.Pid’将变为‘.oldbin’,然后依次执行新版本的可执行程序,依次启动nginx的主进程和工作进程。
(5) 此时新旧版本同时存在,共同处理请求。需要逐步关掉旧的进程用到“WINCH”信号:
kill WINCH 旧版本nginx进程号
(6) 旧版本的工作进程(worker process)处理完现有的连接后,将逐步关闭,新版本的nginx的进程最终将完全取代旧的。
(7) 到最终决定是否更换版本
3 、编写每天定时切割Nginx日志的脚本
1、创建脚本/usr/local/webserver/nginx/sbin/cut_nginx_log.sh
vi /usr/local/webserver/nginx/sbin/cut_nginx_log.sh
输入以下内容:
引用
#!/bin/bash
# This script run at 00:00
# The Nginx logs path
logs_path="/usr/local/webserver/nginx/logs/"
mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /usr/local/webserver/nginx/nginx.pid`//通知nginx重新生成一个新日志
2、设置crontab,每天凌晨00:00切割nginx访问日志
crontab -e
输入以下内容:
00 00 * * * /bin/bash /usr/local/webserver/nginx/sbin/cut_nginx_log.sh
引用Nginx文档:http://nginx.org/cn/
本文摘自张宴老师的博客 http://blog.s135.com/nginx_php_v6/