高性能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进程可以同时处理的最大连接数。

 

posted @ 2020-07-26 18:19  Boogiever  阅读(756)  评论(0编辑  收藏  举报