一、 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; }