• NGINX学习(四)--nginx的http模块


    一、简介

    本文将介绍http各个模块及常用的路径配置。

    二、http模块总览

    http模块从外到内有http块、server块、location块,同时各个模块有各自的属性元素。

    http块:即一个http处理模块,可进行http的相关参数配置,内可以包含多个server块;

    server块:即是一个虚拟主机,需配置域名和端口,也只处理对应主机域名的http请求,内可包含多个location块;

    location块:对应具体的路径请求(http请求)。

    总体示意图如下:

    http{
    server{
    location {

    }
    location {

    }
    }

    server{
    location {

    }
    location {

    }
    }
    }
    三、http块常用配置

    1、upstream

    定义上游服务器集群,在反向代理中proxy_pass使用,用于负载均衡。如:

    upstream backend{
    ip_hash;
    server 192.168.0.1;
    server 192.168.0.2:8080;
    server 192.168.0.3 max_fails=5 fail_timeout=30s;
    server 192.168.0.4 down;
    }
    server {
    location /{
    proxy_pass http://backend;
    }
    }
    当希望某一请求固定到指定上游服务器上,可以在upstream块中加ip_hash关键字。

    注意upstream块内的server使用:

    a)后可以是域名、ip地址或加端口;

    b)当某server不使用时,则在后加 down 关键字;

    c)若希望某一服务器处理更多请求,则可以在后加权重 weight ,如weight=10,默认值为1(不能与ip_hash同时使用);

    d)配置在指定时间内失败多少次,上器服务器不可用,可用配置fail_timeout(失败时间,默认为10秒),max_fails(失败次数,

    默认为1,若为0,则不检查失败)。

    四、server块常用配置

    1、listen 

    监听的端口,后可加ip地址、端口或主机名,如

    listen 8080

    listen 127.0.0.1:8080

    listen *:8080

    注意:不加端口时,默认监听80端口。

    2、server_name 主机名称

    server_name用于与http请求header头部的Host匹配。

    注意:后可跟多个主机名,主机名也可使用通匹符,如*.test.com。

    五、location块常用配置

    1、路径配置(符号有:=、~、~*、^~、@,模式为:location 符号 /uri),具体使用如下:

    =:表示完全匹配,不存在正则表示,如 location = /uri {.....}

    ~:表示匹配时,大小写敏感的,如 location ~ /uri {.....} 

    ~*:表示匹配时,大小写不敏感,即忽略大小写问题,如 location ~* /uri {......},这时/uri,/Uri, /URI都可以匹配上。

    ^~:表示匹配时,只需开头部分匹配上即可,如 location ^~ /uri/ {....}  ,这时只要以/uri/开头的地址都会匹配上。

    @:表示nginx内部的重定向,不直接处理用户的请求,如 location @error {.....} , 这时可以另一个location内部,

    重定向到@error路径,如  location ~ /test {error_page 404  @error}。

    1> “=”前缀的指令严格匹配这个查询。如果找到,停止搜索。
    2> 所有剩下的常规字符串,匹配最精确的(一般最长的那个)。如果这个匹配使用^〜前缀,搜索停止。
    3> 正则表达式,在配置文件中是从上往下匹配的
    4> 如果第3条规则产生匹配的话,结果被使用。否则,第2条规则被使用
    特殊情况:
    两种情况下,不需要继续匹配正则 location :
    ( 1 ) 当普通 location 前面指定了“ ^~ ”,特别告诉 Nginx 本条普 通 location 一旦匹配上,则不需要继续正则匹配。
    ( 2 ) 当普通location 恰好严格匹配上 ,不是最大前缀匹配,则不再继续匹配正则

    2、限制请求的方法 limit_except method {......}  

    limit_except后跟不允许的方法,括号为可限制ip,同时注意请求方法的包含原则,如限制了GET方法,则同时也就限制

    了HEAD方法。如

    limit_except GET {
    allow 192.168.0.1/32;
    deny all;
    }
    即禁止除192.168.0.1地址外的,方法为GET或HEAD的请求

    3、配置转发的方法proxy_method,如:

    location ~ /test{
    proxy_method=POST;
    }
    表示不管请求是什么方法,转发后的方法为POST。

    4、配置转发路径proxy_pass,如:

    location ~ /test{
    proxy_pass https://192.168.0.5:8080;
    }
    location ~ /test1{
    proxy_pass https://backend;
    }
    注意:转发时,默认不会带上原求的Host头部,若想带上,则需加上配置 proxy_set_header Host $host;

    六、http块、server块都可使用的配置

    1、配置请求头header(包括请求行和请求头部)的内存buffer大小 client_header_buffer_size

    默认为client_header_buffer_size 1k ,即1k大小。当超过时,由下面的超大请求内存 large_client_header_buffers

    来决定是否抛错。

    2、配置超大请求header的内存buffer大小  large_client_header_buffers

    后跟buffer的个数和每个buffer的大小,默认为large_client_header_buffers 4 8k,即4个buffer,每个buffer为8k。

    当请求行(即是协议+方法+地址)大于单个buffer大小时,则返回414(requst uri too large),

    当请求中的单个header大于了单个buffer大小,则返回400(bad request)。

    请求行+请求头部 超过 buffer个数*单个buffer大小也会出错的。

    七、http块、server块、location块都可使用的配置

    1、限制请求体大小  client_max_body_size ,如
    client_max_body_size 10m;  即限制请求体最大为10m,默认值为1m。超过则发送403( reques entity to large)响应。

    2、配置首页  index 

    当路径为/时,通常会返回首页,默认为index.html页面,如:

    location / {
    root path;
    index /index1.html /index2.html /index3.html;
    }
    注意:index后可跟多个地址,返回时,则返回第一个可访问的首页。示例中,则返回地址为path/index1.html。

    3、根据http返回码重定向页面 error_page

    error_page后跟返回码和重定向地址,如:

    server {
    error_page 404 /404.html;
    error_page 400 = 200 /404.html;
    error_page 403 = /404.html;
    error_page 405 406 /404.html;
    location = /404.html {
    proxy_pass http://192.168.0.1/404.html;
    }
    }
    注意:

    a)error_page可跟多个返回码;

    b)虽然重定向了,但返回码到客户端是不变的。不过,可以通过=来改,=后接新的返回码,

    后也可以不跟返回码,让重定向后的请求决定。

    4、读取请求头部超时时间 client_header_timeout  (默认单位为秒)

    默认为client_header_timeout 60,即读取头部超时时间为60秒,超时由返回408(request time out)。

    5、读取请求体超时时间 client_body_timeout (默认单位为秒)

    默认为client_body_timeout 60,即读取请求体超时时间为60秒。

    6、发送响应超时时间  send_timeout  (默认单位为秒)

    默认为send_timeout 60,即发送超时时间为60秒。

    7、长连接时间  keepalive_timeout (默认单位为秒)

    默认为 keepalive_timeout 75

    8、一个长连接的最大请求数 keepalive_requests 

    默认为 keepalive_requests 100 ,即一个连接上最多可发送100次请求

    9、设置DNS解析地址  resolver,后地址,可多个,如:

    resolver 192.168.0.1 192.168.0.2

    原文链接:https://blog.csdn.net/chinabestchina/article/details/80993086

    个人理解,如有错误,欢迎指正!
  • 相关阅读:
    子线程导致 Windows 服务停止的情况(Topshelf 结合 Quartz.NET)
    ASP.NET Web API 2 使用 DelegatingHandler(委托处理程序)实现签名认证
    ASP.NET Web API 2 使用 AuthorizationFilter(授权过滤器)实现 Basic 认证
    聚合函数查询语句
    SQL SERVER数据库常用命令
    Easyui-datebox日期控件增加清空按钮
    用sql语句查出来字段里包含某个字符串的所有记录
    String 转化成java.sql.Date和java.sql.Time(转载)
    常见的 HTML 事件
    JavaScript 变量中给数值加引号的问题
  • 原文地址:https://www.cnblogs.com/gllegolas/p/11724626.html
Copyright © 2020-2023  润新知