关于负载均衡前对反向代理的理解
2020-06-09 05:19
525 查看
nginx代理
1.多个web节点如何访问
1.1 DNS轮询, 需要依赖web节点是公网IP,配置DNS的 A记录 blog.wyk.com 10.0.0.7 10.0.0.8 10.0.0.9 1.需要所有的web节点具备公网IP地址 2.公网独立IP需要费用,而且不便宜。 3.所有的web节点有公网IP,不安全。 4.DNS轮询机制,没有 健康检查功能。( 体验差 )1.2 负载均衡, 仅需要一台服务器对外, 所有的后端节点走内网
1.所有的web节点不在需要有公网IP 1.1 节省成本 1.2 保证安全 2.能够对后端的web节点进行健康检查机制 3.负载均衡有对应的调度算法 轮询 加权轮询 最少连接数调度算法 .........
想要实现负载均衡,必须先去了解 Nginx代理? 然后在学习负载均衡。
2.正向代理和反向代理的区别
区别在于形式上服务的"对象"不一样
正向代理代理的对象是客户端,为客户端服务 (常用与为客户端提供科学写上网的方式)
反向代理代理的对象是服务端,为服务端服务 (用用于企业集群架构, 后端有多个web节点组成的集群,然后 接入代理,由代理统一调度)
反向代理模式 Nginx反向代理模块 http、websocket、https ngx_http_proxy_module java | http | https | websocket | go fastcgi ngx_http_fastcgi_module php uwsgi ngx_http_uwsgi_module python grpc ngx_http_v2_module go
3.配置反向代理
客户端:10.0.0.1
反向代理: 10.0.0.5 172.16.1.5
后端节点: 10.0.0.7 172.16.1.7
1.配置后端的web节点,域名是web.wyk.com; 端口是8080
[root@web01 ~]# cat /etc/nginx/conf.d/web.wyk.com.conf server { listen 8080; server_name web.wyk.com; root /web; location / { index index.html; } } [root@web01 ~]# systemctl reload nginx
2.配置nginx反向带理,代理后端的web节点
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_web.wyk.com.conf server { listen 80; server_name web.wyk.com; location / { proxy_pass http://10.0.0.7:8080; } } [root@lb01 ~]# systemctl start nginx [root@lb01 ~]# systemctl enable nginx
3.抓包分析下原理
3.1.如果将后端节点的端口修改为80会怎样?
1.修改后端的web_Server为80端口 2.修改代理服务器,代理的后端为80端口 返回 的结果应该是 web..... 返回的结果没有 达到预期? 原因是:proxy_pass 后面跟的是 IP地址:端口,后端只知道你要请求80端口 ,但并 不知道你要请求的是哪个域名? proxy_set_Header Host $http_host; 告诉后端服务器,我要请求你的80端口,同时请求的是哪个域名。 用户请求 代理 使用的是 http1.1协议,而代理请求后端服务使用的是 http1.0协议。 proxy_http_version 1.1; 配置这条即可实现代理与后端走http1.1长连接协议。 3.后端的web节点如何知道客户端的真实IP? proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
写到配置文件
- proxy代理服务:
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_web.wyk.com.conf server { listen 80; server_name web.wyk.com; location / { proxy_pass http://10.0.0.7:80; proxy_set_header Host $http_host; #告诉服务器请求那个端口同事加上那个域名,不然会找不到域名 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #向后端的web节点返回客户端的真实ip,因为一直都是代理去访问的,不知道客户端的真实ip proxy_http_version 1.1; #实现代理与后端走http1.1长连接 } }
- 后端web节点
[root@web01 ~]# cat /etc/nginx/conf.d/web.wyk.com.conf server { listen 80; server_name web.wyk.com; root /web; location / { index index.html; } }
- 与nginx代理相关的参数
proxy_connect_timeout time; nginx代理与后端服务器连接超时时间(代理连接超时) proxy_read_timeout time; nginx代理等待后端服务器的响应时间 proxy_send_timeout time; 后端服务器数据回传给nginx代理超时时间 proxy_buffering on | off; proxy_buffer_size size; proxy_buffers number size;
写到配置中
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_web.wyk.com.conf server { listen 80; server_name web.wyk.com; location / { proxy_pass http://172.16.1.7:80; proxy_http_version 1.1; 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; proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k; } }
Nginx代理的 配置文件进行优化:将代理相关的参数写到/etc/nginx/下以params结尾
[root@lb01 ~]# cat /etc/nginx/proxy_params proxy_http_version 1.1; 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; proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k; #然后就可以直接在配置文件写include proxy_params;即可. [root@lb01 ~]# cat /etc/nginx/conf.d/proxy_web.eyk.com.conf server { listen 80; server_name web.wyk.com; location / { proxy_pass http://172.16.1.7:80; include proxy_params; } }
关于负载均衡的配置upstream定义一个地址池
nginx负载均衡配置 [root@lb01 ~]# cat /etc/nginx/conf.d/proxy_web.wyk.com.conf upstream web { server 172.16.1.7:80; server 172.16.1.8:80; } server { listen 80; server_name web.wyk.com; location / { proxy_pass http://web; include proxy_params; } } web01: [root@web01 ~]# cat /etc/nginx/conf.d/web.wyk.com.conf server { listen 80; server_name web.wyk.com; root /web; location / { index index.html; } } web02: [root@web02 ~]# cat /etc/nginx/conf.d/web.wyk.com.conf server { listen 80; server_name web.wyk.com; root /web; location / { index index.html; } }
相关文章推荐
- 关于反向代理和负载均衡的理解
- 【Nginx应用】1.理解正、反向代理和负载均衡
- Apache反向代理结合Tomcat集群来实现负载均衡(一)、概念理解
- 轻松理解:正向代理、反向代理、负载均衡
- 关于Apache通过反向代理实现负载均衡
- 【渐进】关于反向代理,负载均衡
- 【渐进】关于反向代理,负载均衡
- 关于负载均衡、集群、正反向代理的理解
- 关于nginx访问控制、用户认证以及rewrite、反向代理和负载均衡
- Apache反向代理结合Tomcat集群来实现负载均衡(一)、概念理解
- 轻松理解:正向代理、反向代理、负载均衡
- 关于正向代理,反向代理,负载均衡的个人理解
- 关于Http协议与TCP协议的一些简单理解
- 关于BIO和NIO的理解
- 关于AQS中的enq方法的理解
- 关于SocketAsyncEventArgs的一些理解
- 关于ThreadLocal的理解
- 关于sql加反引号与不加反引号的理解
- 关于JSON的理解
- 关于loader asyncTaskLoader AsyncTask的理解