代理通常用来在多个后端服务器进行
负载均衡,或者通过HTTP等协议进行请求转发。
-
传递请求到后端服务器
当NGINX代理一个请求时,会将请求转发到特定的后端服务器,然后获取到响应,将其返回给客户端。
该请求可能被转发到HTTP服务器(另一个NGINX服务器或其他服务器)或者使用特定协议的非HTTP服务器(由特定框架开发的
,如PHP,Python等)。支持的协议包括
FastCGI ,
uwsgi,
SCGI,
memcached。
-
为了转发请求到后端服务器, proxy_pass指令需要定义在location块内,如
-
若客户端访问/some/path/page.html,
将被代理到http://www.example.com/link/page.html
-
为了将请求转发到一个非HTTP后端服务器,需要用到
**_pass directive* 指令
1. fastcig_pass传递请求到FastCGI服务器。
2. uwsgi_pass传递请求到uwsgi服务器。
3. scgi_pass传递SCGI服务器。
4. memcached_pass传递请求到memcached服务器。
-
传递请求头
默认,NGINX会重新定义请求头中的两个字段
Host和
Connection,
并且忽略空字符串的字段。Host被设置为$proxy_host,
Connection被设置为关闭的。
-
我们可以通过指令proxy_set_header设置请求头,
该指令可以用在http, server, location块中。如
- 如果你想阻止某个请求头传递给后端服务器,可以将其设置为空字符串。
-
配置缓冲区
默认,NGINX会为后端服务器的响应提供缓冲区。一个响应被存放在内部缓冲区中,
直到整个响应被接收到,然后发送给客户端。缓冲区
针对一些慢客户端(如果响应被NGINX同步地返回,将浪费后端服务器的时间)可以提高性能。然而,
如果NGINX开启了缓冲区,将使得后端服务器快速地处理响应,而当客户端需要下载它们时,NGINX会存储
响应尽可能久的时间。
-
我们可以使用proxy_buffers
来为每一个请求设置缓冲区的大小和数量。响应的第一部分被存在单独的缓冲区内,其大小通过
proxy_buffer_size指令设置
这部分通常包含一些比较小的响应头,并且比剩下的响应缓冲区更小。如
-
如果缓冲区禁用了,当NGINX接收到后端服务器的响应时,会同步地发送给客户端。
这种情况可能在一些快速客户端交互(需要尽可能快接收响应)中会使用。
如果你想使某个location禁用缓冲区,可以使用proxy_buffering off指令。