Nginx优化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx优化相关的知识,希望对你有一定的参考价值。

配置文件:
main配置段
http {
}

    配置指令要以分号结尾,语法格式:
        directive value1 [value2...];

    支持使用变量:
        模块内置变量
        自定义变量
            set var_name value

    主配置段的指令的类别:
        用于调试、定位问题
        正常运行必备的配置
        优化性能的配置
        事件相关的配置

    正常运行的必备配置:
        1、user USERNAME [GROUPNAME];
            指定运行worker进程的用户 和组,例如:
            user nginx nginx;s

        2、pid /path/to/pid_file;
            指定nginx的pid文件;

        3、worker_rlimit_nofile #;
            指定一个worker进程所能够打开的最大文件句柄数;

        4、worker_rlimit_sigpending #;
            指定每个用户能够发往worker的信号的数量;

    优化性能相关的配置:
        1、worker_processes #:
            worker线程的个数;通常应该为物理CPU核心个数减1;

        2、worker_cpu_affinity cpumask ...;
            优点:提升缓存的命中率;
            context switch:会产生CPU的不必要的消耗

            绑定worker进程至指定的CPU上;
                CPUMASK
                    0001
                    0010
                    0100
                    1000 
                例如:
                    worker_cpu_affinity 00000001 00000010 00000100;

        3、timer_resolution t;
            计时器解析度:降低此值,可减少gettimeofday() 系统调用的次数。
            gettimeofday(); 

        4、worker_priority nice;
            指明worker进程的nice值
            -20, 19
            100, 139

    事件相关的配置:
        1、accept_mutex [on|off]
            master调度用户请求至各worker进程时使用的负载均衡锁:on表示能让多个worker轮流地、序列化地去响应新请求;
            内部调用用户 请求至各worker时用的负载均衡锁;打开时表示能让多个worker轮流地、序列化地与响应新请求;

        2、lock_file /path/to/lock_file; 
            accept-mutex用到的锁文件路径;

        3、accept_mutex_delay #ms;

        4、use [epoll|rgsig|select|poll];
            定义使用的事件模型;建议让Nginx自动选择;

        5、worker_connections #;
            每个worker进程所能够响应的最大并发请求数;
            worker_connections * work_processes

    用于调试、定位问题:
    必须安装--with-debug
        1、daemon [off|on]
            是否以守护进程方式启动nginx;

        2、master_process on|off;
            是否以master/worker模型来运行nginx; 调试时可以设置为off;

        3、error_log /path/to/error_log level;
            错误日志文件及其级别;出于调试的目的,可以使用debug级别,但此级别只有在编译nginx时使用了--with-debug选项才有效;
            若要使用debug级别,需要在编译ngnix时使用--with-debug选项;

对内存或磁盘资源进行分配
1、client_body_in_file_only on|clean|off;
请求报文的body部分是否可暂存于磁盘;on表示允许,并且即使请求结束,也不会删除暂存的内容;clean表示会删除;off不允许暂存;

        2、client_body_in_single_buffer on|off 

        3、client_body_buffer_size size;

        4、client_body_temp_path DIR [level1 [level2 [level3 [level4]]]]

            例如:client_body_temp_path /var/tmp/nginx/client  1 2

        5、client_header_buffer_size size:

    MIME类型相关的配置:

        1、types {}
            定义MIME types至文件的扩展名;
                types {
                    text/html .html;
                    image/jpeg  .jpg;
                }

        2、default_type MIME-TYPE;

    文件操作优化相关的配置:
        1、sendfile on|off; 

        2、aio on|off;

        3、directio size|off;
            是否使用O_DIRECT选项去请求读取文件;与sendfile功能互斥;

        4、open_file_cache max=N[inactive=time] | off;
            nginx可以缓存以下三种信息:
                (1) 文件句柄、文件大小和最近一次修改时间;
                (2) 打开目录的目录结构;
                (3) 没有找到的或者没有权限操作的文件的相关信息;

            max=N表示可缓存的最大条目上限;一旦到达上限,则会使用LRU从缓存中删除最近最少使用的条目;

            inactive=time: 在inactive指定的时长内没有被访问过的缓存条目就会淘汰;

        5、open_file_cache_errors on|off;
            是否缓存在文件缓存中缓存打开文件时出现找不到路径,没有权限等的错误信息;

        6、open_file_cache_min_uses time;
            每隔多久检查一次缓存中缓存条目的有效性;默认60s;

基于gzip实现响应报文压缩:

定制响应首部
    add_header name value [always];
    expires

以上是关于Nginx优化的主要内容,如果未能解决你的问题,请参考以下文章

Nginx——Nginx启动报错Job for nginx.service failed because the control process exited with error code(代码片段

使用 C++ 反转句子中的每个单词需要对我的代码片段进行代码优化

如何优化C ++代码的以下片段 - 卷中的零交叉

从JVM的角度看JAVA代码--代码优化

Android 逆向整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )(代码片段

nginx.conf 忽略了 nginx-ingress 配置映射片段