• 全国400电话网上服务平台
    强大号码库资源任选,方便,快捷,快速开通。
    咨询热线:400-1100-266  

    绝对详细!Nginx基本配置、性能优化指南
    POST TIME:2018-12-03 17:55
     

    大多数的Nginx安置指南告诉你如下基础知识——通过apt-get安置,修改这里或那里的几行配置,好了,你已经有了一个Web办事器了!并且,在大多数情况下,一个常规安置的nginx对你的网站来说已经能很好地工作了。然而,如果你真的想挤压出nginx的性能,你必需更深入一些。在本指南中,我将解释Nginx的那些设置可以微调,以优化处理大量客户端时的性能。需要注意一点,这不是一个全面的微调指南。这是一个简单的预览——那些可以通过微调来提高性能设置的概述。你的情况可能差别。

    基本的 (优化过的)配置

    我们将修改的唯一文件是nginx.conf,其中包罗Nginx差别模块的所有设置。你应该能够在办事器的/etc/nginx目录中找到nginx.conf。首先,我们将谈论一些全局设置,然后按文件中的模块挨个来,谈一下哪些设置能够让你在大量客户端拜候时拥有良好的性能,为什么它们会提高性能。本文的结尾有一个完整的配置文件。

    高层的配置

    nginx.conf文件中,Nginx中有少数的几个高级配置在模块部分之上。

    user www-data;

    pid /var/run/nginx.pid;

    worker_processes auto;

    worker_rlimit_nofile 100000;

    user和pid应该按默认设置 – 我们不会更改这些内容,因为更改与否没有什么差别。

    worker_processes 定义了nginx对外提供web办事时的worder进程数。最优值取决于许多因素,,包孕(但不限于)CPU核的数量、存储数据的硬盘数量及负载模式。不能确定的时候,将其设置为可用的CPU内核数将是一个好的开始(设置为“auto”将尝试自动检测它)。

    worker_rlimit_nofile 更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。设置后你的操作系统和Nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有“too many open files”问题了。

    Events模块

    events模块中包罗nginx中所有处理连接的设置。

    events {

    worker_connections 2048;

    multi_accept on;

    use epoll;

    }

    worker_connections设置可由一个worker进程同时打开的最大连接数。如果设置了上面提到的worker_rlimit_nofile,我们可以将这个值设得很高。

    记住,最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处。

    multi_accept 告诉nginx收到一个新连接通知后接受尽可能多的连接。

    use 设置用于复用客户端线程的轮询方法。如果你使用Linux 2.6+,你应该使用epoll。如果你使用*BSD,你应该使用kqueue。想知道更多有关事件轮询?看下维基百科吧(注意,想了解一切的话可能需要neckbeard和操作系统的课程基础)

    (值得注意的是如果你不知道Nginx该使用哪种轮询方法的话,它会选择一个最适合你操作系统的)。

    HTTP 模块

    HTTP模块控制着nginx http处理的所有核心特性。因为这里只有很少的配置,所以我们只节选配置的一小部分。所有这些设置都应该在http模块中,甚至你不会特另外注意到这段设置。

    http {

    server_tokens off;

    sendfile on;

    tcp_nopush on;

    tcp_nodelay on;

    }

    server_tokens 并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安适性是有好处的。

    sendfile可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效(更多有关于sendfile)

    tcp_nopush 告诉nginx在一个数据包里发送所有头文件,而纷歧个接一个的发送

    tcp_nodelay 告诉nginx不要缓存数据,而是一段一段的发送–当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。

    access_log off;

    error_log /var/log/nginx/error.log crit;

    access_log设置nginx是否将存储拜候日志。关闭这个选项可以让读取磁盘IO操作更快(aka,YOLO)。

    error_log 告诉nginx只能记录严重的错误。

    keepalive_timeout 10;

    client_header_timeout 10;

    client_body_timeout 10;

    reset_timedout_connection on;

    send_timeout 10;

    
    Copyright © 2003-2016
    时间:9:00-21:00 (节假日不休)
    版权所有:巨人网络(扬州)科技有限公司
    总部地址:江苏省信息产业基地11号楼四层
    《增值电信业务经营许可证》 苏B2-20120278
    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信

    微信号已复制,请打开微信添加咨询详情!