一、理解nginx服务代理
Nginx代理有正向和反向代理两种类型,可以基于osi七层模型中的第四层(传输层)和第七层(应用层)进行代理
注:
nginx 一般支持的是7层代理,支持四层代理一般使用 lvs 或者haproxy,但从nginx 从1.9.0 版本开始支持四层代理,但做四层代理时源码编译需要添加 --with-stream模块,这里的–with-stream 是添加四层代理模块
正向代理代理的对象是客户端,反向代理的对象是服务端,在日常使用中,反向代理web服务器这种方式使用得比较多。
Nginx采用C语言进行编写,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名,其特点是占有内存少,并发能力强。
模块化的结构。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。如果由 FastCG或其它代理服务器处理单页中存在的多个 SSI,
则这项处理可以并行运行,而不需要相互等待。
支持 SSL 和 TLSSNI功能。
OSI七层模式:
TCP/IP四层模式:
二、Nginx七层代理和四层代理的区别
在nginx代理中7层代理是写在http模块中的,而4层代理是写在stream模块中,与http模块并列,且做四层代理时源码编译需要添加
--with-stream模块进行编译
7层和4层代理基于的协议不同,根据OSI七层模型,
第七层是应用层,7层代理主要是协议和内容的交换,7层代理可以 基于url和ip以及cookie和请求头 进行分流第四层是传输层,4层代理是基于ip和端口的转发,是基于TCP/UDP协议,–with-stream 是添加四层代理模块,可以用来创建其他业务集群,比如ssh,mysql
注:
主要支持的协议有http,htps,smtp,ftp,dns,pop3,dhcp等协议,通常是http代理
★ 针对web服务,七层通过虚拟的 URL 或主机名接收请求,然后再分配到真实的服务器,七层就是基于 URL 等应用层信息的负载均衡;
★ 针对web服务,所谓四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡 设备设置的服务器选择方式,决定最终选择的内部服务器,
它一般走的是tcp,udp协议。
四层代理配置举例:
stream {server {listen 3308;proxy_pass mysql-db;}upstream mysql-db {server 192.20.32.30;server 192.20.32.31;}
}
注:
四层代理设备将client发送报文中的目标地址(原来为四层代理的ip地址)修改为目标内部服务器的地址,这样client就可以和server建立TCP连接并发送数据
在stream中,server一定要配置port,proxy_pass配置行直接加集群名,**不能加http:// **
七层代理配置举例:
http {upstream web {server 192.20.21.20;server 192.20.21.21;}server {listen 8081;location / {proxy_pass http//web;root html;index index.html index.htm;}}
}
三、关于正向/反向代理区别
正向代理是客户端代理,用户清楚的知道访问的服务器是谁. 保护了客户端信息
反向代理是服务器端代理.用户不清楚访问的真实服务到底是谁. 保护了服务端信息
四、总结:
从nginx代理的配置来看,正向代理和反向代理的配置区别在于proxy_pass的配置
1.正向代理proxy_pass配置的是动态url
2.反向代理proxy_pass配置的是静态服务器
四层、七层代理与正向、反向代理的关系:
1、七层代理可以是正向代理也可以是反向代理,如上方例子中的正反向代理就是基于7层
2、四层代理都是反向代理
Nginx代理与负载均衡的关系
1、在nginx中用到了反向代理,不一定会用负载均衡
2、在nginx中用到了负载均衡,一定会用反向代理