当前位置:C++技术网 > 精选软件 > 云平台开发架构分析系列:13 Nginx服务器默认配置文件入门分析5

云平台开发架构分析系列:13 Nginx服务器默认配置文件入门分析5

更新时间:2017-06-29 09:05:05浏览次数:1+次

        写完《云平台开发架构分析系列12:Nginx服务器默认配置文件入门分析4》,http内的配置就暂时告一段落。我们再来分析下全局的配置项。我只打算简单的讲两个选项,就够了。如下:

    

worker_processes  1;
events {
    worker_connections  1024;
}
     这两个选项都是直接针对进程级别的了。nginx服务器会运行一个主进程,然后再运行一个或多个工作进程。主进程兼有守护进程的作用,当工作进程崩溃的时候,主进程会创建新的工作进程来继续工作。那么到底可以有多少个工作进程呢?看配置项worker_processes的值。

    

        如果这个值为1,则会有一个工作进程。如果设置为0,是什么情况呢?自然就是没有工作进程。这会出现什么情况?网站是无法响应请求的。因为此时就只有一个主进程在运行,而主进程是不会直接处理http请求的。处理http请求是工作进程的任务。为什么主进程不处理http请求呢?你要看看主进程的职责。主进程有守护进程的职责,也就是说,工作进程挂了,主进程要启动新的进程了继续执行http请求。换一句话说,在处理http请求的时候,有可能会导致工作进程崩溃。这样的话,如果让主进程去处理http请求,是不是就有崩溃的危险呢?如果主进程可能崩溃,那么还怎么做守护进程呢?主进程自己挂了,就玩完了。

        所以让主进程处理http请求就是一个不安全的设计。主进程只做简单的工作,不会挂掉。除非人为或者重大的系统灾难导致主进程挂掉,正常运行时不会挂的。有一句话说的是,“少说话,错话就说的少;少干活,犯错的机会就少”。主进程自然也是遵从这个道理,所以主进程不会去处理繁重的http请求的。

        如果把工作进程数量设置为0,那么就表示没有进程处理http请求,自然就无法响应http请求了。那么大于等于1的数值都是对的。但是多个个工作进程是最好的呢?工作进程不是越多越好。这个跟CPU的处理单元个数(CPU核心数)有关。如果CPU只有两个核,你创建了几十个处理进程,会是什么效果呢?会有大量的进程切换,这样会增加进程切换的负担。不会提高并发处理效率,反而降低了效率。因为真正执行处理的是CPU,你再多进程也得等待CPU来执行呀。所以一般是将这个数值设置为CPU核心个数或者是核心个数x2。当然,CPU只是其中一个因素,还跟硬盘、内存有关。如果内存大,也就可以同时容下多个进程的数据,如果内存小,进程多了,可能内存就不够用了,内存成为瓶颈了。另外,硬盘速度低,进程多了有点好处,CPU可以将正在对的进程暂时挂起,然后调入其他进程执行。这样可以充分利用资源。如果硬盘很慢,进程也少,这样会导致大量的时间都在等待硬盘的读写。所以,上面给出的个数仅做参考,实际的合适的数量,还是要综合分析考虑,以实测为准。

        第二个配置项就是worker_connections。这个配置项指的是工作进程最大的连接数。一个进程可以创建多个连接,处理多个连接。毕竟如果我们的工作进程只有几个,而大量的请求进来的时候,就需要这个几个进程一起处理。那么一个进程就要建立很多的连接,同时来处理大量的请求。连接数总是有限制的。大量的连接会占用很多的资源。在Linux系统中,一切都是文件。而Linux系统对于创建的总文件数也是有限制的。是多少我就不说了,留给你自己查。

        在这是连接数的时候,你应该联想到前面一个配置项,即keepalive_timeout。在高并发的情况下,为了提高并发量,我们应该适当降低连接保持时间,让处理完的连接尽快释放,这样才不至于让工作进程的连接数达到最顶峰。当达到顶峰的时候,服务器就不能再处理更多的请求了。

        如果在遇到了DDOS攻击,我们如何应对。DDOS攻击也就是一种高并大的请求。当工作进程连接数都达到顶峰的时候,服务器就会拒绝新的请求了,这就是拒绝服务的意思。越大的并发量,抗DDOS攻击能力越强。在遭遇DDOS攻击的时候,我们关闭连接保持也是一个不错的对抗方法。这样可以让更多的请求迅速从连接状态中释放,这样可以提高并大量。因为在后续连接还没有到达之前,先到达的请求已经处理完毕了。这样就可以让峰值连接数提高不起来,也就抵抗住DDOS了。当然如果DDOS攻击力太大的话,只靠服务器是不行的。

        那么既然说到这里,那么如何进一步抵抗DDOS呢?DDOS也就是更多合法的请求的泛滥。我们服务器既要处理合法的请求,又不能处理巨量的请求。我们尽量加速请求可以一方面的缓解,如优化处理过程,提高处理速度。另一方面关闭保持连接选项。然后就是将请求分散。请求分散也就是将请求转移到更多的服务器去处理。这是分布式处理方式。这种方式叫做分流处理。被攻击的服务器只是做简单的请求转发,速度极快,然后根据情况将不同的请求转发到不同的服务器处理,这样并发处理的连接数始终上不来,自然就抵抗住DDOS攻击,可以持续提供正常的服务。

        我们可以将worker_connections设置成65536。反正最大值嘛,设置成允许设定的最大值就好了。不过对于最小值,我们要大于2。如果设置为2,工作进程将无法提供正常的HTTP请求处理。因为并不是一个请求就只有一个连接的。

        那么nginx的默认配置文件的基本几个设置都说到了,对于默认配置文件的讲解就到此为止了。以后有需要补充,将会继续补充说明,现在是先入门一下。