您的位置:首页 > 运维架构 > 反向代理

Nginx(三) Nginx负载均衡以及反向代理

2020-02-16 10:07 337 查看

Nginx负载均衡以及反向代理

一反向代理与正向代理

反向代理代理服务器,正向代理代理客户端。

1反向代理

反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

2正向代理

正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

二 负载均衡

负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无需其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。均衡负载能够平均分配客户请求到服务器阵列,籍此快速获取重要数据,解决大量并发访问服务问题。

三Nginx负载均衡以及反向代理完整配置示例

1 #CPU个数
2 worker_processes  1;
3 #pid文件存储位置
4 #pid        logs/nginx.pid;
5 #最大处理请求个数
6 events {
7     worker_connections  1024;
8 }
9 http {
10     include       mime.types;
11     default_type  application/octet-stream;
12     #日志文件格式
13     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
14                       '$status $body_bytes_sent "$http_referer" '
15                       '"$http_user_agent" "$http_x_forwarded_for"';
16     #全局日志文件
17     #access_log  logs/access.log  main;
18
19     sendfile        on;
20     #超时时间
21     keepalive_timeout  65;
22     #负载均衡配置
23     upstream www.solr.server{
24         server 192.168.43.111:8080;
25         server 192.168.43.112:8080;
26     }
27     #主机
28     server{
29         #监听端口
30         listen     80;
31         server_name www.hadoop.com;
32         error_page 500 502 503 504 /50x.html;
33         location = /50.html{
34             root html;
35         }
36         #配置反向代理
37         location / {
38             proxy_pass_header Server;
39             proxy_set_header Host $http_host;
40             proxy_set_header X-Real-IP $remote_addr;
41             proxy_set_header X-Scheme $scheme;
42             proxy_pass http://www.solr.server;
43         }
44         #主机日志文件存放路径以及格式
45         access_log logs/hadoop.log main;
46     }
47 }

四 Nginx负载均衡以及反向代理实现

1 根据上面配置文件,新建两个虚拟机,根据自己的物理机IP(192.168.43.110)配置虚拟机IP(192.168.43.111,192.168.43.112)

2 两个虚拟机安装tomcat以及jdk

3 修改两个虚拟机的tomcat的默认欢迎页面~/apache-tomcat-8.5.13/webapps/ROOT/index.jsp,并分别启动两虚拟机上的tomcat

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
3 <html>
4 <head>
5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
6 <title>Nginx Reverse Proxy And Load Balancing</title>
7 </head>
8 <body>
9 <div>服务器IP:192.168.43.111(112)</div>
10 <div>Nginx代理服务器IP:<%String ip = request.getRemoteAddr();  out.print(ip);  %></div>
11 <div>客户端IP:<%String ipClient = request.getHeader("X-Real-IP");  out.print(ipClient);  %></div>
12 </body>
13 </html>

4 修改物理机C:\Windows\System32\drivers\etc\hosts文件,添加如下配置

 192.168.43.112 www.hadoop.com 

此处www.hadoop.com对应Nginx配置文件server(主机)节点下的server_name

5 切换到nginx安装目录下重启nginx

 ./nginx -s reload 

6 访问www.hadoop.com页面,交替出现 服务器IP:192.168.43.111、服务器IP:192.168.43.112,简单负载均衡实现。

五 客户端IP问题

nginx,在做反向代理的时候,因为要代替客户端去访问服务器,所以,当请求包经过反向代理后,在代理服务器这里这个IP数据包的IP包头做了修改,最终后端web服务器得到的数据包的头部的源IP地址是代理服务器的IP地址,如此一来,后端服务器的程序给予IP的统计功能就没有任何意义,所以需要两个步骤让服务器获取真实客户端IP

1 配置反向代理时设置proxy_set_header的名称 为X-Real-IP值为$remote_addr

 proxy_set_header X-Real-IP $remote_addr; 

2服务器端根据Nginx的配置获取Nginx记录的真实IP

 ipClient = request.getHeader("X-Real-IP"); 

 


 

转载于:https://www.cnblogs.com/Matchman/p/9040197.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
diefen5342 发布了0 篇原创文章 · 获赞 0 · 访问量 88 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: