Nginx基础配置和相关知识

配置使用nginx

    1.nginx虚拟主机
        server{
            listen
            server_name
            root
        }
    2.访问控制access模块
        allow
        deny
        至上而下依次认证,默认为通过
    3.基于用户认证 
        location /admin/ {
            root
            auth_basic "" 标题
            auth_basic_user_file "" 密码的存放位置
        }
        使用htpasswd创建密码
    4.建立下载站点autoindex下载列表
        location /download/{
            root
            autoindex on
        }
    5.防盗链
        (1)定义和规定额引用
        valid_referers none |blocked |server_names|string ...
        (2)判断不合规的引用
        if ($invaild_referer) {
            rewrite ^/.*$ http://www.a.com/403.html
        }
    6.URL rewrite
        rewrite regex replacement [flag];

        location / {
            root
            rewrite ^/imgages/(.*)$ /imgs/$1
        }
        
        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) {

        }
            用于检测条件是否成立
    7.状态页
        location{
            stub-status on
        }

            当下处于活动状态的总数

            接受的总数 已经建立和处理总数 请求的总数
            
            正在接受的并发请求个数,正在读取的个数或发往客户端的 ,长连接中的处于活动状态的值
    8.压缩:
        gzip
          gzip on|off
          gzip_buffer 使用的缓存大小
          gzip_comp_level 压缩的级别
          gzip_disable 不压缩的类型或浏览器
          gzip_min_length 最少压缩的大小
          gzip_http_version 压缩完成以后发送http的版本
          gzip_types:只压缩的格式

网络连接相关的设置

    1.keepalive_timeout time;
        保持连接的超时时长,默认为75s
    2.keepalive_requests n
        在一次长连接上允许承载的最大请求数
    3.keepalive_disable [msie6|safari |none]
        对指定的浏览器禁止使用长连接
    4.tcp_nodelay on|off
        对keepalive连接是否使用tcp_nodelay选项
    5.client_header_timeout time
        读取http请求首部的超时时长
    6.client_body_timeout time
        读取http请求包体的超时时间
    7.save_timeout time
        发送响应的超时时长

对客户端请求的限制:

    1.limit_except method ...{ ... }
        指定范围之外的其他方法的访问控制,只能用于location中
    2.client_max_body_size size
         http请求包体的最大值,常用于限定客户端所能够请求的最大包体,根据请求首部中的Content-Length来检查,以避免无用的传输
    3.limit_rate speed
         限制客户端每秒传输的字节数,默认为0,表示没有限制
    4.limit_rate_after time
        nginx向客户端发送响应报文时,如果时长超过了此处指定的时长,则后续的发送过程开始限速

文件操作的优化

    1.sendfile on|off
        是否启用sendfile功能
    2.aio on|off
        是否启用aio功能
    3.open_file_cache man=N [incative=time]|off
        是否打开文件缓存功能
        max:用于缓存条目的最大值,允许打开的缓存条目最大数,当满两类以后将根据LRU(最小最少连接数)算法进行置换
        inactive:某缓存条目在指定时长内没有被访问过时,将自动被删除;通常默认为60s

        缓存的信息包括:
            文件句柄、文件大小和上次修改时间
            已经打开的目录结构:
            没有找到或没有访问权限的信息
    4.open_file_cache_errors on|off
        是否缓存文件找不到或没有权限访问等相关信息
    5.open_file_cache_valid time
        多长时间检查一次缓存中的条目是否超出非活动时长,默认为60s
    6.open_file_cache_min_use #
        在inactive指定的时长内被访问超过此处指定的次数时,才不会被删除

对客户端请求的特殊处理

    1.ignore_invalid_headers on|off
        是否忽略不合法的http首部,默认为on,off意味着请求首部中出现不合规的首部将拒绝响应,只能用于server和http
    2.log_not_found on|off
        用户访问的文件不存在时,是否将其记录到错误日志中
    3.resolver address:
         指定nginx使用的dns服务器地址
     4.resolve timeout
         指定DNS解析超时时长,默认为30s
     5.server_tokens on|off
         是否在错误页面中显示nginx的版本号

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 映射协议本身的协议
    $http_HEADER:匹配请求报文中指定的HEADER,$http_host匹配请求报文中的host首部
    $sent_http_HEADER:匹配响应报文中指定的HERDER,例如$http_content_type匹配相应报文中的content-type首部
    $document_root:当前请求映射到的root配置

nginx的http web功能

    必须使用虚拟机来配置站点:每个虚拟主机使用一个server{}段来配置
       server{

       }
    非虚拟主机的配置和公共选项,需要定义在server之外,http之内
        http{
            directive value;
            ....

            server{

            }
            server{

            }
            ......
        }

    1.server{}
      定义一个虚拟主机:nginx支持使用基于主机名或IP的虚拟主机
    2.listen
       listen address[:port]
       listen prot
       listen unix:socket

       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) 先做精确匹配
            (2) 左侧通配符匹配
            (3) 右侧通配符匹配
            (4) 正则表达式匹配
    4.server_name_hash_bucket_size 32|64|128
       为了实现快速主机查找,nginx使用hash表来保存主机名
    5.location [ =|~|~*|^~] uri { ... }
      location @name { ... }
        功能:允许根据用户请求的URI来匹配指定的各location以进行访问配置;匹配到时,将被location块中的配置所处理
        =:精确匹配
        ~:正则表达式模式匹配,匹配时区分字符大小写
        ~*:正则表达式模式匹配,匹配时忽略字符大小写
        ^~:只需要前半部分与uri匹配即可,不检查正则表达式

        匹配优先级:
            字符字面量最精确匹配、正则表达式检索(由多个时,由第一个匹配到的所处理),按字符字面量

nginx的特性:

     基本功能:
        实现与服务静态文件(静态资源的web服务器),能缓存打开的文件描述符
        反向代理服务器,缓存、负载均衡、健康状态检测
        支持FastCGI
        模块化机制,非DSO机制,支持多种过滤器gzip,SSI和图像的模块完成图形大小调整等
        支持SSL

    扩展功能:
        基于名称和IP做虚拟主机
        支持keeplive
        支持平滑配置更新或程序版本升级
        定制访问日志,支持使用日志缓存以提高性能
        支持URL rewrite
        支持路径别名
        支持基于IP及用户的认证:
        支持速率限制,并发数限制等

    nginx的基本架构
        一个master 生成一个或多个worker
        事件驱动:kqueue,epoll,/dev/poll
            消息通知:select,poll,rt rignals
        支持sendfile,sendfile64
        文件AIO(异步I/O)
        支持mmap

    nginx:非阻塞、事件驱动,一个master多个worker,一个worker响应多个用户请求
    比cpu的核心进程少一个即可以

nginx的模块类别

    核心模块
    标准http模块
    可选的http模块
    邮件模块
    第三方扩展模块

(并发编程)处理并发用户请求:

        单进程模型:串行方式模式
        多进程模型:prefox,一个进程响应一个用户请求,并发使用多个进程实现
        多线程模型:worker,一个进程生成多个线程,一个线程响应一个用户请求;并发使用多个线程实现:n进程,n*m个线程
        线程(事件)模型:event。一个线程响应多个用户请求,基于事件驱动机制来维持多个用户请求

猜你喜欢

转载自blog.csdn.net/kepengs/article/details/107251607