当前位置: 首页 > 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.dtcms.com/a/354603.html

相关文章:

  • Node.js 的模块化规范是什么?CommonJS 和 ES6 模块有什么区别?
  • Python DELL Logo
  • day1 ———C++———变量和字符串的使用
  • AI驱动企业数字化转型:解码未来三年的智能化变革密码
  • STAGEWISE实战指南:从集成到使用的完整解决方案
  • AI在商业领域的多元应用:从写作助手到精准运营,解锁AI商业工具新价值
  • 流程控制语句(3)
  • 操作系统中的死锁是什么意思
  • 农行广西区分行携手广西专精特新商会共探金融赋能专精特新企业新路径
  • 用KPI导航数字化转型:制造企业如何科学评估系统上线成效
  • 流程控制语句(2)
  • Java网络编程(UDP, TCP, HTTP)
  • 【Linux基础知识系列:第一百一十五篇】使用gzip与bzip2进行压缩
  • 从首次测试到采购40个机器人:Junior kühlk如何自动化协作机械臂矩阵
  • Linux学习-基于TCP实现群聊
  • 医疗AI时代的生物医学Go编程:高性能计算与精准医疗的案例分析(三)
  • windows下查看别的服务器的端口是否通
  • [光学原理与应用-319]:激光器光路设计的主要输出文件的形式和内容
  • 解构与重构:“真人不露相,露相非真人” 的存在论新解 —— 论 “真在” 的行为表达本质
  • 一文读懂:用PyTorch从零搭建一个Transformer模型
  • (LeetCode 每日一题) 3446. 按对角线进行矩阵排序(矩阵、排序)
  • 读大语言模型08计算基础设施
  • GeoScene Maps 完整入门指南:从安装到实战
  • 《Explanation of Adaptive Platform Design》详细解读
  • 同一个栅格数据,为何在QGIS和ArcGIS Pro中打开后显示的数值范围不同?
  • redis单哨兵模式
  • 单元测试到底是什么?该怎么做?
  • 破译心智密码:神经科学如何为下一代自然语言处理绘制语义理解的蓝图
  • 【后端】微服务后端鉴权方案
  • 总结:在工作场景中的应用。(Excel)