zoukankan      html  css  js  c++  java
  • 高性能Nginx最佳实践

    三,Nginx配置location

      配置块:server

           详情:location会尝试根据用户请求中的uri来匹配location的uri表达式,如果可以匹配,就选择location块中的配置来处理用户请求。

    • =/uri :表示完全匹配
    • ~/uri:表示匹配uri时是大小写敏感的
    • ~*/uri:表示匹配uri时忽略大小写
    • ^~/uri:表示匹配uri时只需要其前半部分匹配即可
    • /uri:不带任何修饰符,也表示前缀匹配,但是是在正则匹配之后
    • /:通用匹配,任何未匹配到其他location的请求都会匹配到,相当于switch中的default

    示例:

     四,Nginx常规配置:

      (一),定义环境变量:

        语法:evn VAR|VAR=VALUE

        作用:用户可以直接设置操作系统上的环境变量

           举例:evn TESTPATH=/tmp;

     (二),嵌入其他配置文件

        语法:include/path/file

        作用:可以把其他配置文件引入进来,路径可以是绝对路径,也可以时相对路径。还可以含有通配符。

       (三),PID文件

        语法:pid path/file;

        默认:pid logs/nginx.pid;

            作用:保存master进程的pid文件存放路径。

    (四),Nginx worker进程运行的用户和用户组

        语法:user username[groupname]

        默认:user nobody nobody

        作用:master进程fork出的进程在哪个用户和用户组下

    (五),指定Nginx worker进程可以打开的最大句柄描述符个数

        语法:worker_rlimit_nofile limit;

        作用:设置一个worker可以打开的最大句柄数

    (六),限制信号队列:

        语法:worker_rlimit_sigpending limit;

        作用:设置每个用户发往Nginx的信号队列的大小。也就是说,当某个用户的信号队列满了,这个用户再发送的信号量就会被丢掉。

    五,Nginx高性能配置:

      (一)Nginx worker进程个数

          语法:worker_processes number;

          默认:worker_processes 1;

          作用:在master_worker运行方式下,定义worker进程的个数。worker进程的数量会直接影响性能。每个worker都是单线程的进程,他会调用各个模块来实现各种功能。如果确定这些模块不会出现堵塞式调用,那么进程数可以和CPU核心数一样;反之,则稍少一些。

    (二)绑定Nginx worker进程到指定的CPU内核

          语法:worker_cpu_affinity cpumask

          作用:假设每个worker都是很繁忙的,如果多个进程都在抢同一个cpu,那么就会出现同步问题。反之,如果每个worker进程独享一个CPU,就实现了完全的并发。

          举例:worker_processes 4;

             worker_cpu_affinity 1000 0100 0010 0001;

    (三),SSL硬件加速

          语法:ssl_engine device;

          作用:如果服务器上有SSL硬件加速设备,那么就可以进行配置以加快SSL协议的处理速度。用户可以用OpenSSL提供的命令来查看是否有SSL硬件加速设备:openssl engine -t

     

    六,Nginx事件配置

      (一)是否打开accept锁

          语法:accept_mutex [on/off];

          默认:accept_mutex on;

          作用:accept_mutex是Nginx的负载均衡锁。这把锁可以让多个worker进程轮流的,序列化的与新的客户端建立TCP连接。accept锁默认是打开的,如果关闭它,那么建立TCP连接的耗时会更短,但不利于负载均衡,因此不建议关闭。

           (二)使用accept锁后到真正建立连接之间的延迟时间

          语法:accept_mutex_delay Nms;

               默认:accept_mutex_delay 500ms

          作用:在使用accept锁后,同一时间只有一个worker进程能够拿到accept锁。这个accept锁不是堵塞锁,如果取不到会立刻返回。如果只有一个worker进程试图取锁而没有取到,他至少要等待accept_mutex_delay定义的时间才能再次试图取锁。

           (三)批量建立新连接:

          语法:multi_accept[on/off];

          默认:multi_accept off;

          作用:当事件模型有新连接时,尽可能的对本次调度中客户端发起的所有TCP请求都建立连接。

      (四)选择事件模型:

          语法:use[kqueue|rtsig|epoll|dev|poll|select|poll|]

             作用:对于Linux系统,可供选择的事件驱动模型有:poll,select,epoll三种,一般来说,epoll是性能最高的。

            (五)每个worker的最大连接数

          语法:worker_connections number;

                          作用:定义每个worker进程可以同时处理的最大连接数。

  • 相关阅读:
    JQuery插件,轻量级表单模型验证(续 二)
    关于DateTimeOffset的爱恨情仇
    JQuery插件,轻量级表单模型验证(续 一)
    asp.net 远程模型验证
    JQuery插件,轻量级表单模型验证
    Ef Core增加Sql方法
    初识依赖注入
    Core下简易WebApi
    sql语句实现行转列练习
    sql语句基本查询操作
  • 原文地址:https://www.cnblogs.com/boogie-xy/p/13381316.html
Copyright © 2011-2022 走看看