当前位置: 首页 > news >正文

云计算学习100天-第29天

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

1、编译安装必须要使用--with-stream参数开启4层代理模块
tar -xf nginx-1.22.1.tar.gz
cd nginx-1.22.1/
yum -y install gcc make pcre-devel openssl-devel
./configure --with-stream
make && make  install    
2、修改nginx配置文件
...
stream {
upstream backend {             #创建集群,名称为backend
server 192.168.99.100:22;  #后端SSH服务器IP和端口
server 192.168.99.200:22;
}

         server {               #调用集群
listen 12345;       #Nginx代理监听的端口,可以自己定义
proxy_pass backend; #调用backend集群
}
}
http {
.. ..
}

3、启动服务

/usr/local/nginx/sbin/nginx

自定义报错页面

HTTP常见状态码列表:
200 正常
301 & 302 重定向
400 请求语法错误
401 访问被拒绝
403 禁止访问
404 资源找不到
414 请求URI头部太长
500 服务器内部错误
502 代理服务器无法正常获取下一个服务器正常的应答


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

echo "抱歉!您访问的页面不存在呢?" > html/404.html
#重置服务
/usr/local/nginx/sbin/nginx -s reload

查看nginx服务状态信息

--with-http_stub_status_module开启status状态页面

tar -xf nginx-1.22.1.tar.gz
cd nginx-1.22.1/
yum -y install gcc make pcre-devel openssl-devel
./configure --with-stream --with-http_stub_status_module
make && make  install    
修改nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
....
server {
listen       80;
server_name  localhost;
location /status {  #定义状态页面
stub_status on;
}
charset utf-8;
....

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:当前多少客户端在等待服务器的响应,

如果想要只允许自己访问,看到nginx的状态信息,其他人不能看到,可以做以下配置


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

优化Nginx并发量


#优化前使用ab高并发测试,使用web1主机作为海量客户,访问proxy主机
ab -n 100 -c 100 http://192.168.99.5/    #-n任务量,-c是连接数
#优化Linux内核参数(最大文件数量)
ulimit -n          #查看最大文件数量
1024                    
ulimit -n 100000    #临时设置最大文件数量
#优化后测试服务器并发量,成功
ab -n 2000 -c 2000 http://192.168.99.5/
#永久设置最大文件数量
vim /etc/security/limits.conf
.. ..
*               soft    nofile            100000
*               hard    nofile            100000
# End of file

修改Nginx配置文件,增加并发量


vim /usr/local/nginx/conf/nginx.conf
.. ..
#user  nobody;
worker_processes  2;     #与CPU核心数量一致
.. ..
events {
worker_connections  50000;
}
.. ..

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


#优化前,使用脚本测试超长头部请求是否能获得响应,默认情况下nginx无法支持长地址栏,会报414错误
vim /root/lnmp_soft/buffer.sh
#!/bin/bash
URL=http://192.168.99.5/index.html?
for i in {1..5000}
do
URL=${URL}v$i=$i
done
curl $URL                           #经过5000次循环后,生成一个超长的URL地址
#执行脚本报错
./buffer.sh
<html>
<head><title>414 Request-URI Too Large</title></head>
<body>
<center><h1>414 Request-URI Too Large</h1></center> #访问失败
<hr><center>nginx/1.22.1</center>
</body>
</html>

#修改Nginx配置文件,增加数据包头部缓存大小
cd /usr/local/nginx
cp conf/nginx.conf.default conf/nginx.conf      #还原配置文件
vim conf/nginx.conf
.. ..
http {
client_header_buffer_size    200k;    #添加,请求包头信息的缓存大小
large_client_header_buffers  4 200k;  #添加,大请求包头部信息的缓存个数与容量
include       mime.types;
default_type  application/octet-stream;
.. ..

/usr/local/nginx/sbin/nginx -s reload

#优化后,使用脚本测试超长头部请求是否能获得响应
/root/lnmp_soft/buffer.sh   #成功

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

vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
listen       80;
server_name  localhost;
#charset koi8-r;

        #access_log  logs/host.access.log  main;

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

/usr/local/nginx/sbin/nginx -s reload

http://www.xdnf.cn/news/1380943.html

相关文章:

  • 基于SamOut的音频Token序列生成模型训练指南
  • Linux shell getopts 解析命令行参数
  • 算力沸腾时代,如何保持“冷静”?国鑫液冷SY4108G-G4解锁AI服务器的“绿色空调”!
  • 使用Rag 命中用户feedback提升triage agent 准确率
  • Elasticsearch数据迁移方案深度对比:三种方法的优劣分析
  • linu 网络 :TCP粘包及UDP
  • 【C++】C++11的右值引用和移动语义
  • STAGEWISE实战指南:从集成到使用的完整解决方案
  • vscode pyqt5设置
  • 【ai编辑器】使用cursor-vip获得cursor的pro版 pro plan(mac)
  • uniapp vue3 canvas实现手写签名
  • Flask测试平台开发,登陆重构
  • (二分查找)Leetcode34. 在排序数组中查找元素的第一个和最后一个位置+74. 搜索二维矩阵
  • 并发编程——05 并发锁机制之深入理解synchronized
  • 学习数据结构(13)二叉树链式结构下
  • 线程池及线程池单例模式
  • 带动态条件的模糊查询SQL
  • DINOv2 vs DINOv3 vs CLIP:自监督视觉模型的演进与可视化对比
  • LeetCode 3446. 按对角线进行矩阵排序
  • UE5提升分辨率和帧率的方法
  • 搭建私有云3步法:cpolar简化Puter本地云端配置
  • C# SIMD编程实践:工业数据处理性能优化案例
  • C++ 哈希概念版
  • 【实战笔记】OCI Ubuntu 24.04 + TigerVNC + XFCE + Chrome 开机自启全记录
  • 错误模块路径: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
  • 从卡顿到丝滑:大型前端项目 CSS 优化全攻略
  • [高并发系统设计] - 搭建高并发高可用的系统 - 学习与探究
  • 【大前端】React useEffect 详解:从入门到进阶
  • Shi-Tomasi 算法和 Harris 角点检测算法都是经典的角点检测方法,但它们在理论基础和实现细节上有一些区别。下面我将详细对比这两种算法。
  • List<Map<String, String>>最简单的遍历方式