nginx反向代理,负载均衡

Nginx反向代理与负载均衡
本文介绍Nginx作为反向代理工具的应用,包括配置方法及负载均衡策略,如轮询、加权轮询和Iphash等。

      nginx除了可以自己充当web服务器之外,还可以充当其它web服务器的反向代理工具。

     Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器,只要你正则写的没问题,又有相对应的服务器解决方案,你就可以随心所欲的玩。并且Nginx对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,他可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。

反向代理原理图

      Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的啦,你可以参照所有的负载均衡算法,给他一一找出来做下实现。

以下是轮询和加权轮询原理图:

以下是Ip hash算法,对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。

测试环境: centos6.5  32系统,  nginx1.10.3

测试环境简单拓扑图如下:

nginx.conf配置如下:


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;  
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    #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;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;     

    #gzip  on;

    upstream wx.com {       #配置服务集群
      #ip_hash    
      server 192.168.68.1:8080  weight=1;    #weight越大,处理请求的概率就越高
      server 192.168.68.129:8080  weight=1;
    }

    server {
        listen       80;      
        server_name  192.168.68.128;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
        
      location /NginxProj {  #配置反向代理站点
           #指定反向代理的服务集群,注意wx.com是集群名称,要和upstream中的wx.com一致
           proxy_pass http://wx.com;     
           proxy_redirect off;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        
       
        location /nginx_status {   
            stub_status on;
            access_log off;
        }
        
 
    }

}

其它详细配置请参考我的上篇文章

测试jsp页面的代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="java.net.InetAddress"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="path" value="${pageContext.request.contextPath}"></c:set>
<c:set var="scheme" value="${pageContext.request.scheme}"></c:set>
<c:set var="serverName" value="${pageContext.request.serverName}"></c:set>
<c:set var="serverPort" value="${pageContext.request.serverPort}"></c:set>
<c:set var="basePath" value="${scheme}://${serverName }:${serverPort }${path }/"></c:set>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="${basePath }">
    <title>nginx演示</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
</head>
<% 
    String serverIp=InetAddress.getLocalHost().getHostAddress();
	String serverInfo=application.getServerInfo();
	Properties props=System.getProperties(); //获得系统属性集    
	String osName = props.getProperty("os.name"); //操作系统名称    
	String osArch = props.getProperty("os.arch"); //操作系统构架    
	String osVersion = props.getProperty("os.version"); //操作系统版本 
%>
<body>
<h2>sessionId:<%=session.getId() %></h2>
<h2>服务器ip:<%=serverIp %></h2>
<h2>tomcat服务器信息:<%=serverInfo %></h2>
<h2>服务器操作系统名称 :<%=osName %></h2>
<h2>服务器操作系统构架 :<%=osArch %></h2>
<h2>服务器操作系统版本 :<%=osVersion %></h2>
</body>
</html>

运行结果如下,找一个客户端反复刷新页面:

请求的服务器会在.1和.129之间切换,ok,负载均衡和反向代理测试成功!

如果配置的是ip_hash方案,请在配置服务集群哪里去掉ip_hash前面的注释,那么刷新页面,session就不变了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

御前两把刀刀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值