设为首页 收藏本站
查看: 1152|回复: 0

[经验分享] nginx一些参数配置详解

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2014-5-8 09:25:17 | 显示全部楼层 |阅读模式
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



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-18895-1-1.html 上篇帖子: Nginx学习指南之安装与配置 下篇帖子: CentOS 6.5 编译安装Nginx
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表