摘要:代理通常用于分发负载给多个服务器,从不同网站无缝显示内容,传递请求给能处理HTTP之外的应用服务器。
代理通常用于分发负载给多个服务器,从不同网站无缝显示内容,传递请求给能处理HTTP之外的应用服务器。
1 传递请求给代理服务器当Nginx代理请求时,它发送请求给一个特定的代理服务器,获取响应,并返回给客户端。它可以为
HTTP服务器(其它Nginx服务器或任意其它服务器)代理请求或一个使用特殊协议的非HTTP服务器
(可以运行一个使用特定框架开发的应用,例如PHP或Python)。支持协议包括FastCGI、uwsgi、
SCGI和memcached。
为了传递请求给HTTP代理服务器,在location指令中指定proxy_pass指令:
location /some/path/ {
proxy_passhttp://www.example.com/link/;
}
该例子导致传递该location中的所有请求给指定地址的代理服务器。该地址可以指定为域名或IP
地址。地址也可以包括端口:
location ~ .php {
proxy_pass http://127.0.0.1:8000;
}
注意,上面的第一个例子,代理服务器的地址后面跟随一个URI /link/。如果指定URI地址,它替
换匹配location参数的请求URI部分。例如,请求URI /some/path/page.html将代理到http:
//www.example.com/link/page.html。如果地址没有指定URI,或不可能决定URI部分替
换,完整URI被传递(可能,修改)。
为了传递一个请求到非HTTP代理服务器,合适的**_pass指令应该被使用:
fastcgi_pass传递一个请求给FastGGI服务器。
uwsgi_pass传递一个请求给一个uwsgi服务器。
scgi_pass传递一个请求个SCGI服务器。
memcached_pass传递一个请求给memcached服务器。
注意,在这些例子中,指定地址的规则可能有些不同。你也可能需要传递额外参数给服务器。
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 http://localhost:8000;
}
在该配置中“Host”设置为$host变量。
为了防止头字段传递到代理服务器,设置它为空字符串即可:
location /some/path/ {
proxy_set_header Accept-Encoding "";
proxy_pass http://localhost: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 http://localhost:8000;
}
如果缓存禁用,当从代理服务器接收响应时同步发送给客户端。这种尽快和客户端交互的行为是
可取的。
为了在特定location中禁用缓存,在location中设置proxy_buffering指令为off:
location /some/path/ {
proxy_buffering off;
proxy_pass http://localhost: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 http://example.com/app1/;
}
location /app2/ {
proxy_bind 127.0.0.2;
proxy_pass http://example.com/app2/;
}
IP地址也可以使用变量指定。例如,$server_addr变量传入接收请求的网络接口的IP地址。
location /app3/ {
proxy_bind $server_addr;
proxy_pass http://example.com/app3/;
}
相关文章推荐
樱桃cherry.com域名价格或达7位数美元2022-09-06
紫燕食品上市,卤味市场域名哪家强?2022-09-27
新一期域名交易排行榜,国别域名MA.ca成无冕之王2022-09-27
威瑞信发布2022年Q2行业简报:.com注册量下降2022-09-27
域名Keys.xyz被元宇宙游戏终端收购2022-09-20