首页 > 代码库 > nginx一些参数配置详解

nginx一些参数配置详解

nginx的配置:
   正常运行的必备配置:
      1、user username [groupname];
          指定运行worker进程的用户和组
      2、pid /path/to/pidfile_name

          nginx的pid文件

      3、worker_rlimit_nofile #;
           一个worker进程所能够打开的最大文件句柄数;
      4、worker_rlimit_sigpending #;
           设定每个用户能够发往worker进程的信号的数量;

  优化性能相关的配置:
       1、worker_processes #;
               worker进程的个数;通常应为CPU的物理核心数减1;

       2、worker_cpu_affinity cpumask ...; 用于设置每个worker进程所占用的cpu核心个数

            如下事例配置所示:8核CPU,其中6个核心分配(邦定)worker进程,8个0代表8核CPU,相应位上的数值为1.
               worker_processes 6;
               worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000;
       3、ssl_engine device;
               ssl硬件加速器的服务器,指定所使用的ssl硬件加速设备;
       4、timer_resolution interval;时间解析间隔

               默认情况下,每收到一个内核事件,nginx都会调用gettimeofday()。使用此指令后,nginx仅在每经过指定的interval时间间隔后调用一次gettimeofday()。 可以理解为nginx减少产生gettimeofday()系统调用的次数,当然在工作进程中也降低定时器的精度。

       5、worker_priority nice; 优先级
               -20,19之间的值;
               nginx进程的工作优先级
              注:1,2,5为优化的关键点
   事件相关的配置:
       1、accept_mutex [on|off]
               是否打开Ningx的负载均衡锁;此锁能够让多个worker进轮流地、序列化地与新的客户端建立连接;而通常当一个worker进程的负载达到其上限的7/8,master就尽可能不再将请求调度此worker;
       2、lock_file /path/to/lock_file;
               lock文件
       3、accept_mutex_delay #ms;
               accept锁模式中,一个worker进程为取得accept锁的等待时长;如果某worker进程在某次试图取得锁时失败了,至少要等待#ms才能再一次请求锁;
       4、multi_accept on|off;
               是否允许一次性地响应多个用户请求;默认为Off;
       5、use [epoll|rtsig|select|poll];[后面有详解]
               定义使用的事件模型,建议让nginx自动选择;
       6、worker_connections #;
               每个worker能够并发响应最大请求数;
 用于调试、定位问题: 只调试nginx时使用
       1、daemon on|off;
               是否让ningx运行后台;默认为on,调试时可以设置为off,使得所有信息直接输出控制台;
       2、master_process on|off
               是否以master/worker模式运行nginx;默认为on;调试时可设置off以方便追踪;
       3、error_log /path/to/error_log level;
               错误日志文件及其级别;默认为error级别;调试时可以使用debug级别,但要求在编译时必须使用--with-debug启用debug功能;

                            连接处理方法

引用至:http://tengine.taobao.org/nginx_docs/cn/docs/events.html#rtsig

nginx支持多种连接处理方法,而哪些处理方法可用则取决于使用的平台。如果平台支持多种方法,那么nginx一般会自动选择最高效的方法。如果需要,也可以使用use指令明确指定连接处理方法。

nginx支持下列连接处理方法:

  • select — 标准方法。在平台不支持更高效的方法时,nginx会自动编译此模块。可以使用--with-select_module--without-select_module编译选项强行开启或禁止编译此模块。

  • poll — 标准模块。在平台不支持更高效的方法时,nginx会自动编译此模块。可以使用--with-poll_module--without-poll_module编译选项强行开启或禁止编译此模块。

  • kqueue — FreeBSD 4.1+、OpenBSD 2.9+、NetBSD 2.0和Mac OS X的高效方法。

  • epoll — Linux 2.6+的高效方法。

    一些旧的发行版,比如SuSE 8.2,提供了补丁,在2.4内核上支持了epoll方法。
  • rtsig — 实时信号,Linux 2.2.19+的高效方法。系统级的事件队列默认有1024个信号的限制。在高负载的服务器上,将此限制上调可能是必须的。调整的方法是改变/proc/sys/kernel/rtsig-max内核参数的值。在Linux 2.6.6-mm2上,这个参数不存在,而且每个进程拥有自己的事件队列。每个队列的长度由RLIMIT_SIGPENDING所限,并可使用worker_rlimit_sigpending指令修改。

    队列溢出时,nginx丢弃这个队列,并回退到poll连接处理方法,直到情况恢复正常为止。

  • /dev/poll — Solaris 7 11/99+、HP/UX 11.22+ (eventport)、IRIX 6.5.15+和Tru64 UNIX 5.1A+的高效方法。

  • eventport — 事件端口,Solaris 10的高效方法。

                                                                       翻译: cfsego

虚拟主机相关的配置(Server):    
   1、server {}
       定义虚拟主机,nginx支持使用基于主机名或IP的虚拟主机;

   2、listen
        listen address[:port];
        listen port

        default_server:定义此server为http中默认的server;假如所有的server中没有任何一个listen使用此参数,那么第一个server即为默认server;
        rcvbuf=SIZE: 接收缓冲大小;
        sndbuf=SIZE: 发送缓冲大小;
        ssl: https server;

    3、server_name [...];
       server_name可以跟多个主机名,名称中可以使用通配符和正则表达式(通常以~开头);当nginx收到一个请求时,会取出其首部的server的值,而后跟众server_name进行比较;比较方式:
       (1) 先做精确匹配;www.mytest.com
       (2) 左侧通配符匹配;*.mytest.com
       (3) 右侧通配符匹配;www.mytest.com, www.*
       (4) 正则表达式匹配: ~^.*\.mytest\.com$

    4、server_name_hash_bucket_size 32|64|128;
               为了实现快速主机查找,nginx使用hash表来保存主机名;

    5、location [ = | ~ | ~* | ^~ ] uri { ... }
        location @name { ... }
         功能:允许根据用户请求的URI来匹配指定的各location以进行访问配置;匹配到时,将被location块中的配置所处理;比如:http://www.mytest.com/images/logo.gif

         =:精确匹配;
         ~:正则表达式模式匹配,匹配时区分字符大小写
         ~*:正则表达式模式匹配,匹配时忽略字符大小写
         ^~: URI前半部分匹配,不检查正则表达式

事例如下:客户请求的URI及相应的匹配结果

        location = / {
        [ configuration A ]
    }
        location / {
        [ configuration B ]
    }
        location /documents/ {
        [ configuration C ]
    }
        location ^~ /images/ {
        [ configuration D ]
    }
        location ~* \.(gif|jpg|jpeg)$ { 
        [ configuration E ] 
    } 

      http://www.mytest.com/index.html(匹配B)
      http://www.mytest.com/(匹配A)
      http://www.mytest.com/documents/index.html(匹配B及C,但最终匹配到C)
      http://www.mytest.com/images/index.html(匹配B及D,但最终匹配到D)                

      http://www.mytest.com/images/a.png   (匹配B及D,但最终匹配到D)

      http://www.mytest.com/images/a.gif    (匹配B及D,但最终匹配到E)          

  匹配优先级:
      (1)字符字面量最精确匹配

      (2)正则表达式检索(由第一个匹配到所处理)

      (3)按字符字面量
文件路径定义:
  1、root path
    设置web资源路径;用于指定请求的根文档目录;
       location / {
           root /www/htdocs;
         }
       location ^~ /images/ {
            root /web;  #相当于目录为/web/images/a.html
         }

   #a.html在路径/web/imgages下,访问时为http://www.mytest.com/images/a.html

   2、alias path
     只能用于location中,用于路径别名;
    location / {
      root /www/htdocs;
    }
    location ^~ /images/ {
      alias /web;#相当于目录为/images/a.html

     }
    #a.html在路径/web下,访问时为http://www.mytest.com/images/a.html


    3、index file ...;
               定义默认主页,可以跟多个值;

    4、error_page code ... [=[response]] uri;
         当对于某个请求返回错误时,如果匹配上了error_page指令中设定的code,则重定向到新的URI中。

           error_page 404 /404.html

           error_page 404 =200 /404.html #在系统日志中,会显示200的错误(也就是自定义的返回值)


    5、try_files path1 [path2 ...] uri;
          自左至右尝试读取由path所指定路径,在第一次找到即停止并返回;如果所有path均不存在,则返回最后一个uri;

          location ~* ^/documents/(.*)$ {
             root /www/htdocs;
             try_files $uri /docu/$1 /temp.html;
            }      

            http://www.mytest.com/documents/a.html
            http://www.mytest.com/docu/a.html
            http://www.mytest.com/temp.html