day11 四层负载均衡和http协议

四层负载均衡和七层负载均衡的区别

四层和七层负载均衡的区别
四层负载均衡数据包在底层就进行了分发,而七层负载均衡数据包则是在最顶层进行分发、由此可以看出,七层负载均衡效率没有四负载均衡高。
但七层负载均衡更贴近于服务,如:http协议就是七层协议,我们可以用Nginx可以作会话保持,URL路径规则匹配、head头改写等等,这些是四层负载均衡无法实现的。 1、四层负载均衡不识别域名,七层负载均衡识别域名
2、七层负载均衡是基于HTTP协议,四层是基于TCP/ip协议。# HTTP协议也是基于TCP/IP协议的

四层的使用场景

1、MySQL服务
2、SSH代理端口
3、网站的负载均衡代理
4、四层+七层来做负载均衡,四层可以保证七层的负载均衡的高可用性;

![](C:\Users\Lenovo\Pictures\Camera Roll\四层负载均衡.jpg)

四层负载均衡特点

1、四层负载均衡仅能转发TCP/IP协议、UDP协议、通常用来转发端口,如:tcp/22、udp/53;
2、四层负载均衡可以用来解决七层负载均衡端口限制问题;(七层负载均衡最大使用65535个端口号)
3、四层负载均衡可以解决七层负载均衡高可用问题;(多台后端七层负载均衡能同时的使用)
4、四层的转发效率比七层的高得多,但仅支持tcp/ip协议,不支持http和https协议;
5、通常大并发场景通常会选择使用在七层负载前面增加四层负载均衡。

四层负载均衡语法

Syntax: stream { ... }
Default: —
Context: main 1、创建一个IP连接池(存放web服务器的IP的)
upstream 格式:
stream {
upstream [连接池的名称] {
[存放的IP]
server [ip1];
server [ip2];
}
}
2、往IP连接池中丢请求。
proxy_pass [连接池的名称]; # 四层负载均衡stream模块跟http模块在同一级别,不能配置在http里面

四层负载均衡实践

四层负载均衡实践之前提准备

1、必须是官网编译安装
里面包含:--with-stream参数 # 一定要有这个参数才能使用四层负载均衡 2、使用四层负载均衡必须是官网镜像安装的,必要参数为:--with-stream 3、编辑镜像源
进入nginx.org ---> documentation ---> RHEL/CentOS 4、编译
[root@lb02 ~]# vim /etc/yum.repos.d/nginx.repo
-----------------------------------------------------------------------------------------------------
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true [nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
----------------------------------------------------------------------------------------------------- 5、安装
[root@lb02 yum.repos.d]# yum clean all
[root@lb02 yum.repos.d]# yum makecache
[root@lb02 yum.repos.d]# yum install nginx 6、修改nginx配置文件
把http模块全部删掉,因为四层负载均衡不用http
#添加
[root@lb02 yum.repos.d]# vim /etc/nginx/nginx.conf
stream { include /etc/nginx/stream.conf/*.conf;
}

四层负载均衡实践

1、修改nginx配置文件
[root@lb02 yum.repos.d]# vim /etc/nginx/nginx.conf
-----------------------------------------------------------------------------------------------------
user nginx;
worker_processes auto; error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid; events {
worker_connections 1024;
} stream {
# 指定文件
include /etc/nginx/stream.conf/*.conf;
}
----------------------------------------------------------------------------------------------------- 2、创建文件并编写配置文件
[root@lb02 yum.repos.d]# mkdir /etc/nginx/stream.conf
[root@lb02 yum.repos.d]# cd /etc/nginx/stream.conf
[root@lb02 stream.conf]# vim nginx.conf
-----------------------------------------------------------------------------------------------------
upstream nginx {
server 172.16.1.5:80;
} server {
listen 80;
proxy_pass nginx;
}
-----------------------------------------------------------------------------------------------------
[root@lb02 stream.conf]# nginx -t
[root@lb02 stream.conf]# systemctl restart nginx 3、浏览器测试
192.168.15.6 game.test.com

四层负载均衡案例

案例1:要求使用192.168.15.6的1234端口链接192.168.15.5的22端口
1、编写配置文件
[root@lb02 stream.conf]# pwd
/etc/nginx/stream.conf
[root@lb02 stream.conf]# vim ssh.conf
-----------------------------------------------------------------------------------------------------
upstream ssh {
server 172.16.1.5:22;
} server {
listen 1234;
proxy_pass ssh;
}
-----------------------------------------------------------------------------------------------------
[root@lb02 stream.conf]# nginx -t
[root@lb02 stream.conf]# systemctl restart nginx 2、测试
[root@lb02 stream.conf]# ssh 192.168.15.6 -p 1234
案例2:要求使用192.168.15.6的33060端口代理192.168.15.51的3306端口
1、编写配置文件
[root@lb02 stream.conf]# pwd
/etc/nginx/stream.conf
[root@lb02 stream.conf]# vim mysql.conf
-----------------------------------------------------------------------------------------------------
upstream mysql {
server 172.16.1.51:3306;
} server {
listen 33060;
proxy_pass mysql;
proxy_connect_timeout 1s;
proxy_timeout 3s;
}
-----------------------------------------------------------------------------------------------------
[root@lb02 stream.conf]# nginx -t
[root@lb02 stream.conf]# systemctl restart nginx 2、测试
[root@db01 ~]# systemctl restart mariadb # 启动数据库
[root@db01 ~]# mysql -uroot -p123456 -h192.168.15.6 -P33060 # 测试连接数据库

HTTPS

HTTPS简介

1、什么是HTTPS: # HTTPS是主要用来加密传输
为什么需要使用HTTPS,因为HTTP不安全,当我们使用http网站时,会遭到劫持和篡改,如果采用https协议,那么数据在传输过程中是加密的,所以黑客无法窃取或者篡改数据报文信息,同时也避免网站传输时信息泄露。 那么我们在实现https时,需要了解ssl协议,但我们现在使用的更多的是TLS加密协议。 那么TLS是怎么保证明文消息被加密的呢?在OSI七层模型中,应用层是http协议,那么在应用层协议之下,我们的表示层,是ssl协议所发挥作用的一层,他通过(握手、交换秘钥、告警、加密)等方式,是应用层http协议没有感知的情况下做到了数据的安全加密

模拟网站劫持

1、检查nginx

[root@web01 conf.d]# nginx -V
--with-stream

2、创建证书存放目录

[root@web01 ~]# mkdir /etc/nginx/ssl_key
[root@web01 ~]# cd /etc/nginx/ssl_key/

3、生成证书

# 使用openssl命令充当CA权威机构创建证书(生产不使用此方式生成证书,不被互联网认可的黑户证书)
[root@web01 ssl_key]# openssl genrsa -idea -out server.key 2048 #生成自签证书(公钥),同时去掉私钥的密码
[root@web01 ssl_key]# openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt

4、配置nginx证书

[root@web01 nginx]# pwd
/etc/nginx/conf.d
# 注:ssh端口:443 1、编写配置文件
[root@web01 conf.d]# vim game.conf
-----------------------------------------------------------------------------------------------------
server{
server_name game.test.com;
listen 443 ssl; # ssl开启
# 指定证书文件
ssl_certificate /etc/nginx/ssl_key/server.crt;
# 指定私钥文件
ssl_certificate_key /etc/nginx/ssl_key/server.key;
location /{
root /usr/share/nginx/html5-mario;
index index.html;
}
}
----------------------------------------------------------------------------------------------------- 2、检测并重启nginx服务
[root@web01 conf.d]# nginx -t
[root@web01 conf.d]# systemctl restart nginx
[root@web01 conf.d]# netstat -nutlp 3、浏览器测试
输入:https://192.168.15.7/

全栈HTTPS

1、配置一个网站

1、修改配置
[root@web01 ~]# vim /etc/nginx/conf.d/html.conf
[root@web01 ~]# nginx -t
[root@web01 ~]# systemctl restart nginx
-----------------------------------------------------------------------------------------------------
server {
listen 80;
server_name html.test.com; location / {
root /code;
index index.html;
}
}
-----------------------------------------------------------------------------------------------------
2、创建目录和用户
[root@web01 ~]# mkdir /code
[root@web01 ~]# useradd www -r -M -s /sbin/nologin
[root@web01 ~]# chown -R www.www /code

2、配置一个网页

[root@web01 ~]# vim /code/index.html
-----------------------------------------------------------------------------------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>学生信息注册页面</title>
</head>
<body>
<h3 align="center">学生信息注册</h3>
<form name="stu"action="">
<table>
<tr><td>姓名:</td><td><input type="text"name="stuName"/></td></tr>
<tr><td>性别:</td>
<td><input type="radio"name="stuSex"checked="checked">男
<input type="radio"name="stuSex">女
</td>
</tr>
<tr><td>出生日期</td>
<td><input type="text"name="stuBirthday"></td>
<td>按格式yyyy-mm-dd</td>
</tr>
<tr><td>学校:</td><td><input type="text"name="stuSchool"></td></tr>
<tr><td>专业:</td>
<td><select name="stuSelect2">
<option selected>计算机科学与技术</option>
<option>网络工程</option>
<option>物联网工程</option>
<option>应用数学</option>
</select>
</td>
</tr>
<tr><td>体育特长:</td>
<td colspan="2">
<input type="checkbox"name="stuCheck" >篮球
<input type="checkbox"name="stuCheck" >足球
<input type="checkbox"name="stuCheck" >排球
<input type="checkbox"name="stuCheck" >游泳
</td>
</tr>
<tr><td>上传照片:</td><td colspan="2"><input type="file" ></td></tr>
<tr><td>密码:</td><td><input type="password"name="stuPwd" ></td></tr>
<tr><td>个人介绍:</td>
<td colspan="2"><textarea name="Letter"rows="4"cols="40"></textarea></td>
</tr>
<tr>
<td><input type="submit"value="提交" ><input type="reset"value="取消" ></td>
</tr>
</table>
</form>
</body>
</html>

https强制跳转项目

1、检查nginx

[root@lb01 ~]# nginx -V
--with-stream

2、创建证书存放目录

[root@lb01 ~]# mkdir /etc/nginx/ssl_key
[root@lb01 ~]# cd /etc/nginx/ssl_key/

3、生成证书

# 使用openssl命令充当CA权威机构创建证书(生产不使用此方式生成证书,不被互联网认可的黑户证书)
[root@lb01 ssl_key]# openssl genrsa -idea -out server.key 2048 #生成自签证书(公钥),同时去掉私钥的密码
[root@lb01 ssl_key]# openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt

4、配置nginx证书

[root@web01 nginx]# pwd
/etc/nginx/conf.d
# 注:ssh端口:443 1、编写配置文件
[root@lb01 conf.d]# vim game.conf
-----------------------------------------------------------------------------------------------------
upstream game {
server 172.16.1.8:80;
server 172.16.1.7:80;
server 172.16.1.9:80;
} # 强制跳转
server {
listen 80;
server_name game.test.com;
return 302 https://game.test.com;
} server {
server_name game.test.com;
listen 443 ssl; ssl_certificate /etc/nginx/ssl_key/server.crt;
ssl_certificate_key /etc/nginx/ssl_key/server.key; location / {
proxy_pass http://game;
include proxy_params;
}
}
----------------------------------------------------------------------------------------------------- 2、检测并重启nginx服务
[root@web01 conf.d]# nginx -t
[root@web01 conf.d]# systemctl restart nginx
[root@web01 conf.d]# netstat -nutlp 3、浏览器测试
域名解析:192.168.15.5 game.test.com
输入:去网站输入:http://192.168.15.5/

day11 四层负载均衡和http协议的更多相关文章

  1. Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理

    通过我们会用Nginx的upstream做基于http/https端口的7层负载均衡,由于Nginx老版本不支持tcp协议,所以基于tcp/udp端口的四层负载均衡一般用LVS或Haproxy来做.至 ...

  2. 安装Nginx四层负载均衡

    Nginx1.9开始支持tcp层的转发,通过stream实现的,而socket也是基于tcp通信. stream模块默认不安装的,需要手动添加参数:–with-stream,官方下载地址:downlo ...

  3. Nginx四层负载均衡概述

    目录 Nginx四层负载均衡概述 什么是负载均衡 负载均衡应用场景 四层,七层集群架构 四层负载均衡总结 Nginx如何配置四层负载均衡 nginx四层负载均衡端口转发 Nginx四层负载均衡概述 什 ...

  4. 14、Nginx四层负载均衡

    1.Nginx四层负载均衡基本概述 1.1.什么是四层负载均衡 四层负载均衡基于传输层协议包来封装的(如:TCP/IP),那我们前面使用到的七层是指的应用层,它的组装在四层基础之上,无论四层还是七层都 ...

  5. Nginx四层负载均衡

    目录 Nginx四层负载均衡概述 Nginx如何配置四层负载均衡 使用nginx四层负载均衡实现tcp的转发 Nginx四层负载均衡概述 什么是四层负载均衡 四层负载均衡是基于传输层协议包来封装的(如 ...

  6. 负载均衡服务之HAProxy https配置、四层负载均衡以及访问控制

    前文我们聊了下haproxy的访问控制ACL的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12817773.html:今天我们来聊一聊haproxy的h ...

  7. 【Nginx】面试官:给我讲讲Nginx如何实现四层负载均衡?

    写在前面 这次又被问到Nginx四层负载均衡的问题了,别慌,我们一起来细细分析这个看似简单的问题. 如果文章对你有点帮助,请关注 冰河技术 微信公众号,点赞.在看.留言和转发,大家的四连是我持续创作的 ...

  8. Keepalived高可用、四层负载均衡

    目录 Keepalived高可用 高可用简介 常用的工具 问题 名称解释 VRRP协议 部署keepalived 下载安装 Keepalived配置 保证nginx配置一样 解决keepalived的 ...

  9. 10、架构--keepalive、四层负载均衡

    笔记 1.晨考 1.HTTPS的作用,怎么实现的呢? 2.全栈部署HTTPS 只需在代理中部署HTTPS 3.反向代理 BBS 步骤 1.部署WEB机器 2.部署代理 4.如果 LB01 宕机了,怎么 ...

随机推荐

  1. 写一段java程序来执行linux命令

    摘要 在日常开发中,程序员需要经常查询服务器日志来排查问题和调试程序.如果是本地调试还好,但项目一旦发布到服务器上,每次查日志就很麻烦,而且日志量巨大,有时我们无法找到我们需要的信息.经常需要借助第三 ...

  2. jQuery中onload与ready区别

    onload和ready的区别document.ready和onload的区别为:加载程度不同.执行次数不同.执行速度不同.1.加载程度不同 document.ready:是DOM结构绘制完毕后就执行 ...

  3. 近期业务大量突增微服务性能优化总结-3.针对 x86 云环境改进异步日志等待策略

    最近,业务增长的很迅猛,对于我们后台这块也是一个不小的挑战,这次遇到的核心业务接口的性能瓶颈,并不是单独的一个问题导致的,而是几个问题揉在一起:我们解决一个之后,发上线,之后发现还有另一个的性能瓶颈问 ...

  4. django HTML 数据处理

    一.介绍 dgango  HTML 对 各种数据类型数据的调用展示 的个人工作总结 二.数据处理 1.元祖数据   t1 =('a','b','c',) 示例:    {{ t1.0 }}    {{ ...

  5. pl/sql 远程连接oracle数据库问题(TNS:丢失连接)

    前几天还可以连接的,突然就连接失效,别的电脑也连接不上 1.ping 远程数据库的IP,可以ping通. 2.检查服务端的tnsnames.ora文件和本机客户端比较,没问题. 3.查看监听是否启动  ...

  6. 说Redis

    一:简单介绍 Redis(Remote Dictionary Server 远程字典服务器) key-value 内存数据库 key是一个string value可以是string,list,hash ...

  7. 【浏览器】聊聊DOM

    [浏览器]聊聊DOM 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 作为前端开发,在以前的工作中大多是和DOM打交道,到 ...

  8. 网络带宽和速度测试windows和linux用iperf工具

    网络带宽和速度测试windows和linux用iperf工具   Iperf是一个网络性能测试工具.Iperf可以测试TCP和UDP带宽质量.Iperf可以测量最大TCP带宽,具有多种参数和UDP特性 ...

  9. Elastic AMP监控.NET程序性能

    什么是Elastic AMP Elastic APM 是一个应用程序性能监控系统.它可以请求的响应时间.数据库查询.对缓存的调用.外部 HTTP 请求等的详细性能信息,可以实时监控软件服务和应用程序. ...

  10. Taro 3.4 beta 发布: 支持 Preact 为应用开辟更多体积空间

    项目体积是困扰小程序开发者的一大问题,如果开发者使用 Taro React 进行开发,更是不得不引入接近 100K 的 React 相关依赖,这让项目体积变得更加捉襟见肘.因此,Taro v3.4 的 ...