zoukankan      html  css  js  c++  java
  • nginx 参数详解

    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 : 引用状态码
     
     
  • 相关阅读:
    关于windows客户端网络编程 WSAAsyncSelect函数
    阻塞模式和非阻塞模式
    SRP6协议分析
    普通二叉树转换成二叉查找树方法
    使用openssl库进行开发
    类型转化,网络开发中常见的类型转化
    到底还能够称多久
    权限子系统小结
    使用ASP.NET AJAX开发服务器端事件通知器
    通用权限相关文档的下载
  • 原文地址:https://www.cnblogs.com/xiao-xue-di/p/12985536.html
Copyright © 2011-2022 走看看