• nginx常用模块


    Nginx

    Nginx是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势,整体采用模块化设计,有丰富的模块库和第三方模块库,配置灵活。 在Linux操作系统下,Nginx使用epoll事件模型,在OpenBSD或FreeBSD操作系统上采用类似于epoll的高效事件模型kqueue。Nginx在官方测试的结果中,能够支持五万个并行连接,而在实际的运作中,可以支持二万至四万个并行连接。Nginx除了是一个轻量级的异步框架的Web服务器,还能用作反向代理和负载平衡器。
    Nginx工作时有一个主线程和几个工作线程,主线程的目的是加载和验证配置文件、维护工作线程;工作线程用来处理实际的请求,其数量可配置,也可以自动调整为服务器CPU数量。Nginx主配置文件: /etc/nginx/nginx.conf,及/etc/nginx/conf.d/*.conf。Nginx由不同的模块组成,这些模块由配置文件中指定的指令控制。

    常见模块及配置指令

    Core functionality

    主配置文件/etc/nginx/nginx.conf格式:

    main block
    event {
        ...
    }        
    http {
        ...
        server {
            ...
        }
        server {
            ...
            listen
            server_name
            root
            location /uri/ {
                ...
                if CONDITION {
                    ...
                }
            }
        }
    }

    其中 main block 配置段常见的配置指令:

    分类:
        正常运行必备的配置
        优化性能相关的配置
        用于调试及定位问题相关的配置
        事件驱动相关的配置
    正常运行必备的配置:
    1、user USERNAME [GROUP];
        指定worker processes所属用户及用户组
    2、pid /PATH/TO/PID_FILE;
        指定存储nginx主进程进程号码的文件路径
    3、include file | mask;
        指明包含进来的其它配置文件片断
    4、load_module file;
        指明要装载的动态模块
    性能优化相关的配置:
    1、worker_processes number | auto;
        worker进程的数量:通常应该等于小于当前主机的cpu的物理核心数
        auto:当前主机物理CPU核心数
    2、worker_cpu_affinity cpumask ...; 或 worker_cpu_affinity auto [cpumask];
        绑定CPU核心与worker进程,默认不绑定
        cpumask示例:8核
            00000001:0号CPU
            00000010:1号CPU
    3、worker_priority number;
        指定worker进程的nice值,设定worker进程优先级;[-20,20]
    4、worker_rlimit_nofile number;
        worker进程所能够打开的文件数量上限
    调试、定位问题:
    1、daemon on|off;    
        是否以守护进程方式运行Nignx
    2、master_process on|off;
        是否以master/worker模型运行nginx;默认为on
    3、error_log file [level];
        定义错误日志记录级别
    事件驱动相关的配置:
    events {
        ...
    }
    1、worker_connections number;
        每个worker进程所能够打开的最大并发连接数数量
        启动nginx后最大并发连接数量: worker_processes * worker_connections
    2、use method;
        指明并发连接请求的处理方法,不指定时nginx会自动选择最高效的处理方法
        use epoll;
    3、accept_mutex on | off;
        处理新的连接请求的方法:on意味着由各worker轮流处理新请求,Off意味着每个新请求的到达都会通知所有的worker进程

    ngx_http_core_module

    配置格式:

    http {
        ... ...
        server {
            ...
            server_name
            root
            location [OPERATOR] /uri/ {
            ...
            }
        }
        server {
            ...
        }
    }

    常见配置指令:

    与套接字相关的配置:
    1、server { ... }
    虚拟主机配置字段
    安全上下文:http
    示例:
        server {
            listen address[:PORT]|PORT;
            server_name SERVER_NAME;
            root /PATH/TO/DOCUMENT_ROOT;                            
        }
    2、listen address[:port] [default_server] [ssl] [http2|spdy]  [backlog=number] [rcvbuf=size] [sndbuf=size];
    指定监听的地址和端口等,常用选项:
        default_server:设定为默认虚拟主机
        ssl:限制仅能够通过ssl连接提供服务
        backlog=number:后援队列长度
        rcvbuf=size:接收缓冲区大小
        sndbuf=size:发送缓冲区大小
    安全上下文:server
    示例:
        # 监听指定的IP及端口
        listen 192.168.4.119:80;
        # 监听指定端口只能通过SSL
        listen 443 ssl;
    3、server_name name ...;
    指明虚拟主机的主机名称,后可跟多个由空白字符分隔的主机名称;
    安全上下文:server
    示例:
        # 支持*通配任意长度的任意字符
        server_name *.test.com www.test.*;
        # 支持~起始的字符做正则表达式模式匹配
        server_name ~^wwwd+.test.com$
    4、tcp_nodelay on | off;
    在keepalived模式下的连接是否启用tcp_nodelay选项
    安全上下文:http,server,location
    5、tcp_nopush on|off;
    在sendfile模式下,是否启用选项
    安全上下文:http,server,location    
    6、sendfile on | off;
    是否启用sendfile功能
    安全上下文:http,server,location,if in location
    定义路径相关的配置:
    7、root path; 
    设置web资源路径映射,用于指明用户请求的url所对应的本地文件系统上的文档所在目录路径
    安全上下文:http,server,location,if in location
    8、location [ = | ~ | ~* | ^~ ] uri { ... }
    设置请求的uri对应的资源。在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的uri来检查定义的所有location,并找出一个最佳匹配,而后应用其配置。其中:
        =:对uri做精确匹配
        ^~:对uri的左半部分做匹配检查,不区分字符大小写
        ~:对uri做正则表达式模式匹配,区分字符大小写
        ~*:对uri做正则表达式模式匹配,不区分字符大小写
        不带符号:匹配起始于此uri的所有的url
        @:定义位置名称,实现资源跳转
    匹配优先级:=, ^~, ~/~*,不带符号;
    安全上下文:server,location
    示例:
    server {
        listen 192.168.4.119:80;
        server_name www.test.com;
        root /data/web;    #设置虚拟主机的web根目录
        # = 精确匹配/data/web/test目录下的test.html文件
        location = /test.html {
            root /data/web/test;  #指定location的web根目录
        }
        # ~ 正则匹配/data/web/aaa目录下带有AAA字符串的文件(区分大小写)
        location ~ .*AAA.* {
            root /data/web/aaa;
        }
        # ~* 正则匹配/data/web/bbb目录下带有bbb字符串的文件(不区分大小写)
        location ~* .*bbb.* {
            root /data/web/bbb;
        }
        # ^~ 匹配/data/web/www目录下的文件
        location ^~ /www {
            root /data/web/www
        }
    }
    9、alias path;
    定义路径别名,文档映射的另一种机制
    安全上下文:location
    注意:root指令和alias指令的意义不同,并且不能同时用在同一个location中。
        (1) root,给定的路径对应于location中的/uri/左侧的/
        (2) alias,给定的路径对应于location中的/uri/右侧的/
    10、error_page code ... [=[response]] uri;
    指定错误的uri路径
    安全上下文:http,server,location,if in location
    示例:
        #当网页的状态码为404时,跳转到指定的404.html页面
        error_page 404    /404.html;
    11、try_files file ... uri;
    如果指定路径下文件不存在,则跳转到指定的uri或者返回指定状态码。
    安全上下文:server,location
    示例:
    location ~ .*test.* {
            try_files test.html /404.html;
    }
    #尝试打开test.html,如果没有此文件,则返回状态码500
    location = /test.html {
            try_files test.html =500;
    }
    定义客户端请求的相关配置
    12、keepalive_timeout timeout [header_timeout];
    设定保持连接的超时时长,0表示禁止长连接;默认为75s
    安全上下文:http,server,location
    13、keepalive_requests number;
    在一次长连接上所允许请求的资源的最大数量,默认为100
    安全上下文:http,server,location
    14、keepalive_disable none | browser ...;
    对哪种浏览器禁用长连接
    安全上下文:http,server,location
    15、send_timeout time;
    向客户端发送响应报文的超时时长,此处指两次连续写操作之间的间隔时长
    安全上下文:http,server,location
    16、client_body_buffer_size size;
    用于接收客户端请求报文的body部分的缓冲区大小,默认为16k;超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置
    安全上下文:http,server,location
    17、client_body_temp_path path [level1 [level2 [level3]]];
    设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量,其中level表示存储目录的数量,用16进制表示
    安全上下文:http,server,location
    示例:
        client_body_temp_path /var/tmp/client_body  2 1 1
            2:表示用2位16进制数字表示一级子目录:00-ff,共256个一级子目录
            1:表示用1位16进制数字表示二级子目录;0-f,共16个二级子目录
            1:表示用1位16进数制字表示三级子目录:0-f,共16个二级子目录
    对客户端进行限制的相关配置:
    18、limit_rate rate;
    限制响应给客户端的传输速率,单位是bytes/second,0表示无限制
    安全上下文:http,server,location,if in location
    19、limit_except method ... { ... }
    限制客户端除指定的请求方法之外不能访问服务器
    安全上下文:location
    示例:
        # 限制192.168.4.0/24的客户端只能通过GET请求
        limit_except GET {
            allow 192.168.4.0/24;
            deny  all;
        }
    文件操作优化的配置
    20、aio on|off | threads[=pool];
    是否启用aio功能
    安全上下文:http,server,location
    21、directio size | off;
    当文件大于等于给定的大小时启用O_DIRECT标记,例如directio 4m;
    安全上下文:http,server,location
    22、open_file_cache off; 或 open_file_cache max=N [inactive=time];
        nginx可以缓存以下三种信息:
            (1) 文件的描述符、文件大小和最近一次的修改时间
            (2) 打开的目录结构
            (3) 没有找到的或者没有权限访问的文件的相关信息
        max=N:可缓存的缓存项上限;达到上限后会使用LRU算法实现缓存管理
        inactive=time:缓存项的非活动时长,在指定的时长内未被命中的或命中的次数少于open_file_cache_min_uses所指定的次数的缓存项即为非活动项
    安全上下文:http,server,location
    23、open_file_cache_valid time;
    缓存项有效性的检查频率;默认为60s;
    安全上下文:http,server,location
    24、open_file_cache_min_uses number;
    在open_file_cache指令的inactive参数指定的时长内,至少应该被命中多少次方可被归类为活动项,默认为1
    安全上下文:http,server,location
    25、open_file_cache_errors on | off;
    是否缓存查找时发生错误的文件一类的信息,默认为off
    安全上下文:http,server,location

    ngx_http_index_module

    此模块用于实现基于IP的访问控制功能。
    index
    file...; 定义默认的web网页资源,默认为index index.html 安全上下文:http,server,location 示例: location / { index index.html; }

    ngx_http_access_module

    allow|deny address|CIDR|unix:|all;
    允许或拒绝访问的Ip网段,匹配顺序为从上往下匹配。
    安全上下文: http,server,location,limit_except
    示例:
        location / {
            deny  192.168.4.1;
            allow 192.168.4.0/24;
            deny  all;
        }

    ngx_http_auth_basic_module

    此模块用于实现基于用户的访问控制功能。
    
    1、auth_basic string|off
    配置auth_basic提示的信息
    安全上下文:http,server,location,limit_except
    2、auth_basic_user_file file;
    指定保存用户账户密码的file文件,该文件由htpasswd生成
    安全上下文:http,server,location,limit_except
    示例:
        #生成保存认证用户信息的文件
        [root@nginx ~]# htpasswd -c /etc/nginx/nginxpasswd test1
        New password: 
        Re-type new password: 
        Adding password for user test1
        [root@nginx ~]# htpasswd /etc/nginx/nginxpasswd test2
        New password: 
        Re-type new password: 
        Adding password for user test2
    
        #添加nginxbasic认证配置
        location ^~ /auth {
            auth_basic "nginx auth_basic";
            auth_basic_user_file /etc/nginx/nginxpasswd;
        }

    ngx_http_stub_status_module

    此模块用于输出nginx的基本状态信息。
    
    stub_status;
    用于输出nginx的基本状态信息
    安全上下文:server,location。
    示例:
        location /status {
            stub_status;
        }
      访问http://192.168.4.119/status可获取nginx服务器的状态信息,如下:
        Active connections: 291 
        server accepts handled requests
            16630948 16630948 31070465 
        Reading: 6 Writing: 179 Waiting: 106     
      各项释义:
      Active connections: 活动状态的连接数;
      accepts:已经接受的客户端请求的总数;
      handled:已经处理完成的客户端请求的总数;
      requests:客户端发来的总的请求数;
      Reading:处于读取客户端请求报文首部的连接的连接数;
      Writing:处于向客户端发送响应报文过程中的连接数;
      Waiting:处于等待客户端发出请求的空闲连接数

    ngx_http_log_module

    1、access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
      access_log off;
    用于设置访问日志文件路径,格式及相关的缓冲的配置。默认情况下,access_log预定义了combined的日志格式,用户可在format中直接调用。
    安全上下文:http,server,location,if in location,limit_except
    示例:
        #将日志以combined格式记录在指定路径
        access_log  /var/log/nginx/access.log  combined;
        #将访问nginx的status的页面以指定的test格式存放在指定的路径中
        location /status {
            stub_status;
            access_log /data/log/access_log test;
        }
    2、log_format name [escape=default|json|none] string ...;
    在string中可使用nginx核心模块及其它模块内嵌的变量来生成log日志,默认日志的格式为combined格式。
    安全上下文:http
    示例:
        #定义名为test的日志格式
        log_format test '$remote_addr    $status    "$request"'
    3、open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
      open_log_file_cache off;
    用于缓存各日志文件相关的元数据信息。
    安全上下文:http,server,location
    各项释义:
        max:缓存的最大文件描述符数量;
        min_uses:在inactive指定的时长内访问大于等于此值方可被当作活动项,默认为1
        inactive:非活动时长;
        valid:验正缓存中各缓存项是否为活动项的时间间隔,默认为60s
    示例:
        open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;

    ngx_http_gzip_module

    此模块能够使用gzip压缩响应报文的大小,通过能够将需要传输的数据减少一半或者更多
    
    1、gzip on|off;
    是否开启压缩响应
    安全上下文:http,server,location,if in location
    2、gzip_comp_level level;
    设置压缩响应的等级,从1到9,默认为1
    安全上下文:http,server,location
    3、gzip_disable regex ...;
    根据正则表达式匹配浏览器类型来关闭响应压缩
    安全上下文:http,server,location
    4、gzip_min_length length;
    指定被压缩的响应报文的最小长度,默认为20个字节
    安全上下文:http,server,location
    5、gzip_buffers number size;
    设置压缩响应报文时的缓冲区数量及每个缓冲区大小
    安全上下文:http,server,location
    6、gzip_proxied off|expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any ...;
    nginx作为代理服务器接收到从被代理服务器发送的响应报文后,在何种条件下启用压缩功能,默认为off
    释义:
    off:对代理的请求不启用;
    no-cache,no-store,private:表示从被代理服务器收到的响应报文首部的Cache-Control的值为此三者中任何一个,则启用压缩功能
    安全上下文:http,server,location
    7、gzip_types mime-type ...;
    压缩过滤器,仅对此处设定的MIME类型的内容启用压缩功能,默认压缩text/html
    安全上下文:http,server,location
    示例:
        gzip on;
        gzip_comp_level 6;
        gzip_min_length 64;
        gzip_proxied any;
        gzip_types text/xml text/css  application/javascript;

    ngx_http_ssl_module

    1、ssl on|off;
    在虚拟服务器上启动https协议
    安全上下文:http,server
    2、ssl_certificate file;
    指定当前https协议使用的SSL证书,证书需为pem格式。
    安全上下文: http,server
    3、ssl_certificate_key file;
    指定当前https协议所使用证书的私钥文件
    安全上下文: http,server
    4、ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
    指定支持的ssl协议的版本,默认为后三个
    安全上下文: http,server
    5、ssl_session_cache off|none|[builtin[:size]] [shared:NAME:size];
    用于设置存储ssl会话参数的缓存类型及大小
    释义:
    builtin[:size]:使用OpenSSL内建的缓存,此缓存为每worker进程私有;
    shared:NAME:size:在各worker之间使用一个共享的缓存
    安全上下文: http,server
    6、ssl_session_timeout time;
    设置客户端可复用缓存的会话参数的时间
    安全上下文: http,server
    示例:
        server {
            listen 192.168.0.83:443 ssl;
            server_name www2.abc.com;
            root /data/https;
            ssl on;
            ssl_certificate /etc/nginx/ssl/nginx.crt;
            ssl_certificate_key /etc/nginx/ssl/nginx.key;
            ssl_session_cache shared:SSLCACHE:20m;
        }

    ngx_http_rewrite_module

    此模块用于将用户请求的URI基于regex所描述的模式进行检查,而后完成替换,使得用户访问替换后的URI
    
    1、rewrite regex replacement [flag];
    此指令将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI。如果replacement是以http://或https://开头,则替换结果会直接以重定向返回给客户端。另外如果在同一级配置块中存在多个rewrite规则,则会自下而下逐个检查;被某条件规则替换完成后,会新起一轮的替换检查,因此隐含有循环机制;[flag]所表示的标志位用于控制此循环机制,包括以下标志:
        last:重写完成后停止对当前URI在当前location中后续的其他重写操作,而后对新的URI启动新一轮重写检查,即提前重启新一轮的重写循环;
        break:重写完成后停止对当前URI在当期location中的后续的其他重写操作,而后直接跳转至重写规则配置块之后的其他配置,结束重写循环;
        redirect:重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;此flag所重写的URI不能以http://或https://开头;
        permanent:重写完成后以永久重定向的方式直接返回重写后生成的新的URI给客户端,由客户端重新发起请求
    安全上下文:server,location,if
    示例:
        location /users/ {
            rewrite ^/users/profile/(.*)$ /show?user=$1? break;
        }
    2、return code [text];
      return code URL;
      return URL;
    停止处理请求,并返回指定的文本信息、状态码或URL给客户端
    安全上下文:server,location,if
    示例:
        location ~ .*test.* {
            return 404 "test";
        }
    3、rewrite_log on | off;
    是否开启重写日志
    安全上下文:http,server,location,if
    4、if (condition) { ... };
    条件判断配置段,当满足条件时,执行配置段中的指令
    其中condition中的比较符有以下几种:
        字符串比较操作符:
            =:匹配
            !=:不匹配
            ~:模式匹配,区分字符大小写;
            !~:模式不匹配,区分字符大小写;
            ~*:模式匹配,不区分字符大小写;
            !~*:模式不匹配,不区分字符大小写
        文件及目录存在性判断:
            -e,!-e:文件是否存在;
            -f,!-f:文件是否为普通文件;
            -d,!-d:文件是否为目录;
            -x,!-x:文件是否可执行
    安全上下文:server,location
    示例:
        if ($http_user_agent ~ MSIE) {
            rewrite ^(.*)$ /msie/$1 break;
        }
    5、set $variable value;
    自定义用户变量
    安全上下文:server,location,if
    示例:
        set $newindex "index.html";
        if ($host = "www.sina.com") {
            set $newindex "index.php";
        }
        index $newindex;

    ngx_http_referer_module

    valid_referers none|blocked|server_names|string ...;
    定义referer首部的合法可用值
    释义:
    none:请求报文首部没有referer首部;
    blocked:请求报文的referer首部没有值;
    server_names:参数,其可以有值作为主机名或主机名模式;
        arbitrary_string:直接字符串,但可使用*作通配符
        regular_expression:被指定的正则表达式模式匹配到的字符串,要使用~开头,如 ~.*.test.com
    安全上下文: server,location
    示例:
        valid_referers none blocked server_names *.teest.com tesst.* ~.test.;
        if($invalid_referer) {
            return http://www.test.com/test.jpg;
        }

  • 相关阅读:
    新的开始
    react的setState使用中遇到的问题
    h5的input的required使用中遇到的问题
    vue学习中v-if和v-show一起使用的问题
    异步 JavaScript 之 macrotask、microtask
    .eslintrc 文件
    Vue2学习结合bootstrapTable遇到的问题
    Vue2学习(3)
    ES6 箭头函数
    Vue2学习(2)
  • 原文地址:https://www.cnblogs.com/walk1314/p/9327703.html
Copyright © 2020-2023  润新知