内容简介:假设网络上有三台机器:通常,你会直接访问需要的网络资源,此时路径是由你的电脑直接到网站 X->Z。但某些情况下,X 并不能直接访问到 Z。原因可能是两方面的,
代理与反向代理
假设网络上有三台机器:
- X:你的电脑
- Y:代理服务器
- Z:网站
通常,你会直接访问需要的网络资源,此时路径是由你的电脑直接到网站 X->Z。
代理(Proxy)
但某些情况下,X 并不能直接访问到 Z。原因可能是两方面的,
- X 所在的网络将 Z 进行了屏蔽封锁,比如公司内网禁用一些娱乐性质的网站,防止员工工作时间娱乐。
- Z 将 X 进行了屏蔽。比如 Z 发现来自 X 的请求异常,怀疑是恶意攻击,所以将 X 的 IP 封掉。
此时 Y 在中间可充当 X 的代理,将 X 的请求转发到 Z,拿到内容后再返回给 X。此时路径为 X->Y->Z。
也就是说,代理是 X 端主动配置和发起的,X 明确知道 Y 并不是返回内容的服务器。
反向代理 (Reverse Proxy)
某些情况下,Z 不想让 X 直接访问,所以配置一个 Y 在前面充当代理提供服务。
此时,作为用户访问的是 Y,并不知道 Z 才是真正提供服务的机器,用户 被 代理了,相比前面,所以这里是 反向 代理。
反向代理下,Z 在后台对外不公开只内网可访问,而作为反向代理的 Y 对外公开可通过公网访问。
反向代理的场景:
- 比如 Z 是个大型网站,请求量巨大,单台机器是无法满足所有请求的,所以同样的网站内容部署在了多台机器上。然后配置一台反向代理的机器,将请求再就近转发到某台机器。比如 CDN。
- 负载均衡。将请求平均分配到各机器,以至于不会让某些机器过载,同时将挂掉的机器其请求转发到还在正常运行的机器上。
NGINX 中反向代理的配置
请求转发
通过
proxy_pass
可将请求直接转发。
location /some/path/ {
proxy_pass http://www.example.com/link/;
}
目标地址中的 path 部分会替换掉 location
参数中对应位置中的 path。比如这里 /some/path/page.html
会被转发到 http://www.example.com/link/page.html
。
其中目标地址可以是 IP,或带端口,
location ~ \.php {
proxy_pass http://127.0.0.1:8000;
}
除了转发到 HTTP 服务器,还支持其他类型协议的转发,相应的指令为:
-
fastcgi_pass转发到 FastCGI 服务器 -
uwsgi_pass转发到 uwsgi 服务器 -
scgi_pass转发到 SCGI 服务 -
memcached_pass转到到 memcached 服务器
请求头的转发
默认情况下 NGINX 为代理的请求设置上了两个请求头, Host
设置成 $proxy_host
变量的值, Connection
设置为 close
。其他值为空的请求头会去掉。通过
proxy_set_header
指令可修改代理时的请求头。
location /some/path/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://localhost:8000;
}
代理时如果想禁止某个头部的传递,直接将其设置为空即可,
location /some/path/ {
proxy_set_header Accept-Encoding "";
proxy_pass http://localhost:8000;
}
Buffer 的设置
作为代理,在拿到完整响应前将结果暂存在内部的 buffer 数据中,拿到完整响应后再将结果返回到客户端。这种将响应暂存的方式可提高代理的效率,而同步的方式会浪费代理服务器的资源。
默认 buffer 模式为开启状态,可通过
proxy_buffering
进行开关。
proxy_buffers
控制单个请求为其分配的 buffer 大小和数量。
location /some/path/ {
proxy_buffers 16 4k;
proxy_buffer_size 2k;
proxy_pass http://localhost:8000;
}
关闭某些 location 下的 buffer 设置:
location /some/path/ {
proxy_buffering off;
proxy_pass http://localhost:8000;
}
出口地址
通过
proxy_bind
指令可配置代理服务器的出口地址,然后配置内部机器只接收来自该出口地址的请求。
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/;
}
以上所述就是小编给大家介绍的《NGINX 反向代理》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Beginning Apache Struts
Arnold Doray / Apress / 2006-02-20 / USD 44.99
Beginning Apache Struts will provide you a working knowledge of Apache Struts 1.2. This book is ideal for you Java programmers who have some JSP familiarity, but little or no prior experience with Ser......一起来看看 《Beginning Apache Struts》 这本书的介绍吧!