nginx 参数详解

nginx的http web功能

    必须使用虚拟机来配置站点:每个虚拟主机使用一个server{}段来配置
    非虚拟主机的配置、公共选项,需要定义在server之外,http之内
        http{
            directive value;
            ....
            server{
 
            }
            server{
            }
            ......
        }
 
    1.server{}
      定义一个虚拟主机:nginx支持使用基于主机名或IP的虚拟主机
    注意:
        PORT :基于监听的端口
        server_name :基于主机名区分
    2.listen
 
        listen address[:port][default_server][ssl][http2|spdy] [rcvbuf=size] [sndbuf=size] ;
        listen port [default_server][ssl][http2|spdy] [rcvbuf=size] [sndbuf=size] ;
 
 
 
       default_server:定义此server为http中默认的server;如果所有的server中无任何一个listen使用此参数,那么第一个server即为默认server
 
       rcvbuf=SIZE:接收缓存大小
       sndbuf=SIZE: 发送缓存大小
       ssl:https server:必须以ssl连接
    3.server_name [...];
       server_name可以跟多个主机名,名称可以使用通配符和正则表达式(通常以~开头):当nginx收到一个请求时,会取出其首部的server的值,而后跟众server_name进行比较:比较方式
            (1) 先做精确匹配    www.tshare365.com
            (2) 左侧通配符匹配    *.tshare365.com
            (3) 右侧通配符匹配     www.*
            (4) 正则表达式匹配    ~^.*.tshare365.com$
    4.server_name_hash_bucket_size 32|64|128
       为了实现快速主机查找,nginx使用hash表来保存主机名
    5.location [ =|~|~*|^~] uri { ... }

         location @name { ... }

        功能:允许根据用户请求的URI来匹配指定的各location以进行访问配置;匹配到时,将被location块中的配置所处理
 
        =:精确匹配
        ~:正则表达式模式匹配,匹配时区分字符大小写
        ~*:正则表达式模式匹配,匹配时忽略字符大小写
        ^~:只需要前半部分与uri匹配即可,不检查正则表达式
匹配优先级:
            字符字面量最精确匹配、正则表达式检索(由多个时,由第一个匹配到的所处理),按字符字面量
        匹配优先级:精确匹配=、^~ 、~或* 、不带符号的URL;
 
 6、tcp_nopush on | off  ,默认off(推荐)
        是否启用TCP_NOPUSH(freebsd)或TCP_CORK(Linux)选项;仅在启用sendfile为On时有用;
 

文件路径定义

 
   1.root path
        设置web资源路径,用于指定请求的根文档目录,从跟开始匹配
        root:root/URI
    location ^~  /images/{
        root /web;
    }
    打开logo.png则访问的是 /web/images/logo.png
    http:///www.tshare365.com/images/logo.png
 
   2.alias path
        指定路径别名,只能用于location中,从最后一个/开始匹配
        alias:alias/
 
    location ^~  /images/{
        alias /web;
    }
    打开logo.png则访问的是 /web/logo.png
    http:///www.tshare365.com/images/logo.png
        
    3.index file....
         定义默认页面,可以跟多个值。自左向右匹配
 
    4.error_page code ... [=[response]]  uri;
        当对于某个请求发回错误时,如果匹配上了error_page指令中设定的code,则从定向至新的新URI中 (写在server{}之后)
        错误重定向
 
    5.try_files path1 [path2...] uri;
        自左向右尝试读取有path所指定路径,在第一找到即停止并返回,如果所有path均不存在,则返回最后一个uri
      location ~* ^/document/(.*)${
        root /www/htdocs;
        try_files $uri /docu/$1 /temp.html;  #$1表示 ( )中的内容
       }
    location /images/ {
    try_files $uri /images/default.gif;
    }

    location = /images/default.gif {
    expires 30s;
    }
 网络连接相关的设置
    1.keepalive_timeout time;
        保持连接的超时时长,默认为75s;0表示禁止连接;
    2.keepalive_requests n;
        在一次长连接上允许承载的最大请求数,默认100;
    3.keepalive_disable [msie6|safari |none]
        对指定的浏览器禁用长连接
    4.tcp_nodelay on|off
        对keepalive模式下的链接是否使用TCP_NODELAY选项;(关闭TCP延迟响应)
    5.client_header_timeout time
        读取http请求首部的超时时长
    6.client_body_timeout time
        读取http请求包体的超时时间
    7.send_timeout #;
        发送响应的超时时长,默认60s;
   8.压缩:
 
        gzip
          gzip on|off
          gzip_buffer 使用的缓存大小
          gzip_comp_level 压缩的级别
          gzip_disable 不压缩的类型或浏览器
          gzip_min_length 最少压缩的大小
          gzip_http_version 压缩完成以后发送http的版本
          gzip_types:只压缩的格式

对客户端请求的限制:

   1.client_max_body_size size; 
 
         http请求包体的最大值,常用于限定客户端所能够请求的最大包体,根据请求首部中的Content-Length来检查,以避免无用的传输
        client_body_buffer_size size;默认16k
    客户请求报文body的缓冲区大小,超出默认则移存于磁盘上;
        client_body_temp_path path [level1 [level2 [level3]]];
    设定存储客户端请求body的临时存储路径以及子目录结构数量和数量
 
   2.limit_except method ...{ ... };
        设置禁止的方法,只能用于location中
     控制1网段除get外的其他方法都可用。   
  limit_except GET {
    allow 192.168.1.0/32;
    deny  all;
  }
    3. limit_rate speed;
         限制客户端每秒传输的字节数,默认为0,表示没有限制
    4.limit_rate_after time;
        nginx向客户端发送响应报文时,如果时长超过了此处指定的时长,则后续的发送过程开始限速;
 

文件操作的优化

    1. sendfile on|off
         直接从内存空间读取,速度加快
       tcp_nopush on | off  ,默认off(推荐)
        是否启用TCP_NOPUSH(freebsd)或TCP_CORK(Linux)选项;仅在启用sendfile为On时有用;
    2. aio on|off ;异步IO模式。
        是否启用aio功能
    4. directio size |off ; 默认关闭。
    5. open_file_cache max=N [inactive=time]|off
        是否打开文件缓存功能
        max:缓存条目的最大值,当满了以后将根据LRU(最近最少连接数)算法进行置换
        inactive:某缓存条目在指定时长内没有被访问过时,将自动被删除;默认为60s
        缓存的信息包括
            (1)文件句柄、文件大小和上次修改时间
            (2)已经打开的目录结构:
            (3)没有找到或没有访问权限的信息;由6开启。
    6. open_file_cache_errors on|off
        是否缓存文件找不到或没有权限访问等相关信息
    7. open_file_cache_valid time
        多长时间检查一次缓存中的条目是否超出非活动时长,默认为60s;
    8. open_file_cache_min_use #;
        在inactive指定的时长内被访问超过此处指定的次数时,才不会被删除;
     9. autoindex on  | off ; 
    是否开启目录浏览,多拥有下载页面。一般定义在location中。
 
 

对客户端请求的特殊处理

    1.ignore_invalid_headers on|off ;只能用于server和http
        是否忽略不合法的http首部,默认为on,off意味着请求首部中出现不合规的首部将拒绝响应
    2.log_not_found on|off  TSL(http server location)
        用户访问的文件不存在时,是否将其记录到错误日志中
    3.resolver address ;
         指定nginx使用的dns服务器地址
     4.resolver_timeout times;
         指定DNS解析超时时长,默认为30s
     5.server_tokens on|off   TSL
         是否在错误页面中显示nginx的版本号 
    6. auth_basic  string;
        auth_basic_user_file  FILE; 用户认证的帐号文件
       # htpasswd -c /etc/nginx/conf/nginx.passwd username  //使用http-tool工具创建密文密码
            格式:
                name:passwd
            密码格式
                (1)encrypted with the crypt() function;
                (2)md5;
    7. satisfy  all | any ;
    如果在一个字段中同时使用了Access模块和Auth Basic模块的指令,可以使用这个指令确定一种验证方式:

    all - 必须同时匹配Access和Auth Basic中指令指定的权限。 
    any - 具有Access 或 Auth Basic指令任一权限即可通过匹配 

    location / {
      satisfy any;
      allow 192.168.1.0/32;
      deny all;
      auth_basic "closed site";
      auth_basic_user_file conf/htpasswd;
    }

    8.    log_format  name  string ……;
        定义日志格式和名称;日志格式一般通过调用变量来定义; 
 
    9.  access_log path [format [buffer=size [flush=time]] [if=condition]];
    access_log path format gzip[=level] [buffer=size] [flush=time] [if=condition];
    access_log syslog:server=address[,parameter=value] [format [if=condition]];
    access_log off;
        访问日志路径,格式名称以及缓存大小和刷写时间间隔;建议定义buffer提示性能;
 
      10. open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
     open_log_file_cache off;  
 
      11. stub_status 
        location /basic_status {
        stub_status on;
        allow x.x.x.0/16;
        deny all;
        }
        Active connections : 当前活动的客户端连接数;
    accepts  :已接受的客户端连接总数量;
        handled  :已经处理过的客户端连接总数量;
    requests  :客户端总的请求数量;
    Reading   :正在读取的客户端请求的数量;
    Writing    :正在向其发送响应报文的连接数量;
    Waiting    :当前等待请求的空闲连接数量;
 
     12   防盗链 ngx_http_referer_module (基于请求报文中的referer首部的值做访问控制)
 
   (1)定义和规定有效引用
        valid_referers none |blocked |server_names|string ...
    (2)判断不合规的引用
    location ~* .(jpg|png|gif|jpeg)$ {
        root /www;
        valid_referers none blocked *.tshare365.com *.woodman.com ;
 
        if ($invalid_referer) {
      #    return 403;
            rewrite http://www.woodman.com/403.html;
        }
     }
    none:请求报文不存在referer首部;
    blocked:请求报文中存在referer首部,但其没有有效值。
    server_names:值为主机名
        arbitrary string:直接字符串,可以使用 * 通配
        regular expression:以~起始的正则表达式;
        内置变量:$invalid_referer (所有不能符合valid_referers指定定义的引用请求均为不合法)
 13.URL rewrite

http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

 
        rewrite regex replacement [flag];
 
        location / {
            root /www;
            rewrite ^/imgages/(.*)$ /imgs/$1 last;
            rewrite ^/imgs/(.*)$  /images/$1 break;
        }
http://www.b.org./images/a.jpg --> http://www.b.org/imgs/a.jpg
        flag:标志位
             last:一旦被当前规则匹配并重写后立即停止检查后续的其他rewrite的规则,而后通过重写后的规则重新发起请求
             break:一旦被当前规则匹配并重写后立即停止检查后续的其他rewrite的规则,而后继续由nginx进行后续的操作
             redirect:返回302临时重定向代码
             permanent:返回301永久重定向
 
        nginx最多循环10次,超出之后返回500错误
            括号不需要转移
        注意:一般将rewrite写在location中时都使用break标志,或者将rewrite写在if上下文中
 
        rewrite_log on|off
            是否将重写过程记录在错误日志中,默认为notice级别;默认为off;
 
        return code:
            用于结束rewrite规则,并且为客户返回状态码:可以使用的状态码有204,400,402-406,500-504等
        if (condition) {
  return code;
        }
            用于检测条件是否成立

http核心模块的内置变量

    $uri:当前请求的uri,不带参数
    $request_uri:请求的uri,带完整参数
    $host:http请求报文中host首部;如果请求中没有host首部,则以处理此请求的虚拟主机的主机名代替
    $hostname:nginx服务运行所在主机的主机名
    $remote_addr:客户端IP
    $remote_port::客户端port
    $remote_user:使用用户认证时客户端用户输入的用户名
    $request_filename:用户请求中的URI经过本地root或alias转换后映射的本地的文件路径
    $request_method:请求方法
    $server_addr:服务器地址
    $server_name: 服务器名称
    $server_port:服务器端口
    $server_protocol:服务器向客户端发送响应时的协议,如http/1.1,http/1.0
    $scheme:在请求中使用的scheme 映射协议本身的协议。 如https://www.tshare365.com中的https;
    $http_HEADER:匹配请求报文中指定的HEADER,$http_host匹配请求报文中的host首部
    $sent_http_HEADER:匹配响应报文中指定的HERDER,例如$http_content_type匹配相应报文中的content-type首部
    $document_root:当前请求映射到的root配置
    $status : 引用状态码
原文地址:https://www.cnblogs.com/woodman/p/6200634.html