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


    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:WindowsSystem32driversetchosts文件,添加如下配置

     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"); 

    
    
    
  • 相关阅读:
    第十一节 jQuery特殊效果
    第十节 使用index和一个点击事件实现选项卡
    synchronized和lock两种锁的比较
    常见的四种线程池和区别
    mybatis中的#和$的区别
    web 防止SQL注入
    GIT配置免密登录
    热点 Key 问题的发现与解决
    Redis缓存击穿
    面试必问之JVM原理
  • 原文地址:https://www.cnblogs.com/Matchman/p/9040197.html
Copyright © 2020-2023  润新知