• nginx配置文件详解


    nginx配置文件详细解说:

    一、配置指令

    1、main配置段常见的配置指令:

      1)分类:

        正常运行必备的配置

        优化性能相关的配置

        用于调试及定位问题相关的配置

        时间驱动相关的配置

    2、正常运行必备的配置

      1)user

        systax:user user [group];   #可以配置一个组,不过一般默认都是nginx配置

      2)pid /PATH/TO/PID_FILE;

        指定存储nginx主进程号码的文件路径

      3)include file | mask;

        指明包含进来的其他配置文件片段;

      4)load_module file;

        指明要装载的动态模块;

    3、性能优化相关的配置:

      1)worker_processes number | auto;

        worker进程的数量;通常应该等于小于当前主机的cpu的物理核心数;大于的话是没有什么用的。小于的话主要留很小一些核心数给其他服务来使用。

        auto:默认是当前主机物理CPU核心数(nginx自动匹配);

      2)worker_cpu_affinity cpumask ......;

        worker_cpu_affinity auto [cpumask];

          CPU MASK怎么表示呢?

         假如此时电脑有8颗CPU核心数。
          00000000:表示8颗CPU核心,下面这个是位图掩码表示法。
          00000001:0号CPU
          00000010:1号CPU
          00000100:2号CPU
          00001000:3号CPU
          00010000:4号CPU
          00100000:5号CPU
          01000000:6号CPU
          10000000:7号CPU

         案例演示:加入此时我的电脑是4颗CPU

          

          一旦将某个子进程绑定在了某个核心上,那么我们可以做个压测看一下,此时的子进程所使用的核心序号是一定的。

      3)进程优先级

        worker_priority number;

          指定worker进程的nice值,舍得worker进程优先级;[-20.20]

      4)文件数量大小

        worker_rlimit_nofile number;       #其中number的值要大于worker_processes*worker_connections的乘积。

        案例演示:

          

    4、调试、定位问题:

      1)daemon on|off;

        是否以守护进程方式运行nginx,centos6中是守护模式,centos7中不必打开守护模式,因为由systemd统一管理。

      2)master_process on | off;

        是否以master/worker模型运行nginx,默认是on;我们使用的也是在on模式下。

      3)error_log file [level];

    5、事件驱动相关的配置:

      events {

        .......

      }

      1)worker_connections number;

        每个worker进程所能够打开的最大并发连接数数量;

      2)use method;

        指明并发连接请求的处理方法;method一般有两种:select和epoll。select的最大限制是1024,而epoll的连接是无限制的,所以nginx肯定使用epoll并发请求机制。

        关于两者的区别:我们可以看一下:

      select epoll
    性能 随着连接数增加,急剧下降。处理成千上万并发连接数时,性能很差。 随着连接数增加,性能基本上没有下降。处理成千上万并发连接时,性能很好。
    连接数 连接数有限制,处理的最大连接数不超过1024。如果要处理超过1024个连接数,则需要修改FD_SETSIZE宏,并重新编译 。 连接数无限制。
    内在处理机制 线性轮询 回调callback
    开发难易程度

        比如:use epoll;

          

      3)accept_mutex on | off

        处理新的连接请求的方法;on以为着由worker轮流处理新请求,讲究起点公平。off以为着每个新请求的到达都会通知所有的worker进程,讲究结果公平。

    二、主机配置

    1、与套接字相关的配置

      1)server{......};

        配置一个虚拟主机;

        server {

          listen address[:PORT] | PORT;

          server_name SERVER_NAME;

          root /PATH/TO/DOCUMENT_ROOT;        #表示web服务的默认工作路径是在哪个地方

        #  proxy_pass  URL;      #表示nginx此时仅仅是一台反向代理服务器。

        }

      2) listen PORT | address [:port] | unix:/PATH/TO/SOCKET_FILE

        listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]

          default_server:设定为默认虚拟主机;

          ssl:限制仅能后通过ssl连接提供服务;

          backlog=number:后援队列长度;

          rcvbuf=size:接受缓冲区大小;

          sndbuf=size:发送缓冲区大小;

      3)server_name name .....;

        指明虚拟主机的主机名称;后可跟多个由空白字符分割的字符串;

          支持*通配任意长度的任意字符;server_name *.chaofeng.com   www.chaofeng.*

          支持~其实的字符做正则表达式模式匹配;server_name ~^wwwd+.chaofeng.com$

        匹配机制:

          (1)首先是字符串精准匹配

          (2)左侧*通配符

          (3)右侧*通配符

          (4)正则表达式;

      4)tcp_nodelay on | off;

        在keepalived模式下的连接是否启用TCP_NODELAY选项;

        delay:延迟发送

        tcp_nodelay on表示要求不要合并发送,请求一个发送一个;对非保持连接无效。

      5)tcp_nopush on | off

        在sendfile模式下,是否启用TCP_CORK选项

        tcp_nopush on :在一个包中发送响应头和文件的开头;以完整的包发送文件

      6)sendfile on | off

        是否启用sendfile功能;

        系统调用sendfile()函数通过DMA把硬盘数据拷贝到kernel buffer,然后数据被kernel直接拷贝到另外一个与socket相关的kernel buffer,这里没有user mode和kernel mode之间的切换,在kernel中直接完成了从一个个buffer到另一个buffer的拷贝;DMA把数据从kernel bueer直接拷贝到协议栈,没有切换,也不需要数据从user mode拷贝到kernel mode,因为数据就在kernel里面。步骤减少了,切换减少了,自然性能就提升了。

      7)root path;

        设置web资源路径映射,用于指明用户请求的url所对应的本地文件系统上的文档所在目录路径;可用的位置:http,server,location,if in location

      8)location [ = | ~ | ~* ^~ ] uri {.....}

          set configuration depending on a request URI

        在一个server中location配置段可存在多个,用于实现从URI到文件系统的路径映射;nginx会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应该其配置;

        =:对URI做精准匹配;

          location = / {

            ........

          }

          例如:会去匹配http://www.chaofeng.com/,但是不会匹配http://www.chaofeng.com/index.html

        ~:对URI做正则表达式模式匹配,区分字符大小写;

        ~ *:对URI做正则表达式模式匹配,不区分字符大小写;

        ^~:对URI的左半部分做匹配检查,不区分字符大小写;

        不带符号:匹配起始于此uri的所有的uri;

        匹配优先级:=  >  ^~  >  ~ / ~*   >  不带符号;

            两个普通的location(即不带符号),匹配目录最长的那个。

            两个正则(正则的前半部分是一样的,后半部分可能一个匹配的路径长,另外一个路径短),不管有序无序,只匹配到第一个正则。

         案例:  

    server {
              listen 80;
              server_name www.ilinux.io;
              root /data/nginx/vhost1;
              error_page 404 /notfound.html;
              location / {
                      #root /data/nginx/vhost2;
                      allow all;
              }
              location ~*  .(jpg|png)$ {
                      allow all;
              }
              location ^~ /images/ {
                       alias /data/pictures/;
              }
          }

          在location中,如果内部定义了root指定映射的路径,则会覆盖掉server内部的那个root路径。也就是说他们是有继承关系的。我们可以把server的哪个root映射的路径当作父root路径,那么location中那个root映射的路径当作子root路径,父root路径统管全局作用,如果location没有定义子root路径,那么这些location默认会使用父root映射的路径下的内容,但是如果location中定义子root路径,那么子root路径将会继承父root路径,这里的继承是指子root路径覆盖父root路径的映射内容。还要注意的是,子root路径仅仅在当前自己所在的那个location中有效,子root路径只有局部作用。

      9)alias path

          定义路径别名,文档映射的另一种机制;仅仅能用于location上下文;

        注意:

          location中使用root指令和alias指令的意义不同;

          a)root,给定的路径对应于location中的/URI/左侧的/;

          b)alias,给定的路径对应于location中的/URI/右侧的/;

         案例:

          

          现在我们访问一下:

            

          现在我们修改一下配置:

          

          

            我的images目录下是没有header.jpg这张图片的。

           现在我们访问一下:

          

          总结:    alias ,匹配/images/中的第二个/,即访问 www.nginx_vhosts1.io/images/header.jpg 。为路径 /var/nginx_lt1/ 下的header.jpg.如上图

       10)error_page code uri;

        浏览器返回给用户的错误界面404其实也是一个页面,只有当状态码为404的时候,web服务器会调用这个界面然后返回给浏览器。所以我们也可以定义一个错误页面返回给我们。

        案例:

          

          然后我们在/var/nginx_lt1/目录下定义一个错误页面

          

          打开浏览器故意访问一个不存在的页面:

          

      11)index file .......;

        默认资源:http,server,location

    三、定义客户端请求的相关配置

      1)keepalive_timeout timeout [header_timeout];

        设定保持连接的超时时长,0表示禁止长连接;默认时75s;

      2)keepalive_requests number;

        在一次长连接上所允许请求的资源的最大数量,默认是100。

      3)keepalive_disable none | browser .....;

        对那种浏览器禁用长连接;(目前市面的浏览器都是比较新的,所以这一项不必过于关注)

      4)send_timeout time;

        向客户端发送响应报文的超时时长,此处,是指两次写操作之间的间隔时长。

      5)client_body_buffer_size size;

        用于接收客户端请求报文的body部分的缓冲区大小;默认是16k;超出此大小时,其将暂存到磁盘上的由client_body_temp_path指令所定义的位置

      6)client_body_temp_path apth [level1 [level2 [level3]]];

        设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量;(设定文件路径路由的方式)

          主要使用16进制的数字;

          client_body_temp_path   /var/tmp/client_body 2 1 1

            2 :表示256个一级子目录。

            1 :每个一级子目录下有16个二级子目录

            1 :每个二级子目录下有16个三级子目录

              计算:那么一共有256*16*16个三级子目录。

    四、对客户端进行限制的相关配置:

      1)limit_rate rate;

    • 限制响应给客户端的传输速率,单位是bytes/second,0表示无限制;
      Context: http, server, location, if in location

      2)limit_except method ... {...}

    • 限制对指定的请求方法之外的其它方法的使用客户端
    • 示例:
               limit_except GET {
               allow 192.168.1.0/24;
               deny all;
           }
           #除了GET和HEAD之外,其它所有的method都允许192.168.1.0/24网络地址访问,其它ip地址都拒绝;

    五、文件操作优化配置

      1)aio on | off |threads[=pool];

    • 是否启用aio功能;默认为off。使用默认就行
    • Context: http, server, location

      2)directio size | off;

        在linux主机启用IO_DIRECT标记,此处意味文件大于等于给定的大小时使用,例如:directio 4m;

        directio与sendfile功能讲解:

        要使aio生效需把directio设置为打开状况,并且如果aio生效,那么将自动不使用sendfile(),这在linux下这是显然的,要么利用aio读到缓存区,要么利用sendfile()直接发送出去,两者不可兼用,而对于freebsd系统下aio和sendfile并用的情况,我并不了解,所以也就不妄加评论;
    
    可以看到directio是针对每个请求的文件大小而决定是否开启directio的,因此对于上面的整个示例配置,也就会针对每个请求的不同而不同: 如果某处请求的文件大于等于512k,那么将启用directio,从而aio生效,进而sendfile不生效; 如果某处请求的文件小于512k,那么将禁用directio,从而aio也就不生效,转而使用sendfile(),即sendfile生效;
    
    这种设计貌似刚好把linux下aio和sendfile两种机制的优点很好的结合起来使用。对于大文件采用aio,节省cpu,而对于小文件,采用sendfile,减少拷贝;并且对于大文件aio采用directio,避免挤占文件系统缓存,让文件系统缓存更多的小文件。 从理论上来看,这种配置比较适合系统内存有限、小文件请求比较多、间隔有几个大文件请求的Web环境;如果内存足够大,那么应该充分利用文件系统缓存,而directio使得aio无法使用缓存是衡量最终是否需要采用aio的一个需要仔细考虑的因素;网上有人总结说nginx+aio很好,也有人说其很差,其实根据特定的系统环境和应用场景来做配置调节,才能达到性能的最优,nginx提供的 AIO 只是一套工具,没有固定的好与差之分,就看你能否恰当的用好它,但据nginx官网论坛来看,在linux系统的大部分场景下,目前因使用aio功能附加的限制而带来的实际效果估计并不太理想:
      3)open_file_cache off;
      open_file_cache max=N [inactive=time];

        Configures a cache that can store;

        nginx可以缓存以下三种信息:

    - <1> 文件的描述符、文件大小和最近一次的修改时间;
    - <2> 打开的目录结构;
    - <3> 没有找到的或者没有权限访问的文件的相关信息;

          •  max=N: 可缓存的缓存项上限;达到上限后会使用LRU算法(最近最少使用)实现缓存管理;
        •     inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_uses指令所指定的次数的缓存项即为非活动项;

      4)open_file_cache_valid time;

        •     缓存项有效性的检查频率;默认为60s;

      5)open_file_cache_min_uses number;

        •     在open_file_cache指令的inactive参数指定的时长内,至少应该被命中多少次方可被归类为活动项;

      6)open_file_cache_errors on|off;

        •     是否缓存查找时发生错误的文件一类的信息;

    六、权限

      1)ngx_http_auth_basic_module模块:实现基于用户的访问控制,使用basic机制进行用户认证

        nginx使用htpasswd(包为httpd-tools)制作账号密码,然后添加在虚拟主机中。

        

      2)ngx_http_stub_status_module模块:用于输出nginx的基本状态信息

        stub_status;

    配置示例:
       

      访问一下:

      

        对输出内容做解释:

      Active connections: 活动状态的连接数;
      accepts:已经接受的客户端请求的总数;
      handled:已经处理完成的客户端请求的总数;
      requests:客户端发来的总的请求数;
      Reading:处于读取客户端请求报文首部的连接的连接数;
      Writing:处于向客户端发送响应报文过程中的连接数;
      Waiting:处于等待客户端发出请求的空闲连接数

       3)ngx_http_log_module模块:用于以指定的格式写入请求日志

        log_format name string ...;

      •   string 可以使用nginx核心模块及其它模块的内嵌变量
      •   注意:此配置只能用于http段中

        access_log path [format [buffer=size] [gzip=[level1]] [flush=time][if=condition]];
        access_log off;      #这个功能在一些不必要的location中可以关闭日志功能

      •   访问日志文件路径,格式及相关的缓冲的配置;
          - buffer=size: 设置日志缓冲区大小
               - flush=time:定义清空时长

            示例:

          

      4)open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
        open_log_file_cache off;

      •   缓存各日志文件相关的元数据信息;
      •   max:缓存的最大文件描述符数量;
      •   min_uses:在inactive指定的时长内访问大于等于此值方可被当作活动项;
      •   inactive:非活动时长
      •   valid:验证缓存中各缓存项是否为活动项的时间间隔
      案例演示:
        
    示例:为nginx定义使用类似于httpd的combined格式的访问日志
      #在/etc/nginx/nginx.conf文件中http段配置日志格式
      [root@wujunjie ~]# vim /etc/nginx/nginx.conf
          http {
               log_format comd '$remote_addr - $remote_user [$time_local] '
                               '"$request" $status $bytes_sent '
                               '"$http_referer" "$http_user_agent"';
              ...
          }
      #给vhost1主机添加访问日志,设置为comd格式
      [root@wujunjie ~]# vim /etc/nginx/conf.d/vhost1.conf
          server {
              ...
              access_log /var/log/nginx/vhost1-access.log comd;
              ...
          }   
      #访问测试后查看日志格式
      [root@wujunjie ~]# tail -2 /var/log/nginx/vhost1-access.log 
      192.168.1.106 - tom [06/Aug/2018:23:18:27 +0800] "GET /images HTTP/1.1" 301 388 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
      192.168.1.106 - tom [06/Aug/2018:23:18:27 +0800] "GET /images/ HTTP/1.1" 403 324 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
      5)ngx_http_gzip_module:用gzip格式压缩响应;

        1.gzip on | off;
          Enables or disables gzipping of responses.
        2.gzip_comp_level level;
          Sets a gzip compression level of a response. Acceptable values are in the range from 1 to 9.
        3.gzip_disable regex ...;
          Disables gzipping of responses for requests with “User-Agent” header fields matching any of the specified regular expressions.
        4.gzip_min_length length;
          启用压缩功能的响应报文大小阈值;
        5.gzip_buffers number size;
          支持实现压缩功能时为其配置的缓冲区数量及每个缓存区的大小;
        6.gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
          nginx作为代理服务器接收到从被代理服务器发送的响应报文后,在何种条件下启用压缩功能的;
          off:对代理的请求不启用
          no-cache, no-store,private:表示从被代理服务器收到的响应报文首部的Cache-Control的值为此三者中任何一个,则启用压缩功能;
        7.gzip_types mime-type ...;
          压缩过滤器,仅对此处设定的MIME类型的内容启用压缩功能;

    配置示例:   
      gzip  on;
      gzip_comp_level 6;
      gzip_min_length 64;
      gzip_proxied any;
      gzip_types text/xml text/css  application/javascript;  

    案例演示: 

        此配置可用位置:http, server, location(在http中定义表示对所有的server生效,在server中定义,表示对所有的location生效。在location中定义,表示对某个location生效)

         如何查找压缩的数据类型呢?

          

      6)ngx_http_ssl_module模块:

        1.ssl on | off;
          是否启用htttps协议
        2.ssl_certificate file;
          当前虚拟主机使用PEM格式的证书文件;
        3.ssl_certificate_key file;
          当前虚拟主机上与其证书匹配的私钥文件;
        4.ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1][TLSv1.2]
          支持ssl协议版本,默认为后三个;
        5.ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
          builtin[:size]:使用Openssl内建的缓存,此缓存为每worker进程私有;
          [shared:name:size]:在各worker之间使用一个共享的缓存;
        6.ssl_session_timeout time;
          客户端一侧的连接可以服用ssl session cache中缓存的ssl参数的有效时长;

    案例:

        

    配置示例:
    
     #创建私有CA自签证书,以192.168.32.132为CA
    
    [root@www ~]# cd /etc/pki/CA
    
    [root@www CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)
    
    Generating RSA private key, 2048 bit long modulus
    
    ........................................................................+++
    
    ..................................+++
    
    e is 65537 (0x10001)
    
    [root@www CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
    
    You are about to be asked to enter information that will be incorporated
    
    into your certificate request.
    
    What you are about to enter is what is called a Distinguished Name or a DN.
    
    There are quite a few fields but you can leave some blank
    
    For some fields there will be a default value,
    
    If you enter '.', the field will be left blank.
    
    -----
    
    Country Name (2 letter code) [XX]:CN
    
    State or Province Name (full name) []:ZHEJIANG
    
    Locality Name (eg, city) [Default City]:NINGBO
    
    Organization Name (eg, company) [Default Company Ltd]:ilinux.com
    
    Organizational Unit Name (eg, section) []:opt
    
    Common Name (eg, your name or your server's hostname) []:www.ilinux.com
    
    Email Address []:
    
    [root@www CA]# touch index.txt
    
    [root@www CA]# echo 01 > serial
    
     #在nginx主机上生成私钥和申请证书
    
    [root@wujunjie ~]# mkdir /etc/nginx/ssl
    
    [root@wujunjie ~]# (umask 077;openssl genrsa -out /etc/nginx/ssl/.nginx.key 2048)
    
    [root@wujunjie ~]# openssl req -new -key /etc/nginx/ssl/.nginx.key -out /etc/nginx/ssl/nginx.crs -days 365
    
     [root@wujunjie ssl]# scp nginx.csr [root@192.168.32.132:/tmp](mailto:root@192.168.32.132:/tmp)
    
     #在CA上签署证书
    
     [root@www CA]# openssl ca -in /tmp/nginx.csr -out certs/nginx.crt -days 365
    
     #把签署好的证书nginx.crt传会nginx主机
    
    [root@www CA]# scp certs/nginx.crt root@192.168.32.128:/etc/nginx/ssl #修改nginx配置文件,启用ssl
    
     [root@wujunjie ~]# vim /etc/nginx/conf.d/vhost1.conf
    
    server {
    
     listen 443 ssl;
    
     server_name www1.ilinux.com;
    
     root /data/nginx/vhost1;
    
     index index.html
    
     error_page 404 =200 /notfound.html;
    
     access_log /var/log/nginx/vhost1-access.log main;
    
     ssl on;
    
     ssl_certificate /etc/nginx/ssl/nginx.crt;
    
     ssl_certificate_key /etc/nginx/ssl/.nginx.key;
    
     ssl_protocols sslv2 sslv3 tlsv1 tlsv1.1 tlsv1.2;
    
     ssl_session_cache shared:SSL:10m;
    
     location / {
    
      allow all;
    
     }
    
     }
    
    [root@wujunjie ~]# vim /data/nginx/vhost1/index.html
    
    <h1>nginx</h1>
    
    <h2>192.168.32.128</h2>
    
     #检查语法,重载配置
    
     [root@wujunjie ~]# nginx -t
    
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    
    [root@wujunjie ~]# nginx -s reload

       补充一篇博客的说明:

        

        

        

        

       7)ngx_http_rewrite_module模块:

        用于使用正则表达式模式更改请求URI,返回重定向,并有条件的选择配置
          例如:

        bbs.magedu.com/ --> www.magedu.com/bbs/
        http://www.magedu.com/ --> https://www.magedu.com/
        http://www.magedu.com/login.php;username=tom --> http://www.magedu.com/tom/
        http://www.ilinux.io/bbs/ --> http://bbs.ilinux.io/

        将用户请求的URI基于regex所描述的模式进行检查,然后完成替换;

        1.rewrite  regex  replacement  [flag]
          将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI;

          注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而上逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,因此,隐含有循环机制;[flag]所表示的标志位用于控制此循环机制;

          如果replacement是以http://或https://开头,则替换结果会直接以重定向返回给客户端;301:永久重定向;

          [flag]

          last:重写完成后停止对当前URI在当前location中后续的其他重写操作,而后对新的URI启动新的一路重写检查;提前重启新一轮循环;
          break:重写完成后停止对当前URI在当前location中后续的其他重写操作,而后直接跳转至重写规则配置块之后的其他配置;循环结束;
          redirect:重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,有客户端重新发起请求;不能以http://或https://开头;
          permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;

        案例:

    [root@www1 conf.d]# vim vhost.conf
    
          server {
          listen 80;
          server_name www.ilinux.com;
          root /data/nginx/vhost1;
          rewrite /(.*).png$ /$1.jpg;
          }
      [root@www1 conf.d]# nginx -s reload

        注意:如果没有加flag,默认就是permanent

        http重定向为https

        [root@www1 conf.d]# vim vhost.conf
    
              server {
              listen 80;
              server_name www.ilinux.com;
              root /data/nginx/vhost1;
              rewrite /(.*)$ https://%{HTTP_HOST} /$1
              }
          [root@www1 conf.d]# nginx -s reload

        2、return

          停止处理并将指定的代码返回给客户端    

          return code [text];
          return code URL;
          return URL;

        3、rewrite_log on |off;

          是否开启重写日志

        4.if (condition) {...}

          引入一个新的配置上下文:条件满足是,执行配置块中的配置指令;

          可用于server和location段中

    condition:
    比较操作符:
    ===
    ~:模式匹配,区分字符大小写
    ~:模式匹配,区分字符大小写
    !~:模式不匹配,区分字符大小写
    !~:模式不匹配,不区分字符大小写
    文件及目录存在性判断:
    -e, !-e
    -f, !-f
    -d, !-d
    -x, !-x

        5、set $variable_value

          用户自定义变量

       7)ngx_http_referer_module模块
          作用:The ngx_http_referer_module module is used to block access to a site for requests with invalid values in the “Referer” header field.

        格式:valid_referers none | blocked | server_names | string ...;
                 定义referer首部的合法引用用值;

     none:请求报文首部没有referer首部;
              blocked:请求报文的referer首部没有值;
              server_names:参数,其可以有值作为主机名或主机名模式;
                  arbitrary_string:直接字符串,但可使用*作通配符;
                  regular expression:被指定的正则表达式模式匹配到的字符串;要使用~打头,例如 ~.*.magedu.com;
                  $invalid_referer : 模块内置变量,非法引用,只要没被valid_referers定义匹配到的就是非法引用
    ...

        示例:

      配置示例:
                    valid_referers none block server_names *.magedu.com *.mageedu.com magedu.* mageedu.* ~.magedu.;
                    
                    if($invalid_referer) {
                        return http://www.magedu.com/invalid.jpg;
                    }

        示例:  

        




  • 相关阅读:
    分布式系统之CAP原理
    分布式缓存一致性哈希算法
    数据库三范式 无重复列 完全依赖主键 属性不依赖非主属性
    二叉树 B-树B+树
    数据库索引 主键 聚集索引 非聚集索引
    数据库水平拆分
    线程池ScheduledThreadPoolExecutor
    线程池之ThreadPoolExecutor
    mybatis一级缓存和二级缓存
    vue框架的搭建
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/10516894.html
Copyright © 2020-2023  润新知