摘要:代理通常用于在多个服务器之间分发负载、无缝从不同网站显示内容或基于HTTP之外的协议传递请求处理应用服务器。
代理通常用于在多个服务器之间分发负载、无缝从不同网站显示内容或基于HTTP之外的协议传递请求处理应用服务器。
2 传递请求给代理服务器当NGINX代理一个请求时,发送请求给指定代理服务器,获取响应,返回给客户端。可以代理请求给HTTP服务器(另一个NGINX服务器或任意其它服务器)或使用特定协议的非HTTP服务器(运行使用特定框架开发的应用,例如,PHP或Python)。支持协议包括,FastCGI、uwsgi、SCGI和memcached。
为了传递请求给HTTP代理服务器,在location指令中指定proxy_pass指令,例如:
location /some/path/ { proxy_pass http://www.example.com/link/; }
该示例配置导致传入该location处理的所有请求传递到指定地址的代理服务器。地址可以使用域名或IP地址指定。地址可以包括端口:
location ~ .php { proxy_pass http://127.0.0.1:8000; }
注意,上面的第一个例子,代理服务器的地址后面是一个URI /link/。如果URI和地址一起指定,替换请求匹配location参数的URI。例如,请求/some/path/page.html被代理到http://www.example.com/link/page.html。如果地址没有指定URI,或不能决定URI替换的部分,传入完整URI。
为了传递请求到一个非HTTP代理服务器,应该使用适当的**_pass指令:
fastcgi_pass:传递请求到FastCGI服务器。 uwsgi_pass:传递请求到uwsgi服务器。 scgi_pass:传递请求到SCGI服务器。 memcached:传递请求到memcached服务器。注意,在这些情况下,指定地址可能有不同规则。可能也需要传递额外参数给服务器。
proxy_pass指令也可以指向已命名的服务器组。在这种情况下,请求在组中的服务器之间分发。
3 传递请求头默认,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; } 4 配置缓存
默认,NGINX缓存代理服务器的响应。响应存储在内部缓存,直到响应完全接收才会发送到客户端。缓存有助于优化慢客户端性能,如果响应传入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; }
如果缓存禁用,当NGINX从代理服务器接收响应时同步发送到客户端。该行为可能适合需要快速交互的客户端。
为了禁用特定location的缓存,在location中设置proxy_buffering指令为off参数:
location /some/path/ { proxy_buffering off; proxy_pass http://localhost:8000; }
在这种情况下,NGINX只使用proxy_buffer_size配置的缓存存储响应的当前部分。
5 选择出站IP地址如果代理服务器有多个网络接口,有时可能需要选择特定源IP地址连接到代理服务器或上游。如果代理服务器配置在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