day-34 反向代理、负载均衡服务(1)

一、 反向代理

1、代理服务基本概述

反向代理是通过内网访问外网,反向代理只能代理一台

代理服务器接收接受客户端的连接请求,将请求转发费内网的服务器,并将服务器上得到的结果返回给客户端,此时代理服务器对外就是反向代理服务器。

2、正向代理和反向代理

正向代理:客户端<——> 代理 <——> 服务端

反向代理:客户端 ----> 代理 -----> 服务端(用于公司集群架构)

区别在于服务 ”对象“ 不一样

正向代理的对象是客户端,为客户服务。

反向代理的对象是服务端,为服务端服务。

3、nginx代理支持的代理协议

图片.png

4、nginx反向代理场景实践

1、proxy代理服务器,配置监听eth0的80端口,使10.0.0.0网段的用户,能够通过代理服务器访问到后端的172.16.1.7的8080端口内容

#1、编辑代理配置文件
[root@lb01 ~]# cd /etc/nginx/conf.d/
[root@lb01 conf.d]# cat proxy_web.yangdan.com.conf 
server {
    listen 80;
    server_name web.yangdan.com;

    location / {
        proxy_pass http://10.0.0.7:80;
        proxy_http_version 1.1;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

#2、检测语法,并重启,设置开机自启动
[root@lb01 conf.d]# nginx -t
[root@lb01 conf.d]# systemctl restart nginx
[root@lb01 conf.d]# systemctlenable nginx

2、web01 服务器上 配置一个网站,监听在8080端口,仅172网段能访问

#1、编辑web01后端配置文件
[root@lb01 ~]# cd /etc/nginx/conf.d/
[root@web01 conf.d]# cat web.yngdan.com.conf 
server {
    listen 80;
    server_name web.yangdan.com;

    location / {
        root /html;
        index index.html;
    }
}

#2、创建站点目录
[root@web01 conf.d]# mkdir /html

#3、把web01写入到站点目录下的index.html下
[root@web01 conf.d]# echo "web01" > /html/index.html

#4、检测语法、并重启nginx服务
[root@web01 conf.d]# systemctl restart nginx

5、扩展知识

服务器默认有65535个端口,通常系统服务需要占用部分端口:1~10000
配置一台主机作为nginx代理服务,最多支持5w的tcp连接,因为端口数受限
配置一台后端的应用服务,最多能支持2w-3w左右的tcp连接,因为当一个请求过来
nginx代理通过随机端口--请求-->nginx应用服务--通过-->随机端口--请求-->php动态程序--通过-->随机端口-->mysql

二、负载均衡

6、负载均衡

就是将工作任务进行平衡、分摊到多个操作进行运行。

负载均衡提供了一种透明且廉价有效的方法扩展服务器和网络设备、加强网络数据处理能力、增强吞吐量、提高网路络的可用性和灵活性。

7、四层负载均衡 (转发)(传输层)

四层负载均衡工作在OSI模型的传输层,由于在传输层,只有TCP/UDP协议,这两种协议中除了包含源IP、目标IP以外,还包含源端口号及目的端口号。四层负载均衡服务器在接受到客户端请求后,以后通过修改数据包的地址信息(IP+端口号)将流量转发到应用服务器。效率高,性能快

四层负载均衡的效率高、能力强。四层是基于ip+端口的;

8、七层负载均衡(代理)(应用层)

七层负载均衡工作在OSI模型的应用层,应用层协议较多,常用http、radius、dns等。七层负载就可以基于这些协议来负载。这些应用层协议中会包含很多有意义的内容。比如同一个Web服务器的负载均衡,除了根据IP加端口进行负载外,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。功能多,效率低。

基于 URL 等应用层信息的负载均衡;

基于 MAC 地址的二层负载均衡和基于 IP 地址的三层负载均衡。


图片.png

9、七层负载均衡配置实例

#1、进到conf.d目录里、准备nginx负载均衡
[root@lb01 ~]# cd /etc/nginx/conf.d
[root@lb01 conf.d]# cat proxy_web.oldxu.com.conf 
upstream web {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
}

server {
    listen 80;
    server_name web.oldxu.com;

    location / {
        proxy_pass http://web;
        include proxy_params;
    }
}

#2、将nginx负载均衡文件proxy_prarms写到一个文件里,方便调度使用
[root@web ~]# cd /etc/nginx/con.d
[root@lb01 conf.d]# cat /etc/nginx/proxy_params 
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;


#后端web配置 (为了区分,将两台web的站点配置的不一样,以便测试效果)
[root@web01 conf.d]# cat web.oldxu.com.conf 
server {
    listen 80;
    server_name web.oldxu.com;

    location / {
        root /html;
        index index.html;
    }
}

10、nginx负载均衡调度算法

图片.png

11、nginx负载均衡后端状态

图片.png

12、七层负载均衡实现多台登录测试

1、在 172.16.1.8 和 172.16.1.7 安装 phpmyadmin

分别进行测试-->测试登录

wget [https://files.phpmyadmin.net/phpMyAdmin/4.8.4/phpMyAdmin-4.8.4-all-languages.zip](https://files.phpmyadmin.net/phpMyAdmin/4.8.4/phpMyAdmin-4.8.4-all-languages.zip)

#1、安装phpadmin(web01、web02都装)
[root@web01 ~]# cd /etc/nginx/conf.d
[root@web01 conf.d]# cd /code
[root@web01 code]# rz phpMyAdmin-4.8.4-all-languages.zip
[root@web01 code]# unzip phpMyAdmin-4.8.4-all-languages.zip

#2、配置phpadmin远程连接到数据库
[root@web01 code]# cd phpMyAdmin-4.8.4-all-languages/
[root@web01 phpMyAdmin-4.8.4-all-languages]# cp config.sample.inc.php config.inc.php
[root@web01 phpMyAdmin-4.8.4-all-languages]# vim config.inc.php
/* Server parameters */
$cfg['Servers'][$i]['host'] = '172.16.1.51';

2、接入负载均衡 ------> 代理后端两台

#配置负载均衡

[root@lb01 ~]# cd /etc/nginx/conf.d
[root@lb01 conf.d]# cat proxy_php.oldxu.com.conf 
upstream  php {
    ip_hash;
    server 172.16.1.7;
    server 172.16.1.8;
}

server {
    listen 80;
    server_name php.oldxu.com;
    location / {
        proxy_pass http://php;
        proxy_set_header Host $http_host;
    }
}

3、既希望能够实现流量的均摊,又希望会话的问题得以保持, 所以引入了redis

#1、安装Redis
[root@redis ~]# yum install redis -y

#2、配置redis
[root@redis ~]# sed -i '/^bind/c bind 127.0.0.1 172.16.1.51' /etc/redis.conf

#3、启动redis
[root@redis ~]# systemctl enable redis
[root@redis ~]# systemctl start redis

#4、改造php, session写本地修改为写入redis中  (所有的web上都需要配置)
    前提:  已经安装过了redis的模块---> php71w-pecl-redis
    
#1、修改php存储session至redis中
[root@web01 ~]# vim /etc/php.ini
session.save_handler = redis
session.save_path = "tcp://172.16.1.51:6379?weight=1"

#2、修改php-fpm 注释默认存储session的位置
[root@web01 ~]# vim /etc/php-fpm.d/www.conf
;php_value[session.save_handler] = files
;php_value[session.save_path]    = /var/lib/php/session

#3、将修改后的配置文件,推送至web02
[root@web01 ~]# scp /etc/php.ini [email protected]:/etc/  
[root@web01 ~]# scp /etc/php-fpm.d/www.conf  [email protected]:/etc/php-fpm.d/www.conf

#4、重启172.16.1.7 172.16.1.8两台服务器的php-fpm
[root@web02 conf.d]# systemctl restart php-fpm

#5、测试效果
1.浏览器登录测试  (ok)
    
2.查看redis的sessionID和    浏览器cookie中提交的sessionID是否一致
[root@db01 ~]# redis-cli 
127.0.0.1:6379> keys *
1) "PHPREDIS_SESSION:38ecc8696c70a7252d943e7cb9b20f70"

你可能感兴趣的:(day-34 反向代理、负载均衡服务(1))