• nginx 反向代理之 proxy_buffering


    proxy_buffering主要是实现被代理服务器的数据和客户端的请求异步。

    为了方便理解,我们定义三个角色,A为客户端,B为代理服务器,C为被代理服务器。

    当proxy_buffering开启,A发起请求到B,B再到C,C反馈的数据先到B的buffer上,然后B会根据proxy_busy_buffer_size来决定什么时候开始把数据传输给A。

    在此过程中,如果所有的buffer被写满,数据将会写入到temp_file中。

    相反,如果proxy_buffering关闭,C反馈的数据实时地通过B传输给A。

    以下配置,都是针对每一个http请求的:

    1. proxy_buffering  on;
    该参数设置是否开启proxy的buffer功能,参数的值为on或者off。
    如果这个设置为off,那么proxy_buffers和proxy_busy_buffers_size这两个指令将会失效。 
    但是无论proxy_buffering是否开启,proxy_buffer_size都是生效的
    
    2. proxy_buffer_size  4k;
    该参数用来设置一个特殊的buffer大小的。
    从被代理服务器(C)上获取到的第一部分响应数据内容到代理服务器(B)上,通常是header,就存到了这个buffer中。 
    如果该参数设置太小,会出现502错误码,这是因为这部分buffer不够存储header信息。建议设置为4k。
    
    3. proxy_buffers  8  4k;
    这个参数设置存储被代理服务器上的数据所占用的buffer的个数和每个buffer的大小。
    所有buffer的大小为这两个数字的乘积。
    
    4. proxy_busy_buffer_size 16k;
    在所有的buffer里,我们需要规定一部分buffer把自己存的数据传给A,这部分buffer就叫做busy_buffer。
    proxy_busy_buffer_size参数用来设置处于busy状态的buffer有多大。
    
    对于B上buffer里的数据何时传输给A,我个人的理解是这样的:
    1)如果完整数据大小小于busy_buffer大小,当数据传输完成后,马上传给A;
    2)如果完整数据大小不少于busy_buffer大小,则装满busy_buffer后,马上传给A;
    
    5. proxy_temp_path
    语法:proxy_temp_path  path [level1 level2 level3]
    定义proxy的临时文件存在目录以及目录的层级。
    
    例:proxy_temp_path /usr/local/nginx/proxy_temp 1 2;
    其中/usr/local/nginx/proxy_temp为临时文件所在目录,1表示层级1的目录名为1个数字(0-9),2表示层级2目录名为2个数字(00-99)
    
    6. proxy_max_temp_file_size
    设置临时文件的总大小,例如 proxy_max_temp_file_size 100M;
    
    7. proxy_temp_file_wirte_size
    设置同时写入临时文件的数据量的总大小。通常设置为8k或者16k。

    配置示例:

    server
    {
        listen 80;
        server_name www.aminglinux.com;
        proxy_buffering on;
        proxy_buffer_size 4k;
        proxy_buffers 2 4k;
        proxy_busy_buffers_size 4k;
        proxy_temp_path /tmp/nginx_proxy_tmp 1 2;
        proxy_max_temp_file_size 20M;
        proxy_temp_file_write_size 8k;
        
        location /
        {
            proxy_pass      http://192.168.10.110:8080/;
            proxy_set_header Host   $host;
            proxy_set_header X-Real-IP      $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
  • 相关阅读:
    工作中遇到新知识应该怎么办
    Java中的集合
    JSTL学习(二)自定义标签库
    别跟我扯依赖注入
    经典算法的分析
    Debian
    C 底层细节【转】
    C文件操作 【转】
    利用strstr和sscanf解析GPS信息
    算法学习建议 ACM()转
  • 原文地址:https://www.cnblogs.com/yyxianren/p/10831673.html
Copyright © 2020-2023  润新知