您的位置:首页 > 运维架构 > Nginx

nginx虚拟主机,平滑升级更新配置,日至切割

2013-05-08 16:23 399 查看
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.shvi /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/本文出自 “nginxs小白” 博客,请务必保留此出处http://nginxs.blog.51cto.com/4676810/1195673
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: