Nginx反向代理

发布时间:2023-08-31 点击:103
代理通常用于分发负载给多个服务器,从不同网站无缝显示内容,传递请求给能处理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/;
}

使用手机建站系统要注意什么问题?要不要用手机建站?
h5制作网站得多少钱?h5到底是什么?
企业域名邮箱查询方式有哪些?企业邮箱的优势是什么?
做网站空间的时候 多大的空间比较适合
域名一般要多少钱?购买域名一定要注意的问题
嘉兴网站建设公司分析快速建设网站的方法
过期域名抢注查询方法有哪些?过期域名的删除期限是多久?
tk域名申请步骤以及注册tk域名的方法