Web集群服务-代理和负载均衡

1. 概述

1. 用户----->代理--->Web节点,后面只有一个节点,一般使用的是nginx代理功能即可

2. 后面如果是集群需要使用nginx负载均衡功能

2. 代理分类

代理分类方向应用
正向代理用户(服务器)-->代理--->外部(某网站)服务器通过代理实现共享上网/访问公网
反向代理用户(app/浏览器)--->代理--->网站web服务器给网站设置个统一入口,后面是网站集群(可以使用负载均衡功能)

3.  极速上手指南

3.1 环境概述

角色主机名ip
代理服务器lb0110.0.0.5/172.16.1.5
web服务器nginx_xing

10.0.0.8/172.16.1.8

3.2 给lb01配置nginx

参考链接: 

Web集群服务-Nginx-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/qq_63826739/article/details/142857315

nginx启动后默认是web服务器.

需要使用对应的模块:proxy模块(代理),upstream模块(负载均衡模块)

3.3 web服务器

##注释所有nginx子配置文件
##创建proxy.conf配置文件
server{listen 80;server_name proxy.oldboylinux.cn;error_log /var/log/nginx/proxy/error.log notice;access_log /var/log/nginx/proxy/access.log main;root /app/code/proxy;location / {index index.html;}
}
nginx -t
systemctl reload nginx
##创建站点目录
mkdir -p /app/code/proxy
##创建日志文件
mkdir -p /var/log/nginx/proxy
##创建首页文件内容
echo 'proxy.oldboylinux.cn web' >/app/code/proxy/index.html
##测试
curl -H Host:proxy.oldboylinux.cn 10.0.0.8

3.4 lb01代理服务器

1. 不需要配置站点目录

2. 仅仅需要转发proxy_pass

##创建proxy.conf配置文件
server{listen 80;server_name proxy.oldbooylinux.cn;location /{proxy_pass  http://10.0.0.8:80;proxy_set_header Host $http_host;} 
}
nginx -t
systemctl reload nginx
##测试
curl -H Host:proxy.oldboylinux.cn  http://10.0.0.5

浏览器访问10.0.0.5 

3.5 web记录用户真实ip地址 

现象:

用户请求经过代理,然后访问web,web服务器没有记录真实的客户端的ip地址,而是记录了代理的ip

解决:

1. 在代理上面修改请求头,proxy_set_header X-Forwarded-For  $remote_addr;

2. 最后在web服务器上记录了真实的ip地址,$http_x_forwarded_for"

##修改proxy.conf配置文件
server{listen 80;server_name proxy.oldbooylinux.cn;error_log /var/log/nginx/proxy/error.log notice;access_log /var/log/nginx/proxy/access.log main;location /{proxy_pass  http://10.0.0.8:80;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-For $remote_addr; ##只会一个ip地址proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  ##多层代理的时候,会记录每个代理的ip地址.相当于记录了多个} 
}
nginx -t
systemctl reload nginx
 浏览器访问,查看web服务器的日志

生产建议:

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; 

 3.6 部署nginxconf 站点并访问

##web01服务器配置文件
server{listen 80;server_name cfg.oldboylinux.cn;access_log /var/log/nginx/cfg/access.log main;error_log /var/log/nginx/cfg/error.log notice;root /app/code/cfg;location /{index index.html;  }}
##代理服务服务器配置文件
upstream cfg_pools{server 10.0.0.8:80;  ##资源池,以后可以写多个web服务器地址server 10.0.0.7:80;  ##创建分组/池塘,proxy_pass中使用即可server 10.0.0.6:80;
}
server{listen 80;server_name cfg.oldboylinux.cn;access_log /var/log/nginx/cfg/access.log main;error_log /var/log/nginx/cfg/error.log notice;location /{proxy_pass http://cfg_pools;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;}
}

3.7 负载均衡模块的选项

upstream模块 sever 指令支持的选项:

upstrem pools {

        server 10.0.0.7:80  weight=1 max_fails=3 fail_timeout=10s;

        server 10.0.0.8:80  weight=1 max_fails=3 fail_timeout=10s;

        server 10.0.0.9:80 backup; server 10.0.0.9:80 backup;

}

server后面可以加的选项说明应用场景

weight

权重,根据权重nginx分配请求

如果web服务端配置不同,1c2g, 2c8g.

代码更新与测试的时候,给测试服务器较小的权重

max_failsnginx具备一些健康检查功能,指定失败的次数,超过这个次 数就认为节点挂了一般情况下可以设置1-3即可. 不太重要,缓存业 务,可以设置为10
fail_timeout认为节点挂了后间隔多久再次检查健康情况. 默认是 10s.根据要求设置时间即可,可以长一些.30/60s
backup备胎服务器,其他所有服务器都挂了的时候,才启用使用的时候需要考虑雪崩的情况

4. wordpress接入负载均衡

1. 接入nfs挂载

2. db数据库库,用户

3. web01,web02 部署环境ngx+php,测试,部署代码,挂载nfs

4. 接入负载

4.1 nfs存储 

参考:数据服务-存储服务(NFS)-CSDN博客

##编写存储目录
vim/etc/exports
/wp-uploads/ 172.16.1.0/24(rw,all_squash)
##创建目录
mkdir -p /wp-uploads/
chown  -R nfsnobody.nfsnobody /wp-uploads/
systemctl restart nfs

4.2 db数据库

参考:Web集群服务-Nginx-CSDN博客

 4.3 web01

yum install -y nfs-utils
mount -t nfs 172.16.1.31:/wp-uploads  /app/code/blog/wp-content/uploads/ ##挂载

4.4 接入负载均衡

upstream blog_pools{server 10.0.0.8:80;
}
server {listen 80;server_name blog.oldboylinux.cn;error_log /var/log/nginx/blog/error.log notice;access_log /var/log/nginx/blog/access.log main;location /{proxy_pass http://blog_pools;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;}
}
nginx -t
systemctl reload -nginx

5. 会话保持

5.1 概述

用户的请求,登录的请求,经过负载均衡后落到后面的web服务器上,登录的状态/信息也会记录在web服务器上,就会导致不通的web服务器 上,登录状态不统一,造成用户频繁需要登录

5.2 cookie vs session

技术共同点区别
cookie存放用户的信息,登 录信息存放在客户端浏览器上
session        存放用户的信息,登 录信息存放在服务器上

 5.3 会话保持方案

1. 登录状态写入cookie中

2. ip_hash方法

3. 通过redis实现phpmyadmin/kodbox会话共享

5.3.1 部署phpMyAdmin

db准备phpmyadmin的用户
grant all on *.* 'phpmyadmin@'172.16.1.%' identified by '1';
在nginx上写配置文件
server{listen 80;server_name phpadmin.oldboylinux.cn;access_log /var/log/nginx/phpadmin/access.log main;error_log /var/log/nginx/phpadmin/error.log notice;root /app/code/phpadmin;location / {index index.php;}location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_buffering on;fastcgi_buffers 64 64k;fastcgi_index  index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}
}
部署代码:

phpMyAdminicon-default.png?t=O83Ahttps://www.phpmyadmin.net/

浏览器解析与访问
##修改权限
chown -R nginx.nginx /var/lib/php/session
##手动创建连接数据库的配置文件
cp /app/code/phpadmin/config.sample.inc.php  /app/code/phpadmin/config.inc.php
##修改config.inc.php第三十行服务器地址改为数据库服务器地址
grep -n host config.inc.php 
30:$cfg['Servers'][$i]['host'] = '172.16.1.51';

5.3.2 部署redis服务

##在数据库服务器上安装redis
yum install -y redis
##修改/etc/redis.conf
bind 127.0.0.1 172.16.1.51  ##增加本地网卡的ip
##服务启动和查看端口
systemctl enable now  redis
ss -lntup|grep redis

 5.3.3 负载均衡配置文件

upstream phpadmin_pools{server 10.0.0.8:80;
}
server{listen 80;server_name phpadmin.oldboylinux.cn;error_log /var/log/nginx/phpadmin/error.log notice;access_log /var/log/nginx/phpadmin/access.log main;location /{proxy_pass http://phpadmin_pools;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
nginx -t
systemctl reload nginx

5.3.4 php配置文件指定会话存放位置

##
cd /etc/php-fpm.d
cp www.conf session.conf
egrep -v '^$|;' session.conf 
vim  session.conf
##书写配置文件
[session]  ###修改
user = nginx  ##修改
group = nginx  ##修改
listen = 127.0.0.1:9001  ###修改
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = redis  ##修改
php_value[session.save_path]    = tcp://172.16.1.51:6379 ##修改
php_value[soap.wsdl_cache_dir]  = /var/lib/php/wsdlcache
##检查语法
php-fpm -t
systemctl  reload php-fpm
ss -lntup|grep php ##有9001端口

 5.3.5 修改ngx配置 admin转发到9001端口的php处理

server{listen 80;server_name phpadmin.oldboylinux.cn;access_log /var/log/nginx/phpadmin/access.log main;error_log /var/log/nginx/phpadmin/error.log notice;root /app/code/phpadmin;location / {index index.php;}location ~ \.php$ {fastcgi_pass 127.0.0.1:9001; ##传递给9001端口fastcgi_buffering on;fastcgi_buffers 64 64k;fastcgi_index  index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}
}
nginx -t
systemctl reload nginx 

5.3.6 最终测试

浏览器访问登录phpadmin,查看redis数据库是否有数据
##登录phpadmin后刷新页面,查看redis数据
redis-cli
KEYS *

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/56393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:进程控制(三)——进程程序替换

目录 一、概念 二、使用 1.单进程程序替换 2.多进程程序替换 3.exec接口 4.execle 一、概念 背景 当前进程在运行的时候,所执行的代码来自于自己的源文件。使用fork创建子进程后,子进程执行的程序中代码内容和父进程是相同的,如果子进…

Python基础语法条件

注释 注释的作用 通过用自己熟悉的语言,在程序中对某些代码进行标注说明,这就是注释的作用,能够大大增强程序的可读性。 注释的分类及语法 注释分为两类:单行注释 和 多行注释。 单行注释 只能注释一行内容,语法如下…

跟着小土堆学习pytorch(一)——Dataset

文章目录 一、前言二、dataset三、代码展示 一、前言 pytorch也是鸽了很久了,确定了下,还是用小土堆的教程。 kaggle获取数据集 二、dataset dateset:数据集——提供一种方式去获取数据及其标签 如何获取数据及其标签以及总共多少个数据…

PostgreSQL学习笔记六:模式SCHEMA

模式(Schema) PostgreSQL中的模式(Schema)是一个命名的数据库对象集合,包括表、视图、索引、数据类型、函数、存储过程和操作符等。模式的主要作用是组织和命名空间数据库对象,使得同一个数据库中可以包含…

基于gewechat制作第一个微信聊天机器人

Gewe 个微框架 GeWe(个微框架)是一个创新性的软件开发框架,为个人微信号以及企业信息安全提供了强大的功能和保障。GeWe的设计旨在简化开发过程,使开发者能够高效、灵活地构建和定制通信协议,以满足不同应用场景的需求…

JavaScript object(2)

这样的话,就变成只读了。

外包干了5天,技术明显退步

我是一名本科生,自2019年起,我便在南京某软件公司担任功能测试的工作。这份工作虽然稳定,但日复一日的重复性工作让我逐渐陷入了舒适区,失去了前进的动力。两年的时光匆匆流逝,我却在原地踏步,技术没有丝毫…

Qualitor checkAcesso.php 任意文件上传漏洞复现(CVE-2024-44849)

0x01 漏洞概述 Qualitor 8.24及之前版本存在任意文件上传漏洞,未经身份验证远程攻击者可利用该漏洞代码执行,写入WebShell,进一步控制服务器权限。 0x02 复现环境 FOFA:app="Qualitor-Web" 0x03 漏洞复现 PoC POST /html/ad/adfilestorage/request/checkAcess…

【IC验证】随机约束

1.约束 (1)注意 一般随机约束只能在类中使用; (2)实现步骤 在定义变量时,用rand/randc关键字进行修饰; 定义约束; 创建并实例化类后,调用随机约束方法; &am…

光平面标定代码

本篇文章主要给出光平面标定代码,鉴于自身水平所限,如有错误,欢迎批评指正。(欢迎进Q群交流:874653199) 数据分为棋盘格数据和激光条数据,激光条数据为在第22个位姿至第26个位姿下打在棋盘格标定…

初识Linux之指令(二)

一:head指令 head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的 开头至标准输出中,而 tail 想当然尔就是看档案的结尾。 语法:head 【参数】 【文件】 功能&…

開發 meshtastic 聊天機器人(2)

利用 Web 串接主機附近周邊藍芽(含 meshtastic client) pip install bleak (這個比較簡單) ----另外一個為 pybluez2 (pybluez) 2.程式 import streamlit as st import asyncio from bleak import BleakScannerasync def fetch_data():devices await BleakScanner.discover(…

京存非编存储走进中央民族大学

中央民族大学是一所具有鲜明民族特色的综合性全国重点大学,是国家民委、教育部、北京市共建高校。学校前身为1941年成立的延安民族学院。新中国成立后,经中央政府批准,1951年在北京成立中央民族学院,1993年11月更名为中央民族大学…

【量化交易】聚宽安装

安装JQData 更换源: 如果使用的是pip默认的PyPI源,可以尝试更换为一个更快的国内镜像源。例如阿里云、豆瓣等提供的PyPI镜像。 更改方法可以通过设置环境变量或者在pip命令中直接指定: PS C:\Users\bilirjs\Documents> pip config set …

No.13 笔记 | 网络安全防护指南:从法律法规到技术防御

一、法律法规 《中华人民共和国网络安全法》要点 遵守法律:所有个人和组织在使用网络时,必须遵守宪法和法律,不得利用网络从事危害国家安全等活动。 个人信息保护:禁止非法获取、出售或提供个人信息。若违反但未构成犯罪&#x…

Karmada核心概念

以下内容为翻译,原文地址 Karmada 是什么? | karmada 一、Karmada核心概念 一)什么是Karmada 1、Karmada:开放,多云,多集群Kubernetes业务流程 Karmada (Kubernetes Armada)是一个Kubernetes管理系统&…

【NTN 卫星通信】卫星通信的专利

1 概述 好久没有看书了,最近买了本讲低轨卫星专利的书,也可以说是一个分析报告。推荐给喜欢的朋友。 2 书籍截图 图1 封面 图2 波音低轨卫星专利演进 图3 低轨卫星关键技术专利发展阶段 图4 第一页 3 参考文献 产业专利分析报告–低轨卫星通信技术

apisix云原生网关

定义 企业级网关通过域名、路由将请求分发到对应的应用上,通常承载数千个服务的流量,对稳定性有较高要求。 CNCF全景图 选型 Kubernetes抽象出两个核心概念:Service,为多个Pod提供统一的访问入口;Ingress&#xff…

【火山引擎】调用火山大模型的方法 | SDK安装 | 配置 | 客户端初始化 | 设置

豆包 (Doubao) 是字节跳动研发的大规模预训练语言模型。 目录 1 安装 2 配置访问凭证 3 客户端初始化 4 设置地域和访问域名 5 设置超时/重试次数 1 安装 通过pip安装PYTHON SDK。 pip install volcengine-python-sdk[ark] 2 配置访问凭证 获取 API Key 访问凭证具体步…

docker容器运行一段时间提示Failed to initialize NVML: Unknown Error

情况描述 服务器使用docker启动容器。启动以后一切正常也能跑程序。但是,在运行一段时间(2天左右不等),会发现gpu掉了。输入nvidia-smi提示 Failed to initialize NVML: Unknown Error 主要发生条件是,docker启动的…