反向代理的过程隐蔽了真实的做事器,客户不知道真正供应做事的人是谁,客户端要求的做事都被代理做事器处理。反向代理代理的是相应方,也便是做事端;我们要求www.baidu.com时这www.baidu.com便是反向代理做事器,真实供应做事的做事器有很多台,反向代理做事器会把我们的要求分转发到真实供应做事的各台做事器。Nginx便是性能非常好的反向代理做事器,用来做负载均衡。
访问www.baidu.com是正向代理的过程
两者的差异在于代理的工具不一样:

正向代理中代理的工具是客户端。
反向代理中代理的工具是做事端。
4、知识扩展2HTTP Server和Application Server的差异和联系Apache/nignx是静态做事器(HTTP Server):Nginx优点:负载均衡、反向代理、处理静态文件上风。nginx处理静态要求的速率高于apacheApache优点:相对付Tomcat做事器来说处理静态文件是它的上风,速率快。Apache是静态解析,适宜静态HTML、图片等HTTP Server(Nginx/Apache)常用做静态内容做事和代理做事器,将外来要求转发给后面的运用做事(tomcat,jboss,php等)。运用做事器(tomcat/jboss/php)是动态做事器(Application Server):运用做事器Application Server,则是一个运用实行的容器。它首先须要支持开拓措辞的 Runtime(对付 Tomcat 来说,便是 Java,若是Ruby/Python 等其他措辞开拓的运用也无法直接运行在 Tomcat 上)。5、nginx Proxy 配置
1、代理模块
ngx_http_proxy_module
2、启用 nginx proxy 代理
环境两台nginx真实做事器
a、nginx-1 启动网站(内容)(作为网站做事器)
nginx-1的ip:10.0.105.199已经编译安装好,检讨nginx是否启动是否可以访问
b、nginx-2 启动代理程序
nginx-2的ip:10.0.105.202配置nginx的yum源直接yum安装启动编辑nginx的配置文件:[root@nginx-server ~]# vim /etc/nginx/conf.d/default.confserver { server { listen 80; server_name localhost; location / { proxy_pass http://10.0.105.199:80; proxy_redirect default; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; }}重新加载nginx配置文件[root@nginx-server ~]# nginx -s reload
c、nginx proxy 详细配置详解
proxy_pass :真实做事器的地址,可以是ip也可以是域名和url地址proxy_redirect :如果真实做事器利用的是的真实IP:非默认端口。则改成IP:默认端口。proxy_set_header:重新定义或者添加发今后端做事器的要求头proxy_set_header X-Real-IP $remote_addr;#只记录连接做事器的上一个ip地址信息。proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #通过这个选项可以记录真正客户端机器的ip地址proxy_connect_timeout::后端做事器连接的超时时间发起三次握手期待相应超时时间proxy_send_timeout:后端做事器数据回传韶光,便是在规定韶光之内后端做事器必须传完所有的数据proxy_read_timeout :nginx吸收upstream(上游/真实) server数据超时, 默认60s, 如果连续的60s内没有收到1个字节, 连接关闭。像长连接
把稳:proxy_pass http:// 填写nginx-1做事器的地址。
d、 利用PC客户端访问nginx-2做事器地址 浏览器中输入http://10.0.105.202 (也可以是nginx-2做事器的域名)
成功访问nginx-1做事器页面 e、 不雅观察nginx-1做事器的日志
10.0.105.202 - - [27/Jun/2019:15:54:17 +0800] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "10.0.105.207"
10.0.105.202 代理做事器地址
10.0.105.207 客户机地址。
访问成功。 记录了客户机的IP和代理做事器的IP
6、Nginx负载均衡
1、upstream配置
首先给大家说下 upstream 这个配置的,这个配置是写一组被代理的做事器地址,然后配置负载均衡的算法.
upstream testapp { server 10.0.105.199:8081; server 10.0.105.202:8081; } server { .... location / { proxy_pass http://testapp; #要求转向 testapp 定义的做事器列表 }
1、负载均衡算法
upstream 支持4种负载均衡调度算法
A、轮询(默认):每个要求按韶光顺序逐一分配到不同的后端做事器;
B、ip_hash:每个要求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端做事器。可以担保来自同一ip的要求被打到固定的机器上,可以办理session问题。
C、url_hash:按访问url的hash结果来分配要求,使每个url定向到同一个后端做事器。
D、fair:这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载韶光是非智能地进行负载均衡,也便是根据后端做事器的相应韶光来分配要求,相应韶光短的优先分配。Nginx本身是不支持 fair的,如果须要利用这种调度算法,必须下载Nginx的 upstream_fair模块。
2、配置实例
1、热备:如果你有2台做事器,当一台做事器发生事件时,才启用第二台做事器给供应做事。做事器处理要求的顺序:AAAAAA溘然A挂啦,BBBBBBBBBBBBBB.....
upstream myweb { server 172.17.14.2:8080; server 172.17.14.3:8080 backup; #热备 }
2、轮询:nginx默认便是轮询其权重都默认为1,做事器处理要求的顺序:ABABABABAB....
upstream myweb { server 172.17.14.2:8080; server 172.17.14.3:8080; }
3、加权轮询:跟据配置的权重的大小而分发给不同做事器不同数量的要求。如果不设置,则默认为1。下面做事器的要求顺序为:ABBABBABBABBABB....
upstream myweb { server 172.17.14.2:8080 weight=1; server 172.17.14.3:8080 weight=2;}
4、ip_hash:nginx会让相同的客户端ip要求相同的做事器。
upstream myweb { server 172.17.14.2:8080; server 172.17.14.3:8080; ip_hash; }
5、nginx负载均衡配置状态参数
down,表示当前的server暂时不参与负载均衡。backup,预留的备份机器。当其他所有的非backup机器涌现故障或者忙的时候,才会要求backup机器,因此这台机器的压力最轻。max_fails,许可要求失落败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的缺点。fail_timeout,在经历了max_fails次失落败后,停息做事的韶光单位秒。max_fails可以和fail_timeout一起利用。 upstream myweb { server 172.17.14.2:8080 weight=2 max_fails=2 fail_timeout=2; server 172.17.14.3:8080 weight=1 max_fails=2 fail_timeout=1; }
如果你像跟多更深入的理解 nginx 的负载均衡算法,nginx官方供应一些插件大家可以理解下。
3、nginx配置7层协议举例讲解下什么是7层协议,什么是4层协议。
(1)7层协议
OSI(Open System Interconnection)是一个开放性的通畅系统互连参考模型,他是一个定义的非常好的协议规范,共包含七层协议。直接上图,这样更直不雅观些:
好,详情不进行仔细讲解,可以自行百度!
(3)协议配置
这里我们举例,在nginx做负载均衡,负载多个做事,部分做事是须要7层的,部分做事是须要4层的,也便是说7层和4层配置在同一个配置文件中。
准备三台机器:
代理做事IP:10.0.105. --配置本地host解析域名;
后端做事器IP:nginx-a :10.0.105.199/nginx-b:10.0.105.202(yum安装)后端做事器将nginx做事启动
配置代理做事器的nginx配置文件
worker_processes 4;worker_rlimit_nofile 102400;events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; keepalive_timeout 65; gzip on; upstream testweb { ip_hash; server 10.0.105.199:80 weight=2 max_fails=2 fail_timeout=2s; server 10.0.105.202:80 weight=2 max_fails=2 fail_timeout=2s; } server { listen 80; server_name www.test.com; charset utf-8; #access_log logs/host.access.log main; location / { proxy_pass http://testweb; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }}
202做事器yum安装的创建新的配置文件:
[root@nginx-server ~]# cd /etc/nginx/conf.d/[root@nginx-server conf.d]# cp default.conf test.conf[root@nginx-server conf.d]# cat test.conf server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; }}[root@nginx-server ~]# nginx -s reload
浏览器测试访问:
http://www.test.com/
4层协议方法(扩展)
(2)4层协议
TCP/IP协议 之以是说TCP/IP是一个协议族,是由于TCP/IP协议包括TCP、IP、UDP、ICMP、RIP、TELNETFTP、SMTP、ARP、TFTP等许多协议,这些协议一起称为TCP/IP协议。
从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、运用层。
nginx在1.9.0的时候,增加了一个 stream 模块,用来实现四层协议(网络层和传输层)的转发、代理、负载均衡等。stream模块的用法跟http的用法类似,许可我们配置一组TCP或者UDP等协议的监听.
配置案例:
#4层tcp负载 stream { upstream myweb { hash $remote_addr consistent; server 172.17.14.2:8080; server 172.17.14.3:8080; } server { listen 82; proxy_connect_timeout 10s; proxy_timeout 30s; proxy_pass myweb; }}