day11 四层负载均衡和https
四层负载均衡
1.四层负载均衡特点
1.1.四层负载均衡仅能转发TCP/IP协议、UDP协议、通常用来转发端口,如:tcp/22、udp/53;
1.2.四层负载均衡可以用来解决七层负载均衡端口限制问题;(七层负载均衡最大使用65535个端口号)
1.3.四层负载均衡可以解决七层负载均衡高可用问题;(多台后端七层负载均衡能同时的使用)
1.4.四层的转发效率比七层的高得多,但仅支持tcp/ip协议,不支持http和https协议;
1.5.通常大并发场景通常会选择使用在七层负载前面增加四层负载均衡。
2、四层的使用场景
1、MySQL服务
2、SSH代理端口
3、网站的负载均衡代理
3、四层的实现
必须要有这个可以通过nginx-v来查看是否有 --with-stream 需要用官方源下载的nginx才有,nginx.org
注:epel源安装的Nginx无法使用四层负载均衡
四层负载均衡和七层负载均衡基本一样,也有连接池stream ,proxy_pass往连接池丢请求
#nginx.conf也要修改http内容删除 加上stream{
include /etc/nginx/stream.conf/*.conf;
}
#upstream:四层只能配置在stream模块里,七层只能配置在http http==stream
#配置文件也不能写在conf.d里
upstream [连接池的名称] {
[存放的IP]
server [ip1+端口80];
server [ip1+端口80];
}
server{
listen 80;
proxy_pass [连接池名称]
}
#实际nginx.conf配置
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;
}
# vim /etc/nginx/stream.conf/stream.conf
upstream lol{
server 172.16.1.5:80; #指向了lb01的ip
}
server{
listen 80;
proxy_pass lol;
}
四层负载均衡案例
案例1. :要求使用192.168.15.6的1234端口链接192.168.15.5的22端口
修改四层负载均衡 /etc/nginx/stream.conf/ssh.conf
upstream lol{
server 172.16.1.5:22; #指定对方IP和端口
}
server{
listen 1234; #指定自己用哪个端口
proxy_pass lol;
}
#测试(通过nginx代理ssh)
ssh 192.168.15.6 -p 1234
案例2:要求使用192.168.15.6的33060端口代理192.168.15.51的3306端口
vim mysql.conf
upstream gailun{
server 172.16.1.51:3306;
}
server{
listen 33060;
proxy_pass gailun;
}
#测试在db01机器
mysql -uroot -p123456 -h192.168.15.6 -P33060
HTTPS
#介绍
为什么需要使用HTTPS,因为HTTP不安全,当我们使用http网站时,会遭到劫持和篡改,如果采用https协议,那么数据在传输过程中是加密的,所以黑客无法窃取或者篡改数据报文信息,同时也避免网站传输时信息泄露。
简而言之HTTPS是主要用来加密传输
HTTP的问题:
中间人攻击,网站被代理修改
如何使用HTTPS认证
#详细解释
我们首先需要申请证书,先去登记机构进行身份登记,我是谁,我是干嘛的,我想做什么,然后登记机构再通过CSR发给CA机构,CA中心通过后会生成一堆公钥和私钥,公钥会在CA证书链中保存,公钥和私钥证书我们拿到后,会将其部署在WEB服务器上
1.当浏览器访问我们的https站点时,他会去请求我们的证书
2.Nginx这样的web服务器会将我们的公钥证书发给浏览器
3.浏览器会去验证我们的证书是否合法有效
4.CA机构会将过期的证书放置在CRL服务器,CRL服务的验证效率是非常差的,所以CA有推出了OCSP响应程序,OCSP响应程序可以查询指定的一个证书是否过期,所以浏览器可以直接查询OSCP响应程序,但OSCP响应程序性能还不是很高
5.Nginx会有一个OCSP的开关,当我们开启后,Nginx会主动上OCSP上查询,这样大量的客户端直接从Nginx获取证书是否有效
6.浏览器再次访问的时候,web服务器会将证书和验证结果一起发给浏览器,浏览器直接与我们建立连接
#使用HTTPS认证
1.检查nginx -V 是否有这个--with-http_ssl_module
2.创建证书存放目录ssl_key
[root@web02 ~]# mkdir /etc/nginx/ssl_key
3.制造证书
[root@web02 ~]# cd /etc/nginx/ssl_key/ #先要到这个目录下
[root@web02 ssl_key]# openssl genrsa -idea -out server.key 2048 #(生成私钥)
Generating RSA private key, 2048 bit long modulus
....+++
.............+++
e is 65537 (0x10001)
[root@web02 ssl_key]# openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt #生成公钥
会在该目录下生成两个文件
[root@web02 ssl_key]# ll
total 8
-rw-r--r-- 1 root root 1220 Nov 1 19:18 server.crt #公钥
-rw-r--r-- 1 root root 1708 Nov 1 19:18 server.key #私钥
4.配置nginx代理
[root@web02 ssl_key]# vim /etc/nginx/conf.d/game.conf
server{
server_name cjml.com;
listen 443 ssl; #ssl开启 监听443端口
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;
}
}
5.重启nginx并测试
systemctl restart nginx
#网址输入下面内容,发现如下图即为成功
https://192.168.15.8/demo.html
全栈HTTPS(在负载均衡里设置https)
#先把web02nginx配置修改回来
1.创建ssl_key
[root@lb01 ssl_key]# mkdir /etc/nginx/ssl_key
2.生成公钥私钥
[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 #公钥
3.设置nginx代理,并加入强制跳转
[root@lb01 ssl_key]# vim /etc/nginx/conf.d/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 cjml.com;
return 302 https://cjml.com;
}
server {
server_name cjml.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;
}
}
4.重启nginx并测试
systemctl restart nginx