Nginx 的正向代理

内网客户机通过代理访问互联网。通常要设置代理服务器地址和端口。

squid服务程序

nginx外网无法访问Windows nginx 内外网_客户端

Nginx的反向代理

外网用户通过代理访问内网服务器。内网服务器无感知。

nginx外网无法访问Windows nginx 内外网_服务器_02

nginx反向代理所使用的模块----ngx_http_proxy_module

使用语法:

代理
Syntax: 	    proxy_pass URL;						代理的后端服务器URL
Default: 	—
Context: 	location, if in location, limit_except

缓冲区
Syntax:     proxy_buffering on | off;
Default:    proxy_buffering on;				缓冲开关
Context: 	http, server, location
proxy_buffering开启的情况下,nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端
(边收边传,不是全部接收完再传给客户端)。

Syntax:   	proxy_buffer_size size;
Default: 	proxy_buffer_size 4k|8k;			缓冲区大小
Context: 	http, server, location

Syntax: 	    proxy_buffers number size;
Default: 	proxy_buffers 8 4k|8k;					缓冲区数量
Context: 	http, server, location

Syntax:    	proxy_busy_buffers_size size;
Default: 	proxy_busy_buffers_size 8k|16k;		忙碌的缓冲区大小,控制同时传递给客户端的buffer数量
Context: 	http, server, location

头信息
Syntax: 	    proxy_set_header field value;
Default: 	proxy_set_header Host $proxy_host;				设置真实客户端地址
                proxy_set_header Connection close;
Context: 	http, server, location

超时
Syntax: 	    proxy_connect_timeout time;
Default: 	proxy_connect_timeout 60s;					链接超时
Context: 	http, server, location

Syntax: 	    proxy_read_timeout time;
Default: 	proxy_read_timeout 60s;
Context: 	http, server, location

Syntax: 	    proxy_send_timeout time;nginx进程向fastcgi进程发送request的整个过程的超时时间
Default: 	proxy_send_timeout 60s;
Context: 	http, server, location
buffer 工作原理

1. 所有的proxy buffer参数是作用到每一个请求的。每一个请求会安按照参数的配置获得自己的buffer。proxy buffer不是global而是per request的。

2. proxy_buffering 是为了开启response buffering of the proxied server,开启后proxy_buffers和proxy_busy_buffers_size参数才会起作用。

3. 无论proxy_buffering是否开启,proxy_buffer_size(main buffer)都是工作的,proxy_buffer_size所设置的buffer_size的作用是用来存储upstream端response的header。

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

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