https://www.cnblogs.com/woodman/p/6200634.html

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;

    http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files

        自左向右尝试读取有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 : 引用状态码

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐