• 详细解释:nginx中ChsHttpProxyModule模块各项配置及其含义


    最近写了很多,查了很多的资料,总怕出错误导了对nginx有学习兴趣的同学,有什么问题,还请大家指正,本人会在第一时间修改。

    Redirected from NginxChsHttpProxyModule

    此模块能代理请求到其它服务器.

    这是 HTTP/1.0 版本的代理,暂时无法保持 keep-alive 的请求.(因此,到后端的链接每次请求都会创建和关闭)

    Nginx 和浏览器使用 HTTP/1.1 进行对话,而跟后台服务器使用 HTTP/1.0,所以它能处理浏览器keep-alive的请求

    Example:

    location / {
      proxy_pass        http://localhost:8000;
      proxy_set_header  X-Real-IP  $remote_addr;
    }
    注意一点,当使用HTTP PROXY 模块时(或者甚至是使用FastCGI时),用户的整个请求会在nginx中缓冲直至传送给后端被代理的服务器.因此,上传进度的测算就会运作得不正确,如果它们通过测算后端服务器收到的数据来工作的话

    指令:

    proxy_buffer_size
    syntax: proxy_buffer_size the_size

    default: proxy_buffer_size 4k/8k

    context: http, server, location

    该指令设置缓冲区大小,从代理后端服务器取得的第一部分的响应内容,会放到这里.

    小的响应header通常位于这部分响应内容里边.

    默认来说,该缓冲区大小等于指令 proxy_buffers所设置的;但是,你可以把它设置得更小.

    proxy_buffering
    syntax: proxy_buffering on|off

    default: proxy_buffering on

    context: http, server, location

    该指令开启从后端被代理服务器的响应内容缓冲.

    如果缓冲区开启,nginx假定被代理的后端服务器会以最快速度响应,并把内容保存在由指令proxy_buffer_size 和 proxy_buffers指定的缓冲区里边.

    如果响应内容无法放在内存里边,那么部分内容会被写到磁盘上.

    如果缓冲区被关闭了,那么响应内容会按照获取内容的多少立刻同步传送到客户端

    nginx不尝试计算被代理服务器整个响应内容的大小,nginx能从服务器接受的最大数据,是由指令proxy_buffer_size指定的.

    对于基于长轮询(long-polling)的Comet 应用来说,关闭 proxy_buffering 是重要的,不然异步响应将被缓存导致Comet无法工作

    proxy_buffers
    语法: proxy_buffers the_number is_size;

    默认值: proxy_buffers 8 4k/8k;

    上下文: http, server, location

    该指令设置缓冲区的大小和数量,从被代理的后端服务器取得的响应内容,会放置到这里. 默认情况下,一个缓冲区的大小等于内存页面大小,可能是4K也可能是8K,这取决于平台

    proxy_busy_buffers_size
    语法: proxy_busy_buffers_size size;

    默认值: proxy_busy_buffers_size proxy_buffer_size * 2;

    上下文: http, server, location, if

    TODO: Description.

    proxy_cache
    syntax: proxy_cache zone_name;

    default: None

    context: http, server, location 该指令设置缓存区的名字,一个缓存区能用在不同的位置.

    0.7.48版本开始遵从后端服务器的 "Expires", "Cache-Control: no-cache", and "Cache-Control: max-age=XXX" 响应header 0.7.66版本开始遵从"private" 和 "no-store" 响应header nginx 缓存不处理 "Vary" headers.

    为保证私人信息不会无意中被缓存并发给所有用户,后端服务器可以设置 "no-cache" 或者 "max-age=0",或者proxy_cache_key中必须包含用户识别信息(比如$cookie_xxx).但是,在proxy_cache_key中使用cookie会降低公共缓存对象的命中率,所以不同的location使用不同的 proxy_cache_key值,在区分私人和公共缓存对象时是必要的

    缓存取决于 proxy buffers,如果proxy_buffers 设为off,将无法使用proxy_cache.

    proxy_cache_key
    syntax: proxy_cache_key line;

    default: $scheme$proxy_host$request_uri;

    context: http, server, location 该指令指定了将包含缓存的哪些信息,比如

      proxy_cache_key "$host$request_uri$cookie_user";
    注意在默认的情况下,hostname将不包含在cache key里边,如果你的站点使用不同的location服务子域名,你需要包含hostname 比如,修改cache key形如:

      proxy_cache_key "$scheme$host$request_uri";
    proxy_cache_path
    syntax: proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size];

    default: None

    context: http 该指令设置缓存的路径和其他缓存参数.缓存的数据保存在文件里边.缓冲中的key 是代理 URL的MD5值,它与文件名对应 Levels 设置了子目录的个数,比如:

      proxy_cache_path  /data/nginx/cache  levels=1:2   keys_zone=one:10m;
    文件名行如: /data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c

    你能使用1和2的任何组合来表示level的格式:X, X:X, or X:X:X e.g.: "2", "2:2", "1:1:2".最多3层

    所有active的key和元数据都保存在共享内存中-缓存区域(zone),在keys_zone中定义该缓存区域的名字和大小.

    注意:每个定义的ZONE都需要有唯一的路径,比如:

    proxy_cache_path  /data/nginx/cache/one    levels=1      keys_zone=one:10m;
    proxy_cache_path  /data/nginx/cache/two    levels=2:2    keys_zone=two:100m;
    proxy_cache_path  /data/nginx/cache/three  levels=1:1:2  keys_zone=three:1000m;
    如果缓存中的数据在inactive中定义的时间内没有被访问,将被删除.默认设置inactive是10分钟

    特殊进程"cache manager"控制了磁盘缓存的大小,该参数在max_size定义,当超出大小后最少使用的数据将被删除

    ZONE必须根据页面的多少来设置合适的大小.一个页面(文件)的元数据大小取决于操作系统,当前 FreeBSD/i386 是64 bytes, FreeBSD/amd64是128 bytes 当ZONE满了以后,key将按照LRU算法来替换

    proxy_cache_path 和 proxy_temp_path 位于相同的文件系统(same filesyetem,not mount piont).

    proxy_cache_methods
    syntax: proxy_cache_methods [GET HEAD POST];

    default: proxy_cache_methods GET HEAD;

    context: http, server, location

    GET/HEAD is syntax sugar,你无法通过如下设置来禁用GET/HEAD请求

    proxy_cache_methods POST;
    proxy_cache_min_uses
    syntax: proxy_cache_min_uses the_number;

    default: proxy_cache_min_uses 1;

    context: http, server, location

    请求的最小次数,超过这个次数后端响应才将被缓存起来


    proxy_cache_valid
    syntax: proxy_cache_valid reply_code [reply_code ...] time;

    default: None

    context: http, server, location 该指令设置不同响应的缓存时间,例如:

      proxy_cache_valid  200 302  10m;
      proxy_cache_valid  404      1m;
    为200和302响应设置10分钟的缓存时间,404为1分钟

    如果仅设置有效时间

      proxy_cache_valid 5m;
    那么只有200 301 302响应会被缓存

    当然,你能使用参数"any"来设置缓存所有的响应

      proxy_cache_valid  200 302 10m;
      proxy_cache_valid  301 1h;
      proxy_cache_valid  any 1m;
    Note: you must set this option for any persistent caching to occur.

    proxy_cache_use_stale
    syntax: proxy_cache_use_stale [error|timeout|updating|invalid_header|http_500|http_502|http_503|http_504|http_404|off] [...];

    default: proxy_cache_use_stale off;

    context: http, server, location

    该指令告诉nginx什么时候提供旧的缓存.该指令的参数类似于proxy_next_upstream和'updating结合'的情况

    你能设置'updating'参数来防止cache stampedes (当多个进程尝试同时更新同一个缓存)的情况.这将使同一个缓存只有一个进程能更新.

    proxy_connect_timeout
    语法: proxy_connect_timeout timeout_in_seconds

    上下文: http, server, location 该参数定义了跟代理服务器连接的超时时间,必须留意这个time out时间不能超过75秒. 这并不是服务器开始返回页面的时间(这是proxy_read_timeout的定义).如果upstream服务器在线,但是挂死(比如,它暂时没有足够的进程去处理你的请求,先放在连接池里边等待处理),这时这个参数无法帮助你,因为跟服务器的连接已经建立了.

    proxy_headers_hash_bucket_size
    语法: proxy_headers_hash_bucket_size size;

    默认值: proxy_headers_hash_bucket_size 64;

    上下文: http, server, location, if

    This directive sets the bucket size of the hashtable.
    这取决于你header名称的长度,如果你的header名称超过64个字符,请增加该参数

    原文官网:http://wiki.nginx.org/NginxChsHttpProxyModule

  • 相关阅读:
    vue 基础补充
    正则
    vue 指令
    函数式编程FP 初探
    .? ?? es2020
    vue alfont scss
    网络安全靶场通关指南
    Java 程序设计——站内短信系统
    Java 程序设计——登录系统
    动态规划法解找零钱问题
  • 原文地址:https://www.cnblogs.com/jessonlv/p/4388065.html
Copyright © 2020-2023  润新知