zoukankan      html  css  js  c++  java
  • 详细解释: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

  • 相关阅读:
    bzoj 1176 cdq分治套树状数组
    Codeforces 669E cdq分治
    Codeforces 1101D 点分治
    Codeforces 1100E 拓扑排序
    Codeforces 1188D Make Equal DP
    Codeforces 1188A 构造
    Codeforces 1188B 式子转化
    Codeforces 1188C DP 鸽巢原理
    Codeforces 1179D 树形DP 斜率优化
    git commit -m "XX"报错 pre -commit hook failed (add --no-verify to bypass)问题
  • 原文地址:https://www.cnblogs.com/jessonlv/p/4388065.html
Copyright © 2011-2022 走看看