Leech 的个人空间

时间:16-08-04 来源: 作者: 点击:

代理通常用于分发负载给多个服务器,从不同网站无缝显示内容,传递请求给能处理HTTP之外的应

用服务器。

1    传递请求给代理服务器

当Nginx代理请求时,它发送请求给一个特定的代理服务器,获取响应,并返回给客户端。它可以为

HTTP服务器(其它Nginx服务器或任意其它服务器)代理请求或一个使用特殊协议的非HTTP服务器

(可以运行一个使用特定框架开发的应用,例如PHP或Python)。支持协议包括FastCGI、uwsgi、

SCGI和memcached。

为了传递请求给HTTP代理服务器,在location指令中指定proxy_pass指令:

location /some/path/ {

    proxy_pass ;

}

 该例子导致传递该location中的所有请求给指定地址的代理服务器。该地址可以指定为域名或IP

地址。地址也可以包括端口:

location ~ \.php {

    proxy_pass :8000;

}

 

注意,上面的第一个例子,代理服务器的地址后面跟随一个URI /link/。如果指定URI地址,它替

换匹配location参数的请求URI部分。例如,请求URI /some/path/page.html将代理到http:

//www.example.com/link/page.html。如果地址没有指定URI,或不可能决定URI部分替

换,完整URI被传递(可能,修改)。

为了传递一个请求到非HTTP代理服务器,合适的**_pass指令应该被使用:

注意,在这些例子中,指定地址的规则可能有些不同。你也可能需要传递额外参数给服务器。

proxy_pass指令也能指向服务器组的名称。在这种情况下,请求根据指定的方法分发请求给组中

的服务器。

2    传递请求头

默认,Nginx在代理请求中重新定义两个头字段,“Host”和“Connection”,消除头字段的值

为空字符串。“Host”设置为$proxy_host变量,而“Connection”设置为close。

为了改变这些设置,以及修改其它头字段,使用proxy_set_header指令。该指令能指定在

location或更高级别。它也能指定在特定server上下文或http块中。例如:

location /some/path/ {

    proxy_set_header Host $host;

    proxy_set_header X-Real-IP $remote_addr;

    proxy_pass :8000;

}

在该配置中“Host”设置为$host变量。

为了防止头字段传递到代理服务器,设置它为空字符串即可:

location /some/path/ {

    proxy_set_header Accept-Encoding "";

    proxy_pass :8000;

}

 3    配置缓存

默认,Nginx缓存代理服务器的响应。响应被存储在内部缓存中,直到整个响应接收完成才会发

送给客户端。缓存有助于优化缓慢客户端的性能,如果响应从Nginx同步到客户端会浪费代理服

务器的时间。然而,当缓存被启用,Nginx允许代理服务器快速处理响应,当客户端需要下

载,Nginx用尽可能多的时间存储响应。

负责启用和禁用缓存的指令是proxy_buffering。默认设置为on,启用缓存。

proxy_buffers指令控制分配给请求的缓存大小和数量。来自代理服务器响应的第一部分存储在

单独的缓存中,使用proxy_buffer_size指令设置。这通常包含比较小的响应头和能比响应剩下

部分的缓存小。

在下面的例子中,缓存的默认书增加并且响应的第一部分缓存大小比默认值小。

location /some/path/ {

    proxy_buffers 16 4k;

    proxy_buffer_size 2k;

    proxy_pass :8000;

}

 

如果缓存禁用,当从代理服务器接收响应时同步发送给客户端。这种尽快和客户端交互的行为是

可取的。

为了在特定location中禁用缓存,在location中设置proxy_buffering指令为off:

location /some/path/ {

    proxy_buffering off;

    proxy_pass :8000;

}

 在这种情况下,Nginx只使用proxy_buffer_size配置缓存存储响应当前的一部分。

4    选择流出IP地址

如果你的代理服务器有多个网络接口,有时你可能需要选择特定源IP地址链接到代理服务器或

upstream。如果代理服务器在Nginx后面,配置从特定IP网络或IP地址范围接收连接可能是有用

的。

指定proxy_bind指令和必要的网络接口IP地址:

location /app1/ {

    proxy_bind 127.0.0.1;

    proxy_pass ;

}

location /app2/ {

    proxy_bind 127.0.0.2;

    proxy_pass ;

}

IP地址也可以使用变量指定。例如,$server_addr变量传入接收请求的网络接口的IP地址。

location /app3/ {

    proxy_bind $server_addr;

    proxy_pass ;

}

 

声明:本文转载于网络,文章链接:http://www.nd9p.com/5464.html