Nginx 反向代理的基本配置及命令解析(以HLS为例子 )

3 篇文章 0 订阅

反向代理的基本配置及命令解析

nginx.conf例子

    location ~* \.ts$ {
            access_log      /data/logs/lmss/hls.log hls_sla;

            content_by_lua_block {
                return ngx.exec("@ts_proxy")
            }

            keepalive_timeout 30;
            keepalive_requests 10000000;

            client_body_buffer_size    512k;
    }

    location @ts_proxy {
            set $cache_key $Host$uri;
            set $balancer_ip "";
            set $source_host $Host;
            set $source_bind "";
            set $param_range "";

             keepalive_timeout 30;
             keepalive_requests 10000000;

             client_body_buffer_size    512k;

             proxy_buffer_size          32k;
             proxy_buffers              4 64k;
             proxy_busy_buffers_size    128k;
             proxy_temp_file_write_size 128k;
             proxy_next_upstream error timeout invalid_header http_500 http_503 http_404 http_502;

             proxy_pass http://hls_upstream;   ## 回源地址
             proxy_bind $source_bind;
             proxy_cache_lock on;
             proxy_cache_lock_timeout 120s;
             proxy_cache $cache_type;
             proxy_cache_key $cache_key;
             proxy_cache_valid  200 304 206 5m;
             proxy_connect_timeout 3s;
             proxy_read_timeout 30s;
             proxy_send_timeout 30s;
             proxy_http_version 1.1;
             proxy_set_header Connection "Keep-Alive";
             proxy_set_header Host $source_host;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

1.proxy_pass

语法: proxy_pass URL;

配置块:: location, if in location, limit_except

  此配置项将当前请求反向代理到URL参数指定的服务器上。协议可以是”http”或”https”。URL可以是主机名或IP地址加端口的形式,例如:

proxy_pass http://localhost:8000/uri/;

  也可以是UNIX句柄:

proxy_pass http://unix:/path/to/backend.socket:/uri/;

  还可以如上节负载均衡中所示,直接使用upstream块,例如:

upstream backend {
    ...
}

server {
  location / {
    proxy_pass  http://backend;
  }
}

  在nginx中配置proxy_pass时:

  • 当在后面的url加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;
  • 如果没有/,则会把匹配的路径部分也给代理走。

下面四种情况分别用http://192.168.1.1/proxy/test.html 进行访问。

示例1:

location  /proxy/ {

    proxy_pass http://127.0.0.1:81/;

}

会被代理到 http://127.0.0.1:81/test.html 这个url

示例2:

location  /proxy/ {

    proxy_pass http://127.0.0.1:81;

}

会被代理到 http://127.0.0.1:81/proxy/test.html 这个url

示例3:

location  /proxy/ {

    proxy_pass http://127.0.0.1:81/ftlynx/;

}

会被代理到 http://127.0.0.1:81/ftlynx/test.html 这个url

示例4:

location  /proxy/ {

    proxy_pass http://127.0.0.1:81/ftlynx;

}

会被代理到 http://127.0.0.1:81/ftlynxtest.html 这个url

2. proxy_bind

语法: proxy_bind address;

配置块:: http, server, location

示例:

proxy_bind 192.168.1.1;

  在调用connect()前将上游socket绑定到一个本地地址,如果主机有多个网络接口或别名,但是你希望代理的连接通过指定的借口或地址,可以使用这个指令。

3. proxy_buffer_size

语法:proxy_buffer_size the_size

默认值:proxy_buffer_size 4k/8k

配置块:http, server, location

  设置从被代理服务器读取的第一部分应答的缓冲区大小。

  通常情况下这部分应答中包含一个小的应答头。

  默认情况下这个值的大小为指令proxy_buffers中指定的一个内存页面的大小,即4K或者8K, 不过可以将其设置为更小。

4. proxy_buffering

语法:proxy_buffering on|off

默认值:proxy_buffering on

配置块:http, server, location

  开启或者关闭缓冲后端的服务器的应答的功能。

  如果开启缓冲,nginx在接收到后端服务器的响应后,会并将其放入缓冲区,用户可以使用proxy_buffer_size和proxy_buffers设置相关的缓冲参数。如果响应无法全部放入内存,nginx会将其写入硬盘的临时文件里面。

  如果禁用缓冲,从后端传来的应答将被立即被传送到客户端。

  如果缓冲区被关闭了,那么响应内容会按照获取内容的多少立刻同步传送到客户端。
nginx不尝试计算被代理服务器整个响应内容的大小,nginx能从服务器接受的最大数据,是由指令proxy_buffer_size指定的。

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

5.proxy_buffers

语法:proxy_buffers the_number is_size;

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

配置块:http, server, location

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

6. proxy_busy_buffers_size

语法:proxy_busy_buffers_size size;

默认值:proxy_busy_buffers_size proxy_buffer_size * 2;

配置块:http, server, location, if

  当开启缓冲响应的功能以后,在没有读到全部响应的情况下,写缓冲到达一定大小时,nginx一定会向客户端发送响应,直到缓冲小于此值。这条指令用来设置此值。
同时,剩余的缓冲区可以用于接收响应,如果需要,一部分内容将缓冲到临时文件。该大小默认是proxy_buffer_size和proxy_buffers指令设置单块缓冲大小的两倍.

  • buffer工作原理:

  首先第一个概念是所有的这些proxy buffer参数是作用到每一个请求的。每一个请求会安按照参数的配置获得自己的buffer。proxy buffer不是global而是per request的。

  proxy_buffering 是为了开启response buffering of the proxied server,开启后proxy_buffers和proxy_busy_buffers_size参数才会起作用。
无论proxy_buffering是否开启,proxy_buffer_size(main buffer)都是工作的,proxy_buffer_size所设置的buffer_size的作用是用来存储upstream端response的header。

  在proxy_buffering开启的情况下,Nginx将会尽可能的读取所有的upstream端传输的数据到buffer,直到proxy_buffers设置的所有buffers被写满或者数据被读取完(EOF)。此时nginx开始向客户端传输数据,会同时传输这一整串buffers。同时如果response的内容很大的话,Nginx会接收并把他们写入到temp_file里去。大小由proxy_\max_temp_file_size控制。如果busy的buffer传输完了会从temp_file里面接着读数据,直到传输完毕。

  一旦proxy_buffers设置的buffer被写入,直到buffer里面的数据被完整的传输完(传输到客户端),这个buffer将会一直处在busy状态,我们不能对这个buffer进行任何别的操作。所有处在busy状态的buffer size加起来不能超过proxy_busy_buffers_size,所以proxy_busy_buffers_size是用来控制同时传输到客户端的buffer数量的,剩余的缓冲区可以用于接收响应

7. proxy_temp_file_write_size

语法: proxy_temp_file_write_size size;

默认值: proxy_temp_file_write_size 8k|16k;

配置块: http, server, location

  在开启缓冲后端服务器响应到临时文件的功能后,设置nginx***每次写数据到临时文件的size(大小)限制*。 size的默认值是proxy_buffer_size指令和proxy_buffers指令定义的每块缓冲区大小的两倍, 而临时文件最大容量由proxy_max_temp_file_size指令设置。

8. proxy_max_temp_file_size

语法: proxy_max_temp_file_size size;

默认值:proxy_max_temp_file_size 1024m;

配置块: http, server, location

  打开响应缓冲以后,如果整个响应不能存放在proxy_buffer_size和proxy_buffers指令设置的缓冲区内,部分响应可以存放在临时文件中。 这条指令可以设置临时文件的最大容量。而每次写入临时文件的数据量则由proxy_temp_file_write_size指令定义。

  将此值设置为0将禁止响应写入临时文件。

9. proxy_next_upstream

语法: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_404 | off …;

默认值: proxy_next_upstream error timeout;

配置块: http, server, location

  指定在何种情况下一个失败的请求应该被发送到下一台后端服务器:

error
和后端服务器建立连接时,或者向后端服务器发送请求时,或者从后端服务器接收响应头时,出现错误;

timeout
和后端服务器建立连接时,或者向后端服务器发送请求时,或者从后端服务器接收响应头时,出现超时;

invalid_header
后端服务器返回空响应或者非法响应头;

http_500
后端服务器返回的响应状态码为500;

http_502
后端服务器返回的响应状态码为502;

http_503
后端服务器返回的响应状态码为503;

http_504
后端服务器返回的响应状态码为504;

http_404
后端服务器返回的响应状态码为404;

off

停止将请求发送给下一台后端服务器。需要理解一点的是,只有在没有向客户端发送任何数据以前,将请求转给下一台后端服务器才是可行的。也就是说,如果在传输响应到客户端时出现错误或者超时,这类错误是不可能恢复的。

参考文章:

http://blog.csdn.net/u010391029/article/details/50850210
http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_proxy_module.html#proxy_max_temp_file_size
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值