nginx2

Nginx反向代理(七层代理)、Nginx的TCP/UDP调度器(四层代理)、

一、Nginx反向代理(七层代理)

步骤:

​    部署后端web服务器集群

​    配置Nginx代理服务器

​        配置upstream集群池

​        调节集群池权重比

<img src="/home/student/Desktop/QYF笔记&nsd2411/资源包/image-20241008213058281.png" style="zoom: 67%;" />

1.部署后端web服务器集群

​    两个服务器web1和web2安装httpd服务,并创建不同网页用以实验

```shell
#进入web1操作:
yum -y install httpd
echo "test web1" > /var/www/html/index.html
systemctl enable httpd --now
```

```shell
#进入web2操作:
yum -y install httpd
echo "test web2" > /var/www/html/index.html
systemctl enable httpd --now
```

2.配置Nginx代理服务器:/usr/local/nginx/conf/nginx.conf

> 配置upstream集群池并调节权重比

```shell
http {
...
#使用upstream集群池定义后端服务器集群,集群名称自定义
#使用server定义集群中的具体服务器和端口
      upstream webtestserver {
           #设置相同客户端访问相同Web服务器
         ip_hash;
           #设置权重控制weight后台服务器访问比例,权重越大任务的分配量就越大
         server 192.168.99.100:80 weight=2;
         #设置健康检查
         #max_fails设置后台服务器连接失败的次数
         #fail_timeout设置后台服务器连接失败后再次连接的等待时间
         server 192.168.99.200:80 max_fails=2 fail_timeout=30;
         #设置down标记使主机暂时不参与集群活动,用于停机修复或者做项目时临时借调
         server 192.168.99.120:80 down;
      }
      server {
          listen       80;
          server_name  localhost;
  
          location / {
              root   html;
              index  index.html index.htm;
              #通过proxy_pass将用户的请求转发给服务器集群,名称同上
              proxy_pass http://webtestserver;
          }
...
```

> 设置ip_hash后用户访问只会被分配给上次请求相同的服务器

二、Nginx的TCP/UDP调度器(四层代理)

使用Nginx实现TCP/UDP调度器功能,采用轮询的方式调用后端SSH服务器

<img src="image-20241008213311333.png" style="zoom: 67%;" />

```shell
添加stream参数开启4层代理模块
./configure --with-stream
/usr/local/nginx/sbin/nginx -V    #查看安装模块情况
```

修改nginx配置文件:/usr/local/nginx/conf/nginx.conf

```shell
...
stream {                           #stream与http同级
    upstream testssh {             #创建集群,名称自定义
        server 192.168.99.100:22;  #后端SSH服务器的IP和端口
        server 192.168.99.200:22;
    }
    server {                #调用集群
        listen 2222;        #Nginx代理监听的端口,可以自己定义
        proxy_pass testssh; #调用backend集群
    }
}
http {
...
}
```

重载配置、测试连接到nginx代理服务器监听的2222接口,而不是代理服务器的22端口或者后端的web服务器

```shell
ssh 192.168.99.5 -p 12345    #使用该命令多次访问查看轮询效果
```

三、nginx的优化与查错

1.优化客户端使用浏览器访问不存在的页面192.168.99.5/xxxxxxx时提示404文件未找到

​    修改nginx配置文件:/usr/local/nginx/conf/nginx.conf

```shell
charset utf-8;                    #仅在需要中文时修改该选项,可以识别中文
error_page   404  /404.html;    #当网站发生404报错时,给用户看的页面

echo "抱歉!您访问的页面不存在呢?" > html/404.html
------------------------------------------------------------------
HTTP常见状态码列表:
200 正常
301 & 302 重定向
400 请求语法错误
401 访问被拒绝
403 禁止访问
404 资源找不到
414 请求URI头部太长
500 服务器内部错误
502 代理服务器无法正常获取下一个服务器正常的应答
```

​    重载,测试

2.查看nginx服务网站的状态信息

​    需要使用--with-http_stub_status_module开启状态页面模块

```shell
[root@proxy nginx-1.22.1]# /usr/local/nginx/sbin/nginx  -V
nginx version: nginx/1.22.1
built by gcc 8.5.0 20210514 (Red Hat 8.5.0-10) (GCC) 
configure arguments: --with-stream --with-http_stub_status_module
```

​    修改nginx配置文件:/usr/local/nginx/conf/nginx.conf

```shell
server {
    listen       80;
    server_name  localhost;
    location /status {        #定义状态页面
        stub_status on;
        allow 192.168.99.5;   #允许99.5访问
        deny all;             #其他人全部拒绝
    }
    charset utf-8;
}
```

​    重载,测试

```shell
[root@proxy nginx-1.22.1]# curl 192.168.99.5/status
Active connections: 1 
server accepts handled requests
 1 1 1 
Reading: 0 Writing: 1 Waiting: 0
------------------------------------------------------------------
    Active connections:当前活动的连接数量,有多少人访问网站
    Accepts:已经接受客户端的连接总数量,有多少人曾经来过
    Handled:已经处理客户端的连接总数量
    Requests:客户端发送的请求数量
    Reading:当前服务器正在读取客户端请求头的数量
    Writing:当前服务器正在写响应信息的数量,指服务器正在给客户回应信息
    Waiting:当前多少客户端在等待服务器的响应
```

3.优化Nginx并发量

​    并发测试,使用测试主机作为海量客户访问proxy主机

```shell
#-n任务量,-c是连接数
ab -n 10000 -c 10000 http://192.168.99.5/

socket: Too many open files (24)    #linux系统有限制,文件打开数量不超过1024
```

​    优化Linux内核参数可打开最大文件数量(临时)

```shell
ulimit -n            #查看最大文件数量
ulimit -n 100000    #临时设置最大文件数量
```

​    修改后,再次测试;    

​    设置可打开最大文件数量目录(永久):/etc/security/limits.conf

```shell
*               soft    nofile            100000
*               hard    nofile            100000
#用户或组   软限制或硬限制  需要限制的项目      限制的值
```

​    重启系统生效

​    服务器主机增加并发量修改Nginx配置文件目录:/usr/local/nginx/conf/nginx.conf

```shell
worker_processes  2;     #与真机CPU核心数量一致
events {
       worker_connections  50000;    单个工作进程可接受访问的数量
}
```

​    重载,测试

4.优化Nginx数据包头缓存支持超长地址

​    默认情况下nginx无法支持长地址栏,会报414错误

​    修改Nginx配置文件,增加数据包头部缓存大小

```shell
http {
    client_header_buffer_size    200k;    #请求包头信息的缓存大小,默认1k
    large_client_header_buffers  4 200k;  #请求包头部信息的缓存个数与容量
    include       mime.types;
    default_type  application/octet-stream;
    ....
}
```

​    重载,测试

5.浏览器本地缓存静态数据

​    修改Nginx配置文件,定义对静态页面的缓存时间

```shell
server {
...  
    location ~* \.(jpg|txt|png|html|php)$ {
        expires 30d;  #新添加,定义客户端缓存时间为30天
    }
....
}
```

​    重载,测试,火狐浏览器查看本地缓存数据访问about:cache

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

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

相关文章

调用kimi api

官网支持python&#xff0c;curl和node.js 因为服务器刚好有php环境&#xff0c;所以先用curl调个普通的语音沟通api <?php // 定义 API Key 和请求地址 define(MOONSHOT_API_KEY, sk-PXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXgk1); define(MOONSHOT_API_URL, https://…

关于 UPDATE 语句 和 SELECT ... FOR UPDATE 的对比分析,包括语法、功能、锁机制、使用场景及示例代码

以下是关于 UPDATE 语句 和 SELECT ... FOR UPDATE 的对比分析&#xff0c;包括语法、功能、锁机制、使用场景及示例代码&#xff1a; 1. UPDATE 语句 功能 直接修改数据&#xff1a;立即更新表中的数据&#xff0c;并提交修改。无显式锁&#xff1a;虽然会自动加锁&#xff…

在航电系统中提高可靠性的嵌入式软件设计

1.总线余度设计 数据传输采用双余度总线设计&#xff0c;CANFD为主&#xff0c;RS485为备。发送方将相同的数据分别通过双总线来发送&#xff0c;接收方优先处理主线数据。由于总线上数据频率固定&#xff0c;可设置定时器监控主总线的数据&#xff0c;当定时器超时后&#xff…

第十五届蓝桥杯大赛软件赛省赛Python 大学 C 组:5.回文数组

题目1 回文数组 小蓝在无聊时随机生成了一个长度为 n 的整数数组&#xff0c;数组中的第 i 个数为 ai&#xff0c;他觉得随机生成的数组不太美观&#xff0c;想把它变成回文数组&#xff0c;也是就对于任意 i∈[1,n] 满足 a i a n − i 1 a_ia_{n−i}1 ai​an−i​1。 小蓝…

netty中的WorkerGroup使用详解

Netty中WorkerGroup的深度解析 WorkerGroup是Netty线程模型中的从Reactor线程组&#xff0c;负责处理已建立连接的I/O读写、编解码及业务逻辑执行。其设计基于主从多Reactor模型&#xff0c;与BossGroup分工协作&#xff0c;共同实现高并发网络通信的高效处理。 一、WorkerGro…

模运算核心性质与算法应用:从数学原理到编程实践

目录 &#x1f680;前言&#x1f31f;数学性质&#xff1a;模运算的理论基石&#x1f4af;基本定义&#xff1a;余数的本质&#x1f4af;四则运算规则&#xff1a;保持同余性的关键 &#x1f99c;编程实践&#xff1a;模运算的工程化技巧&#x1f4af;避免数值溢出&#xff1a;…

#Git 变基(Rebase)案例

适合学习理解的 Git 变基&#xff08;Rebase&#xff09;案例 为了帮助你更好地理解 Git 变基&#xff08;Rebase&#xff09;的操作和效果&#xff0c;下面通过一个简单的案例来演示变基的过程和影响。 案例背景 假设我们有一个 Git 仓库&#xff0c;包含两个分支&#xff1…

泰博云平台solr接口存在SSRF漏洞

免责声明&#xff1a;本号提供的网络安全信息仅供参考&#xff0c;不构成专业建议。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权&#xff0c;请及时与我联系&#xff0c;我将尽快处理并删除相关内容。 漏洞描述 SSRF漏洞是一种在未能获取服务器…

MyBatis 动态SQL 详解!

目录 一、 什么是动态 SQL&#xff1f;二、 为什么需要动态 SQL&#xff1f;三、 MyBatis 动态 SQL 标签四、 标签详解及示例1、 if 标签2、 choose、when、otherwise 标签3、 where 标签4、 set 标签5、 foreach 标签6、 sql、include 标签 五、 总结 &#x1f31f;我的其他文…

阿里云服务器遭遇DDoS攻击有争议?

近年来&#xff0c;阿里云服务器频繁遭遇DDoS攻击的事件引发广泛争议。一方面&#xff0c;用户质疑其防御能力不足&#xff0c;导致服务中断甚至被迫进入“黑洞”&#xff08;清洗攻击流量的隔离机制&#xff09;&#xff0c;轻则中断半小时&#xff0c;重则长达24小时&#xf…

如何在Springboot的Mapper中轻松添加新的SQL语句呀?

在如今的软件开发界&#xff0c;Spring Boot可是非常受欢迎的框架哦&#xff0c;尤其是在微服务和RESTful API的构建上&#xff0c;真的是让人爱不释手&#xff01;今天&#xff0c;我们就来聊聊如何为Spring Boot项目中的Mapper添加新的SQL语句吧&#xff01;说起来&#xff0…

Qt 中 findChild和findChildren绑定自定义控件

在 Qt 中&#xff0c;findChild 和 findChildren 是两个非常实用的方法&#xff0c;用于在对象树中查找特定类型的子对象。这两个方法是 QObject 类的成员函数&#xff0c;因此所有继承自 QObject 的类都可以使用它们。当您需要查找并绑定自定义控件时&#xff0c;可以按照以下…

leecode第19天

15、三数之和 # 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c; # 同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 # 注意&#xff1a;答案中不可以包含重复…

2109. 向字符串添加空格

2109. 向字符串添加空格 题目链接&#xff1a;2109. 向字符串添加空格 代码如下&#xff1a; class Solution { public:string addSpaces(string s, vector<int>& spaces) {string res "";int j 0;//直接遍历即可for (int i 0;i < spaces.size();i…

Java Spring Boot 与前端结合打造图书管理系统:技术剖析与实现

目录 运行展示引言系统整体架构后端技术实现后端代码文件前端代码文件1. 项目启动与配置2. 实体类设计3. 控制器设计4. 异常处理 前端技术实现1. 页面布局与样式2. 交互逻辑 系统功能亮点1. 分页功能2. 搜索与筛选功能3. 图书操作功能 总结 运行展示 引言 本文将详细剖析一个基…

CSRF跨站请求伪造——入门篇【DVWA靶场low级别writeup】

CSRF跨站请求伪造——入门篇 0. 前言1. 什么是CSRF2. 一次完整的CSRF攻击 0. 前言 本文将带你实现一次完整的CSRF攻击&#xff0c;内容较为基础。需要你掌握的基础知识有&#xff1a; 了解cookie&#xff1b;已经安装了DVWA的靶场环境&#xff08;本地的或云的&#xff09;&am…

BT-Basic函数之首字母R

BT-Basic函数之首字母R 文章目录 BT-Basic函数之首字母Rrandomizercallremoterenamereportreport clearreport fault syndromereport isreport level isreport outreport usingre‑savere‑storereturnrevision$rexitrinitrli$rndrotaterpmcrpsrun randomize 以下是这段英文的…

CentOS 7 如何挂载ntfs的移动硬盘

CentOS 7 如何挂载ntfs的移动硬盘 前言一、查看硬盘并尝试挂载(提示无法挂载)二、yum安装epel-release提示yum被锁定三、强行终止yum的进程四、yum安装epel-release完成五、yum安装ntfs-3g六、此时可正常挂载NTFS硬盘 前言 CentOS 7默认情况下是不支持NTFS的文件系统&#xff…

面试常考简单操作

参考文章 面试常考简单操作 快速排序归并排序Dijkstra自定义排序交替打印奇偶数冒泡排序插入排序堆排序欧几里得算法求最大公约数单例模式的双重校验LRU 快速排序 public class Solution {private static int partition(int[] arr, int left, int right) {int temp arr[left]…

2025图像处理和深度学习国际学术会议(IPDL 2025)

重要信息 官网&#xff1a;www.IPDL.xyz 时间&#xff1a;2025年4月11-13日 地点&#xff1a;中国-成都 简介 随着深度学习和图像处理技术的迅速发展&#xff0c;相关技术的应用逐渐渗透到各个行业&#xff0c;如医疗影像分析、自动驾驶、安防监控和智能制造等。这些应用的…