博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Nginx基础 - 06负载均衡

Posted on 2023-03-11 16:56  Kingdomer  阅读(27)  评论(0编辑  收藏  举报

 

一、 Nginx 负载均衡配置场景

 

负载均衡种类

 

负载均衡 按范围划分: GSLB全局负载均衡、SLB

 

 

Nginx负载均衡状态配置

 状态 概述
down
当前的server暂时不参与负载均衡
backup 预留的备份服务器
max_fails 允许请求失败的次数
fail_timeout 经过max_fails失败后,服务暂停时间
max_conns 限制最大的接收连接数

 

Nginx负载均衡调度策略

调度算法 概述
round-robin 按时间顺序逐一分配到不同的后端服务器(默认)
weight 加权轮询,weight值越大,分配到的访问几率越高
ip_hash 每个请求按访问IP的hash结果分配,这样来自同一个IP的固定访问一个后端服务器
url_hash 请求按照访问URL的hash结果来分配,是每个URL定向到同一个后端服务器
least_conn 最少链接数,哪个机器链接数少就分发
hash关键数值 hash 自定义的key

 

upstream load_pass {
    hash $request_uri;
    server 192.168.6.51:8001;
    server 192.168.6.52:8001;
    server 192.168.6.53:8001;
}

 

二、 Nginx 流量分离

动静分离, 通过中间件将动态请求和静态请求进行分离; 分离资源,减少不必要的请求消耗,减少请求延时。

好处: 动静分离后,即使动态服务不可用,但静态资源不受影响。

 

# 静态资源
[root@my-node10 images]# pwd
/application/nginx/images
[root@my-node10 images]# wget -O nginx.png http://nginx.org/nginx.png
# 动态资源 [root@my-node51 application]# netstat -tunlp | grep 808 tcp6 0 0 :::8081 :::* LISTEN 1596/java tcp6 0 0 :::8082 :::* LISTEN 1637/java tcp6 0 0 :::8083 :::* LISTEN 1686/java

  

tomcat 动态资源

[root@my-node51 application]# cat tomcat8081/webapps/ROOT/java_test.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
    <title>JSP Test Page</title>
</head>
<body>
    <%
        Random random = new Random();
        out.println("<h1>Random number:</h1>");
        out.println(random.nextInt(99)+100);
    %>
</body>
</html>

 

upstream javaserver {
    server 192.168.6.51:8081;
}

server {
    listen 81;
    server_name 192.168.6.10;
    root /application/nginx/demo;

    location / {
        index index.html;
    }
    location ~ .*\.(png|jpg|gif)$ {
        root /application/nginx/images;
        gzip on;
    }
    location ~ .*\.jsp$ {
        proxy_pass http://javaserver;
    }
}

  

 

        

 

                  

 

 

[root@my-node10 demo]# cat demo.html
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <title>测试ajax和跨域访问</title>
  <script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
</head>
<script type="text/javascript">
  $(document).ready(function(){
    $.ajax({
      type: "GET",
      url: "http://192.168.6.51:8081/java_test.jsp",
      success: function(data) {
        $("#get_data").html(data)
      },
      error: function() {
        alert("failed!请刷新后再测试!")
      }
    });
  });
</script>
<body>
    <h1>测试动静分离</h1>
    <img src="http://192.168.6.10:81/nginx.png">
    <div id="get_data"></div>
</body>
</html>

 

访问http://192.168.6.10:81/demo.html; 报 CORS错误  

          

 

 

 

tomcat CORS配置 

[root@my-node51 tomcat8081]# vim conf/web.xml

    <filter>
        <filter-name>CorsFilter</filter-name>
        <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
        <init-param>
            <param-name>cors.allowed.origins</param-name>
            <param-value>*</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CorsFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

 

url: "http://192.168.6.51:8081/java_test.jsp"  修改为  url: "http://192.168.6.10:81/java_test.jsp"

 

 

按浏览器区分流量

 

根据不同的浏览器以及不同的手机,访问的效果将不一样。

 

location / {
    if ($http_user_agent ~* "Safari"){
        proxy_pass http://safari;
    }
    if ($http_user_agent ~* "chrome"){
        proxy_pass http://chrome;
    }
    if ($http_user_agent ~* "iphone"){
        proxy_pass http://iphone;
    }
    if ($http_user_agent ~* "android"){
        proxy_pass http://android;
    }
proxy_pass http://default; }