Nginx 是一个很强大的高性能Web和反向代理服务器,它具有很多非常优越的特性:

在高连接并发的情况下,NginxApache服务器不错的替代品:Nginx美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。

服务器同样的4G的内存(系统保留1Gapache能达到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


  或者无需这么麻烦,找到NginxPid文件:

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/