一:四层负载均衡测试
1.1 四层负载均衡配置语法
stream {
upstream backend {
hash $remote_addr consistent
server backend1.example.com:12345 weight=5;
server 127.0.0.1:12345 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
}
server {
listen 12345;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass backend;
}
}
1.2 配置案例
客户端想要在外网ssh到后台中的2台web服务器,可以通过四层负载,访问代理服务器不同的端口跳转到后台服务器
1.2.1 修改lb01上的主配置文件
为了和七层负载代理进行区分,我们创建一个/etc/nginx/conf.c/目录,在这个目录下去创建代理配置文件
因为创建了conf.c这个目录,所以我们要在主配置文件/etc/nginx/nginx.conf里,http区域的上面添加如下信息
include /etc/nginx/conf.c/*.conf;
1.2.2 创建代理配置文件
[root@lb01-5 conf.c]# cat /etc/nginx/conf.c/ssh_proxy.conf
stream {
upstream ssh_web01 {
server 172.16.1.7:22;
}
upstream ssh_web02 {
server 172.16.1.8:22;
}
server {
listen 5555;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass ssh_web01;
}
server {
listen 6666;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass ssh_web02;
}
}
1.2.3 测试访问
二:Nginx动静分离
需求:将动态资源分发到动态服务器上,静态资源分发到静态服务器上
实验环境规划
centos7 web01 172.16.1.7 nginx静态服务器
centos7 web02 172.16.1.8 tomcat动态服务器
centos7 lb01 10.0.0.5/172.16.1.5 负载均衡服务器
2.1 搭建web01上搭建静态资源
[root@web01-7 conf.d]# cat ds_cxy.conf
server {
listen 80;
server_name ds.cxy.com;
root /code/ds;
index index.html;
location ~* .*\.(png|jpg|gif)$ {
root /code/ds/images;
}
}
[root@web01-7 conf.d]#mkdir -p /code/ds/images/
[root@web01-7 conf.d]#cd /code/ds/images/
##下载静态图片
[root@web01-7 ds]# wget -O /code/ds/images/nginx.png http://nginx.org/nginx/png
在网页测试访问一下,静态资源没有问题
2.2 搭建web02上的动态资源
##安装tomcat
[root@web02-8 /]# yum install -y tomcat
[root@web02-8 /]#systemctl start tomcat
[root@web02-8 /]#mkdir /usr/share/tomcat/webapps/ROOT
[root@web02-8 /]#cd /usr/share/tomcat/webapps/ROOT
##创建动态页面
[root@web02-8 ROOT]# cat java_test.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<HTML>
<HEAD>
<TITLE>JSP Test Page</TITLE>
</HEAD>
<BODY>
<%
Random rand = new Random();
out.println("<h1>Random number:</h1>");
out.println(rand.nextInt(99)+100);
%>
</BODY>
</HTML>
在网页测试访问一下,动态资源没有问题
2.3 配置lb01,实现动静分离
[root@lb01-5 ds]# cd /etc/nginx/conf.d/
[root@lb01-5 conf.d]# cat ds_proxy.conf
upstream static {
server 172.16.1.7:80;
}
upstream java {
server 172.16.1.8:8080;
}
server {
listen 80;
server_name ds.cxy.com;
location / {
root /code/ds;
index index.html;
}
location ~ .*\.(png|jpg|gif)$ {
proxy_pass http://static;
include proxy_params;
}
location ~ .*\.jsp$ {
proxy_pass http://java;
include proxy_params;
}
}
##创建本地首页,整合动态和静态在一个页面上
[root@lb01-5 conf.d]# cd /code/ds/
[root@lb01-5 ds]# cat index.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://ds.cxy.com/java_test.jsp",
success: function(data) {
$("#get_data").html(data)
},
error: function() {
alert("fail!,请刷新再试!");
}
});
});
</script>
<body>
<h1>测试动静分离</h1>
<img src="http://ds.cxy.com/nginx.png">
<div id="get_data"></div>
</body>
</html>
修改window hosts文件:10.0.0.5 ds.cxy.com
访问测试成功
当停掉web01上的nginx时,图片访问不了,动态正常访问
当停掉web02上的tomcat时,图片正常访问,动态访问不了
三:会话管理
为什么要用会话管理,当客户访问一个网站时,登录需要输入用户名和密码,当输入完成登录成功之后,再次访问时,负载均衡可能会分发到另外一台服务器上,这样用户就又要输入用户名和密码
会话管理的常见方式:
1.会话保持:通过ip_hash算法,将客户访问登录网站时,访问固定的服务器
2.会话共享:将用户名和密码写入到web后端的redis或者mysql数据库里
3.写入浏览器:研发人员实现将用户名和密码保持在浏览器里,下次登录直接浏览器读取登录.