1、什么是代理
2、为何要有代理
代理往往具有一些更专业的技能,比你自己直接跟目标打交道效率要高一些,就想想你去租房子或者买房子通常会找个中介是一个道理
没有代理
有代理
3、nginx实现代理
有三条常用的代理指令(均属于反向代理)
4、代理与负载均衡是两回事,
代理指的是把请求转发给其他人,当然转发的目标可以是一个upstream模块,该模块内可以定义多台机器、可以控制控制每次分配给哪台机器,即负载均衡是upstream实现的
如果你只想代理给一台机器,你根本用不到upstream模块,如果你想代理给多台机器(即实现负载均衡)那代理指令就必须将请求转发给一个upstream模块
5、nginx实现代理的底层运行逻辑
nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
6、代理的形式有多种,nginx支持正向代理与反向代理,介绍如下,我们常用nginx作为反向代理
正向代理是代理客户端,为客户端收发请求,使真实客户端对服务器不可见
反向代理是代理服务器端,为服务器收发请求,使真实服务器对客户端不可见。
作图地址留存:https://www.processon.com/diagraming/58883630e4b049e795e80bcf
7、正向与反向代理异同
-(1)相同点:
正向代理和反向代理所处的位置都是客户端和真实服务器之间,所做的事情也都是把客户端的请求转发给服务器,再把服务器的响应转发给客户端。
-(2)不同点
8、nginx代理支持的协议(了解)
nginx本身支持的协议有很多
我们平时使用nginx做反向代理时候常用的协议如下
nginx反向代理三条指令(proxy_pass、fastcgi_pass、uwsgi_pass)源自于nginx的不同模块,支持不同的协议,总结如下
多补充一个grpc协议,go语言的rpc协议
反向代理模式 | Nginx**配置模块** |
---|---|
http、websocket、https、tomcat(java程序) | ngx_http_proxy_module |
fastcgi(php程) | ngx_http_fastcgi_module |
uwsgi(python) | ngx_http_uwsgi_module |
grpc(go程序)golang | ngx_http_v2_module |
9、代理指令优化
以proxy_pass为例,其他指令自行查询