Nginx 归纳整理

标签: nginx 归纳 | 发表时间:2015-05-12 12:57 | 作者:maosheng
出处:http://www.iteye.com
  选择Nginx的理由

  高并发连接:

  官方测试Nginx能够支撑5万并发连接,在实际生产环境中可支撑2--4万并发连接数。这得益于Nginx使用了最新的epool(Linux2.6内核)和kqueue(freebsd)网络I/O模型,而Apache使用的则是传统的select模型

   内存消耗少:

   开启10个Nginx进程消耗150MB内存(15MB X 10=150MB)

2.CentOS安装Nginx服务器

  推荐直接从源码编译安装

  安装GCC编译器及相关工具:

  GCC全称为GNU Compiler Collection,是GNU社区推出的功能强大、性能优越的用于编程开发的自由编译器,是GNU的代表作品之一,目前可以编译的语言包括:C、C++、Objective-C、Fortran、Java等。必须确保您的操作系统安装有GCC编译器,另外,还必须安装Autoconf和Automake工具,它们用于自动创建功能完善的Makefile。可以使用yum命令安装GCC编译器及相关工具:

  yum -y install gcc gcc-c++ autoconf automake

  模块依赖性:Nginx的一些模块需要其他第三方库的支持,例如gzip模块需要zlib库,rewrite模块需要pcre库,ssl功能需要openssl库等。

  yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel


  Nginx的安装:

  tar -zvxf nginx-0.x.xx.tar.gz

  cd nginx-0.x.xx

  ./configure

  make

  sudo make install

  按照以上命令,Nginx将被默认安装到/usr/local/nginx目录下。

  可以通过./configure --help命令查看Nginx可选择的编译选项

  --prefix=<path>      Nginx安装路径。如果没有指定,默认为/usr/local/nginx

  --sbin-path=<path>   Nginx可执行文件安装路径。只能安装时指定,如果没有指定,默认为/usr/local/nginx/sbin/nginx

  --conf-path=<path>   在没有给定-c选项下默认的nginx.cong的路径。如果没有指定,默认为/usr/local/nginx/cong/nginx.conf

  --pid-path=<path>    在nginx.conf中没有指定pid指令的情况下,默认的Nginx.pid的路径。如果没有指定,默认为/usr/local/nginx/logs/nginx.pid

  --lock-path=<path>   nginx.lock文件的路径

  --error-log-path=<path>  在nginx.conf中没有指定error_log指令的情况下,默认的访问日志的路径。如果没有指定,默认为/usr/local/nginx/logs/access.log

  --user=<user>   在nginx.conf中没有指定user指令的情况下,默认的Nginx使用的用户。如果没有指定,默认为nobody

  --group=<group>  在nginx.conf中没有指定user指令的情况下,默认的Nginx使用的组。如果没有指定,默认为nobody

  --builddir=DIR   指定编译的目录

  --with-rtsig_module  启用rtsig模块

  --with-select_module(--without-select_module)  允许或不允许开启SELECT模式

  ........


Nginx的启动、停止、平滑重启:


     Nginx的启动:

     /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.cong

     参数“-c”指定了配置文件的路径,如果不加“-c”参数,Nginx会默认加载其安装目录的conf子目录中的nginx.conf文件。

     Nginx的停止:

     Nginx的停止方法有很多种,一般通过发送系统信号给Nginx主进程的方式来停止Nginx。

     我们通过ps命令来查找Nginx的主进程号:

     ps -ef | grep nginx

    


   从上图中可以看到,1个Nginx进程的备注信息为“master procss”,表示他为主进程,另外的1个进程的备注信息为“worker process”,表示他为子进程。1158位主进程号。

   如果在nginx.conf配置文件中指定了pid文件存放的路径,该文件中存放的就是Nginx当前的主进程号。如果没有指定pid文件存放路径,nginx.pid文件默认存放在Nginx安装目录的logs目录下。所以,我们可以直接通过以下命令来完成平滑重启,省下寻找Nginx主进程号的步骤:

   kill - 信号类型 '/usr/local/nginx/logs/nginx.pid'

  (1)从容停止Nginx

   kill - QUIT Nginx主进程号
   或
   kill - QUIT '/usr/local/nginx/logs/nginx.pid'

  (2)快速停止Nginx

   kill - TERM Nginx主进程号
  
   kill - TERM '/usr/local/nginx/logs/nginx.pid'
   或
   kill - INT Nginx主进程号
  
   kill - INT '/usr/local/nginx/logs/nginx.pid'

  (3)强制停止所有Nginx进程

   pkill -9 nginx


   Nginx的平滑重启:
  

   如果修改了Nginx的配置文件(nginx.conf),想重启Nginx,同样可以通过发送系统信号给Nginx主进程的方式类进行。不过,重启之前,要确认Nginx配置文件的语法是正确的,否则Nginx将不会加载新的配置文件。通过以下命令可以判断Nginx配置文件是否正确:

   /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

   如果配置文件不正确,屏幕将会提示配置文件的第几行出错

   如果配置文件正确,屏幕将提示以下两行信息:

   the configuration file /usr/local/nging/conf/nginx.conf syntax is ok

   configuration file /usr/local/nginx/conf/nginx.conf test is successful

   这时候,就可以平滑重启Nginx了:

   kill - HUP Nginx主进程号
  
   kill - HUP '/usr/local/nginx/logs/nginx.pid'

   当Nginx接收到HUP信号时,他会尝试先解析配置文件,如果成功,就应用新的配置文件。之后,Nginx运行新的工作进程并从容关闭旧的工作进程。通知工作进程关闭监听套接字,但是继续为当前连接的客户提供服务。所有客户端的服务完成后,旧的工作进程被关闭。如果新的配置文件应用失败,Nginx将继续使用旧的配置进行工作。


   Nginx的信号控制:


    TERM,INT   快速关闭

    QUTI       从容关闭

    HUP        平滑重启,重新加载配置文件

    USR1       重新打开日志文件,在切割日志时用途较大

    USR2       平滑升级可执行程序

    WINCH      从容关闭工作进程


    Nginx的平滑升级:


    当需要将正在运行中的Nginx升级、添加/删除服务器模块时,可以在不中断服务的情况下,使用新版本、重编译的Nginx可执行程序替换旧版本的可执行程序:

   (1)使用新的可执行程序替换旧的可执行程序,对于编译安装的Nginx,可以将新版本编译安装到旧版本的Nginx安装路径中。替换之前,最好备份一份旧的可执行文件。

   (2)发送以下指令

     kill -USR2 旧版本的Nginx进程号

    (3)旧版本Nginx的主进程将重命名他的.pid文件为.oldbin(例如:/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新版本的Nginx可执行程序,依次启动新的主进程和新的工作进程。

    (4)此时,新、旧版本的Nginx实例会同时运行,共同处理输入的请求。要逐步停止旧版本的Nginx实例,你必须发送WINCH信号给旧的主进程,然后,它的工作进程就将开始从容关闭:

     kill -WINCH 旧版本的Nginx主进程号

    (5)一段时间后,旧的工作进程(worker process)处理了所有已连接的请求后退出,仅由新的工作进程来处理输入的请求啦。


    (6)这时候,我们可以决定是使用新版本,还是恢复到旧版本:

     kill -HUP 旧的Nginx主进程号   : Nginx将在不重载配置文件的情况下启动他的工作进程

     kill -QUIT 新的主进程号       : 从容关闭其工作进程(worker process)

     kill -TERM 新的主进程号       : 强制退出

     新的主进程退出后,旧的主进程会移除.oldbin前缀,恢复为他的.pid文件,这样,一切就都恢复到升级之前了。如果尝试升级成功,而你也希望保留新的服务器时,可发送QUIT信号给旧的主进程,使其退出而只留下新的服务器运行。




   



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [nginx 归纳] 推荐:

Nginx 归纳整理

- - 互联网 - ITeye博客
  选择Nginx的理由.   官方测试Nginx能够支撑5万并发连接,在实际生产环境中可支撑2--4万并发连接数. 这得益于Nginx使用了最新的epool(Linux2.6内核)和kqueue(freebsd)网络I/O模型,而Apache使用的则是传统的select模型.    开启10个Nginx进程消耗150MB内存(15MB X 10=150MB).

nginx配置ssl

- - 邢红瑞的blog
先生成网关证书 ,仿照CA模式.

Nginx安装

- - 企业架构 - ITeye博客
nginx可以使用各平台的默认包来安装,本文是介绍使用源码编译安装,包括具体的编译参数信息. 正式开始前,编译环境gcc g++ 开发库之类的需要提前装好,这里默认你已经装好. ububtu平台编译环境可以使用以下指令. centos平台编译环境使用如下指令. 一般我们都需要先装pcre, zlib,前者为了重写rewrite,后者为了gzip压缩.

Nginx GZip 压缩

- - 开心平淡对待每一天。热爱生活
  Nginx GZip 模块文档详见: http://wiki.nginx.org/HttpGzipModule 常用配置片段如下:. # 压缩比例,比例越大,压缩时间越长. 默认是1 gzip_types. text/css text/javascript; # 哪些文件可以被压缩 gzip_disable.

Nginx 限流

- - 鸟窝
电商平台营销时候,经常会碰到的大流量问题,除了做流量分流处理,可能还要做用户黑白名单、信誉分析,进而根据用户ip信誉权重做相应的流量拦截、限制流量. Nginx自身有的请求限制模块 ngx_http_limit_req_module、流量限制模块 ngx_stream_limit_conn_module基于令牌桶算法,可以方便的控制令牌速率,自定义调节限流,实现基本的限流控制.

NGINX的流媒体插件 nginx-rtmp-module

- - 开源软件 - ITeye博客
战斗民族俄罗斯人民开发的一款NGINX的流媒体插件,除了直播发布音视频流之外具备流媒体服务器的常见功能. 基于HTTP的FLV/MP4 VOD点播. HLS (HTTP Live Streaming) M3U8的支持. 基于http的操作(发布、播放、录制). 可以很好的协同现有的流媒体服务器以及播放器一起工作.

Nginx content cache Nginx内容缓存

- - CSDN博客推荐文章
原文地址: http://nginx.com/resources/admin-guide/caching/. When caching is enabled NGINX saves responses in the cache on the disk and uses them to respond to clients without proxying the requests..

nginx + memcached session 同步

- - 企业架构 - ITeye博客
squid 缓存疑问 问题归纳:. 1 squid 缓存的数据,何时过期,如何判断缓存的数据已经过期,如何把最新的数据缓入squid 并且替换掉旧的内容. 2 如何判断数据是否应该被缓存. 3 校验失败时,是否给出缓存中旧的内容. 上面的几个问题  都可以通过 squid中的 refresh_pattern 配置项 找到答案.

nginx日志切割

- - haohtml's blog
nginx的日志文件没有rotate功能. 如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件. 第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志. 在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件.

nginx框架总结

- - CSDN博客互联网推荐文章
a、内存池的设计,为一个多级链表结构,本身不负责内存的回收,减少内存碎片,提高内存的利用率,将多次向操作系统申请内存压缩为一次,减少向操作系统申请内存的次数,提高cpu资源的利用;. b、基于事件的master-worker异步处理. 处理事件的机制是由事件分发进程加载事件处理模块来完成与传统将事件提交给handle-thread来处理的方式相比,减少了进程(线程)间的切换,从而降低了请求响应延迟的时间;.