zoukankan      html  css  js  c++  java
  • nginx

    events {
        #nginx使用连接互斥锁进行顺序的accept()系统调用,防止惊群现象发生,默认为on(on时顺序调用防止惊群,大流量高并发不推荐)  惊群解释当设置为off时,一个请求从客户端过来,会导致nginx唤醒所有的进程,但只有一个会work进程能够获取到这个链接,其他空闲的work进程重新进入休眠(其他唤醒的空闲的work是无用功)
        #Apache动辄就会启动成百上千的进程,如果发生惊群问题的话,影响相对较大;但是对Nginx而言,一般来说,worker_processes会设置成CPU个数,所以最多也就几十个,即便发生惊群问题的话,影响相对也较小。
        #另:高版本的Linux中,accept不存在惊群问题,不过epoll_wait等操作还有
        
        比喻:
        /*
            假设你养了一百只小鸡,现在你有一粒粮食,那么有两种喂食方法:
            你把这粒粮食直接扔到小鸡中间,一百只小鸡一起上来抢,最终只有一只小鸡能得手,其它九十九只小鸡只能铩羽而归。这就相当于关闭了accept_mutex。
            你主动抓一只小鸡过来,把这粒粮食塞到它嘴里,其它九十九只小鸡对此浑然不知,该睡觉睡觉。这就相当于激活了accept_mutex。
            可以看到此场景下,激活accept_mutex相对更好一些,让我们修改一下问题的场景,我不再只有一粒粮食,而是一盆粮食(大流量高并发),怎么办?
    
            此时如果仍然采用主动抓小鸡过来塞粮食的做法就太低效了,一盆粮食不知何年何月才能喂完,大家可以设想一下几十只小鸡排队等着喂食时那种翘首以盼的情景。此时更好的方法是把这盆粮食直接撒到小鸡中间,让它们自己去抢,虽然这可能会造成一定程度的混乱,但是整体的效率无疑大大增强了。
        */
        #高并发访问量大的网站请设置为off
        accept_mutex on; 
        
        #设置一个进程是否同时接受多个网络连接,默认为off  (on时告诉nginx收到一个新连接通知后接受尽可能多的连接)
        multi_accept on; 
        
        #如果一个进程没有互斥锁,它将至少在这个值的时间后被回收(即在accept_mutex 启用时其他空余进程不会被唤醒而是轮流处于进程等待 而accept_mutex_delay指定的时间就是这些worker进程的等待时间,等待时间一到则等待的进程将尝试获取互斥锁并开始接受新的连接),默认是500ms  
        accept_mutex_delay 500ms;
        
        #指定只记录由某个客户端IP产生的debug信息
        debug_connection 192.168.0.1;
        
        ############
        #
        devpoll_changes
        
        #
        devpoll_events
       
        #
        kqueue_events
        
        #
        epoll_events
        ############    
    
        ##########################
        #
        rtsig_signo
       
        #
        rtsig_overflow_events
        
        #
        rtsig_overflow_test
        
        #
        rtsig_overflow_threshold
        ##########################
    
    
        #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
        use epoll; #用户复用客户端线程的轮训方法。
        
        #单个work进程允许的最大连接数,默认为512
        worker_connections 1024; 
    }

    查看Nginx的版本号:

     nginx -V

    nginx安装目录sbin下(或者自己配置全局)
    强制关闭

    nginx: nginx -s stop

    优雅关闭nginx(处理完请求后关机):

    nginx -s quit
    或者:
    ps -ef|grep nginx #查看进程
    kill -HUP 进程id   #杀掉进程

    重新加载配置文件:

    nginx -s reload

    重新打开日志文件

    nginx -s reopen

    配置文件的结构:由多个上下文模块以及main组成

    不同模块指令关系:server继承main;location继承server;upstream既不会继承指令也不会被继承,它有自己的特殊指令,不需要在其他地方的应用

    #main全局块
    ... 
    
    events { #events块
        ...
    }
    
    http #http块
    {
        #http全局块
        ... 
    
        #server块①
        server 
        { 
            #server全局块
            ... 
            #location块①
            location [PATTERN] #location块
            {
                ...
            }
            #location块②
            location [PATTERN] 
            {
                ...
            }
         }
        
        #server块②
        server
        {
            ...
        }
    
        #http全局块
        ... 
    }        

    说明:

    1、main全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
    
    2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
    
    3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
    
    4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
    
    5、location块:配置请求的路由,以及各种页面的处理情况。
    View Code

    events

    events {
        #设置网路连接序列化,防止惊群现象发生,默认为on  惊群解释当设置为off时,一个请求从客户端过来,会导致nginx唤醒所有的进程,但只有一个会work进程能够获取到这个链接,其他空闲的work进程重新进入休眠(其他唤醒的空闲的work是无用功)
        #Apache动辄就会启动成百上千的进程,如果发生惊群问题的话,影响相对较大;但是对Nginx而言,一般来说,worker_processes会设置成CPU个数,所以最多也就几十个,即便发生惊群问题的话,影响相对也较小。
        #另:高版本的Linux中,accept不存在惊群问题,不过epoll_wait等操作还有
        
        比喻:
        /*
            假设你养了一百只小鸡,现在你有一粒粮食,那么有两种喂食方法:
            你把这粒粮食直接扔到小鸡中间,一百只小鸡一起上来抢,最终只有一只小鸡能得手,其它九十九只小鸡只能铩羽而归。这就相当于关闭了accept_mutex。
            你主动抓一只小鸡过来,把这粒粮食塞到它嘴里,其它九十九只小鸡对此浑然不知,该睡觉睡觉。这就相当于激活了accept_mutex。
            可以看到此场景下,激活accept_mutex相对更好一些,让我们修改一下问题的场景,我不再只有一粒粮食,而是一盆粮食,怎么办?
    
            此时如果仍然采用主动抓小鸡过来塞粮食的做法就太低效了,一盆粮食不知何年何月才能喂完,大家可以设想一下几十只小鸡排队等着喂食时那种翘首以盼的情景。此时更好的方法是把这盆粮食直接撒到小鸡中间,让它们自己去抢,虽然这可能会造成一定程度的混乱,但是整体的效率无疑大大增强了。
        */
        #高并发访问量大的网站请设置为off(不要轻易用哦CPU占用会大幅提高,QPS严重恶化accept_mutex on时,QPS:3500,负载只有0.3  accept_mutex off时,QPS:2500,负载达到9.5,且CPU占用极高)
        accept_mutex on; 
        
        #设置一个进程是否同时接受多个网络连接,默认为off  (on时告诉nginx收到一个新连接通知后接受尽可能多的连接)
        multi_accept on; 
        
        #如果一个进程没有互斥锁,它将至少在这个值的时间后被回收,默认是500ms
        accept_mutex_delay 500;
        
        #指定只记录由某个客户端IP产生的debug信息
        debug_connection 192.168.0.1;
        
        ############
        #
        devpoll_changes
        
        #
        devpoll_events
       
        #
        kqueue_events
        
        #
        epoll_events
        ############    
    
        ##########################
        #
        rtsig_signo
       
        #
        rtsig_overflow_events
        
        #
        rtsig_overflow_test
        
        #
        rtsig_overflow_threshold
        ##########################
    
    
        #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
        use epoll; 
        
        #单个work进程允许的最大连接数,默认为512
        worker_connections 1024; 
    }


    http
    server
    location

  • 相关阅读:
    android: 记录及回复lisView的位置
    android获取屏幕尺寸、密度
    iphone:蓝牙传输
    android 线程 进程
    android 首次使用app时的使用教程的功能的实现
    android 启动界面
    iphone:数组的反序
    android:onKeyDown
    iphone: 可编辑的tableView Move&Delete
    iphone:类似path的抽屉式导航效果的demo总结
  • 原文地址:https://www.cnblogs.com/lichihua/p/11087573.html
Copyright © 2011-2022 走看看