Nginx基础(03)

Nginx基础(02)

Nginx调度器

Nginx调度器是一种负载均衡工具,可以将客户端请求分配到多个后端服务器上,以提高系统的可用性和性能。

  • Nginx的作用

    • web服务器
    • 反响代理服务器
  • 代理服务器相当于/中介

  • 代理服务器的过程

    • 客户端访问代理服务器要页面

    • 代理服务器没有页面

    • 代理服务器帮你访问服务器

    • 由后台服务器把访问结果交回代理服务器

    • 代理服务器把结果传回客户端

  • 代理服务器也叫 调度器

  • 调度器 : 负载均衡 / 健康检查

    • **负载均衡 : **

      • 将客户端的并发访问量均衡的分配给够台服务器
      • 对于高并发量来说 , 负载均衡旧显得重要
    • **健康简称 : **

      • 时不时检查后台服务器的健康状态

      • 发现了服务器有问题就不会把客户端的请求发送给它 ( 默认每10秒再检测 )

      • 服务器健康状态则处理客户端请求

  • Nginx 调度算法

    • 轮询 : 逐一循环调度(默认)

    • weight : 指定轮询机率 , 权重值和访问比率成正比

    • ip_hash : 根据客户端IP分配固定的后端服务器

  • Nginx 服务器组主机状态

    • **[ down ] : **表示当前server暂时不参与负载

    • **[ max_fails ] : **允许请求失败的次数 ( 默认为1 )

    • **[ fail_timeout ] : **max_fails 次失败后 , 暂停提供服务的时间

  • Nginx 反向代理语法

  • Nginx支持的调度器

    • HTTP反向代理 : 7层代理 OSI应用层

      • 处理网络任务
    • TCP/UDP调度 : 4层代理 TCP/UDP , 第四层传输层的传输协议代理

      • 处理数据任务

Web反向代理

  • 功能

    • 后端web服务器两台 , 可以使用httpd

    • Nginx采用轮询方式调用后端Web服务器

    • 两台Web服务器的权重要求生物质不同的值

    • 最大失败次数为2 , 失败超时时间为30秒

1. 部署实施后端Web服务器

环境准备,同网段要互通,检查yum

安装 : vim net-tools bash-completion psmisc httpd

1) 部署后端 web1 服务器

写入 /var/www/html/index.html

2)部署后端 web2 服务器

写入 /var/www/html/index.html

3)主机测试连接

curl web1 web2

2. 配置Nginx服务器 , 添加服务器池

重置Nginx

1)修改 /usr/local/nginx/conf/nginx.conf 配置文件
  vim /usr/local/nginx/conf/nginx.conf
    .. ..
    http {
    .. ..
    #使用upstream定义后端服务器集群,集群名称任意(如webserver)
    #使用server定义集群中的具体服务器和端口
    upstream webserver {
                    server 192.168.99.100:80;
                    server 192.168.99.200:80;
            }
    .. ..
    server {
            listen        80;
            server_name  localhost;
                location / {
                .. ..
    #通过proxy_pass将用户的请求转发给webserver集群
                proxy_pass http://webserver;
                .. ..
            }
    }
    .. ..
    }
    
	/usr/local/nginx/sbin/ngiipnx -s reload

curl多次访问proxy主机可以看到网站的轮询效果

3. 配置 upstream 服务器集群池属性
1) 设置权限

[ weight ]可以设置后台服务器的权重,权重越大任务的分配量就越大

vim /usr/local/nginx/conf/nginx.conf
upstream webserver {
                server 192.168.99.100 weight=2;  #设置权重为2
                server 192.168.99.200;           #默认权重为0 
        }
        	# 优先调用权重为2的 192.168.99.100 服务器
        /usr/local/nginx/sbin/nginx -s reload
2) 优化健康检查

[ max_fails ] 可以设置后台服务器的失败次数 , 默认 1 次

[ fail_timeout ] 可以设置后台服务器的失败超时时间 , 默认 10 秒

vim /usr/local/nginx/conf/nginx.conf
upstream webserver {
                server 192.168.99.100;
                server 192.168.99.200 max_fails=2 fail_timeout=30;
        }
        	#失败次数 2 , 失败超时时间30秒
        /usr/local/nginx/sbin/nginx -s reload

测试时,先将web2的httpd服务关闭,回到proxy访问集群页面curl 192.168.99.5

只会显示web1的页面,此时即使将web2的httpd服务开启也无效,因为要等

待30秒

4. 配置 upsteam 服务器集群的调度算法
1) 设置相同客户端访问相同Web服务器
  • [ ip_hash ] : 根据IP地址固定后端服务器

    vim /usr/local/nginx/conf/nginx.conf
    upstream webserver {
    ip_hash; #根据客户端IP分配固定的后端服务器
    server 192.168.99.100 ;
    server 192.168.99.200 ;
    }
    /usr/local/nginx/sbin/nginx -s reload

客户端使用浏览器访问代理服务器测试只会见到一个页面

添加 down 标记

[ down ] 标记可以让集群主机暂时不参加集体活动

vim /usr/local/nginx/conf/nginx.conf
upstream webserver {
                server 192.168.99.100 ;
                server 192.168.99.200 down;  #暂时不参与任务分配
        }
	/usr/local/nginx/sbin/nginx -s reload

客户端使用浏览器访问代理服务器测试只会见到192.168.99.100

TCP/UDP 调度器

  • 四层代理 , 第四层的传输层代理

  • 功能

    • 后端SSH服务器两台

    • Nginx 编译安装时需要使用 --with-stream , 开启 ngx_stream_core_module模块

    • Nginx 采用轮询的方式调用后端 SSH 服务器

1. 部署四层代理Nginx服务器

Nginx-1.9 版本以前Nginx没有第四层代理功能

现Nginx默认不存在 第四层代理功能 , 需要安装

Nginx-1.22版本 的 [ ./configure ] 设置需要添加 [ --with-stream ]

    [root@proxy nginx]# cd ~/lnmp_soft/nginx-1.22.1/
    [root@proxy nginx-1.22.1]# killall nginx
    [root@proxy nginx-1.22.1]# rm -rf /usr/local/nginx/
    [root@proxy nginx-1.22.1]# ./configure   \
    > --with-stream                                  #开启4层代理功能
    [root@proxy nginx-1.22.1]# make && make install       编译并安装
    [root@proxy nginx-1.22.1]# /usr/local/nginx/sbin/nginx -V   
    												#查看安装模块情况
2. 配置Nginx服务器 , 添加服务器池
1) 修改/usr/local/nginx/conf/nginx.conf配置文件

新添加的内容不在 http函数内 , 属于网络外的操作 , 新添加 stream 函数.

vim /usr/local/nginx/conf/nginx.conf
stream {
            upstream backend {
               server 192.168.99.100:22;    #后端SSH服务器的IP和端口
               server 192.168.99.200:22;
}
            server {
                listen 12345;                    #Nginx监听的端口
                 proxy_pass backend;
             }
}
http {
.. ..
}
/usr/local/nginx/sbin/nginx -s reload

Nginx 优化

  • 优化服务器性能

    1. 自定义返回客户端 404 错误页面

    2. 查看服务器状态信息

    3. 解决客户端访问服务器提示 "Too many open files"

    4. 解决客户端访问头部信息过长

    5. 客户端浏览器缓存数据

  • 测试客户端性能

    1. 使用ab压力测试软件并发量

    2. 编写测试脚本生成头部信息并访问

    3. 客户端访问不存在的页面 , 测试404错误页面是否重定向

1. 自定义报错页面
  • HTTP常见错误代码

  • [ 200 ] 正常

  • [ 301 & 302 ] 重定向

  • [ 400 ] 请求语法错误

  • [ 401 ] 访问被拒绝

  • [ 403 ] 禁止访问

  • [ 404 ] 资源找不到

  • [ 414 ] 请求URI头部太长

  • [ 500 ] 服务器内部错误

  • [ 502 ] 代理服务器无法正常获取下一个服务器的正常应答

1) 优化前 , 查看404代码

客户端使用浏览器访问不存在的页面,会提示404文件未找到

2)修改Nginx配置文件 , 自定义报错页面
vim /usr/local/nginx/conf/nginx.conf
.. ..
        charset utf-8;                    #仅在需要中文时修改该选项
error_page   404  /test.jpg;    
						#自定义错误页面为一张图片,图片可以从真机拷入
						#图片文件放在/usr/../nginx/html下
.. ..

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

优化后,客户端再次使用浏览器访问不存在的页面,会看到图片

2. 查看服务器状态信息
1) 安装Nginx模块

编译安装时使用[ --with-http_stub_status_module ]开启状态页面模块

    [root@proxy nginx]# cd ~/lnmp_soft/nginx-1.22.1/
    [root@proxy nginx-1.22.1]# ./configure   \
    > --with-stream                                #开启4层代理模块
    > --with-http_stub_status_module              #开启status状态页面
    [root@proxy nginx-1.22.1]# make     #编译
    [root@proxy nginx-1.22.1]# killall  nginx
    [root@proxy nginx-1.22.1]# cp  objs/nginx \ /usr/local/nginx/sbin/   #覆盖原文件
    [root@proxy nginx-1.22.1]# /usr/local/nginx/sbin/nginx   #开启nginx
2) 修改Nginx配置文件 , 定义状态页面
cat /usr/local/nginx/conf/nginx.conf
... ...
location /status {
                stub_status on;
                 #allow IP地址;     #只允许对应IP地址的人查看
                 #deny all;		   #拒绝对应的人查看
        }
... ...
 /usr/local/nginx/sbin/nginx -s reload
3) 查看状态页面信息
curl  http://192.168.99.5/status
Active connections: 1 
server accepts handled requests
 10 10 3 
Reading: 0 Writing: 1 Waiting: 0

Active connections:当前活动的连接数量。

​ Accepts:已经接受客户端的连接总数量。

​ Handled:已经处理客户端的连接总数量。

​ Requests:客户端发送的请求数量。

Reading:当前服务器正在读取客户端请求头的数量。

Writing:当前服务器正在写响应信息的数量。

Waiting:当前多少客户端在等待服务器的响应。

3. 优化Nginx并发量
1) 优化前使用ab高并发测试
  • 使用 Web1 或 proxy 自己作为海量客户

  • 防火墙与SELinux都关闭

    [root@proxy ~]# ab -n 100 -c 100 http://192.168.99.5/
    # -n任务量,-c是连接数
    ...
    ...
    100% #成功
    [root@proxy ~]# ab -n 2000 -c 2000 http://192.168.99.5/
    Benchmarking 192.168.99.5 (be patient)
    socket: Too many open files (24) #失败

2)修改Nginx配置文件 , 增加并发量
vim /usr/local/nginx/conf/nginx.conf
.. ..
worker_processes  2;                    #与CPU核心数量一致
events {
worker_connections 50000;        #每个worker最大并发连接数
}
.. ..
/usr/local/nginx/sbin/nginx -s reload
3) 优化Linux内核参数 (最大文件数量)
[root@proxy ~]# ulimit -n                        #查看最大文件数量
[root@proxy ~]# ulimit -n 100000                #临时设置最大文件数量
[root@proxy ~]# vim /etc/security/limits.conf
    .. ..
*               soft    nofile            100000
*               hard    nofile            100000

配置文件 [ /etc/security/limits.conf ]

  • 该配置文件分4列,分别如下:
  • 用户或组 硬限制或软限制 需要限制的项目 限制的值
4) 优化后测试服务器并发量
ab -n 2000 -c 2000 http://192.168.99.5/
4. 优化Nginx数据包缓存 , 支持超长地址
  • 优化前 , 使用脚本制作超长头部请求是否能获得响应
  • 默认情况下nginx无法支持长地址栏 , 会报414错误
1) 超长地址脚本
cat 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
.. ..
<center><h1>414 Request-URI Too Large</h1></center>        #访问失败
2) 修改Nginx配置文件 , 增加数据包头部缓存大小
vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
client_header_buffer_size    200k;        #请求包头信息的缓存大小    
large_client_header_buffers  4 200k;   #大请求包头部信息的缓存个数与容量
.. ..
}

/usr/local/nginx/sbin/nginx -s reload
3) 优化后 , 使用脚本测试
 ./buffer.sh
5. 浏览器本地缓存静态数据
1) 浏览器界面操作清空历史记录/缓存
2 )修改Nginx配置文件 , 定义对静态页面的缓存时间
vim /usr/local/nginx/conf/nginx.conf
server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
expires        30d;            #定义客户端缓存时间为30天
}
}
    /usr/local/nginx/sbin/nginx -s reload
3) 优化后使用浏览器访问图片 , 查看缓存

http://192.168.99.5/day.jpg

在firefox地址栏内输入about:cache,查看本地缓存数据,查看是否有图片以及过期时间是否正确。

相关推荐
烦躁的大鼻嘎8 分钟前
【Linux】深入理解GCC/G++编译流程及库文件管理
linux·运维·服务器
乐大师8 分钟前
Deepin登录后提示“解锁登陆密钥环里的密码不匹配”
运维·服务器
ac.char14 分钟前
在 Ubuntu 上安装 Yarn 环境
linux·运维·服务器·ubuntu
敲上瘾15 分钟前
操作系统的理解
linux·运维·服务器·c++·大模型·操作系统·aigc
传而习乎1 小时前
Linux:CentOS 7 解压 7zip 压缩的文件
linux·运维·centos
soulteary1 小时前
突破内存限制:Mac Mini M2 服务器化实践指南
运维·服务器·redis·macos·arm·pika
运维&陈同学3 小时前
【zookeeper01】消息队列与微服务之zookeeper工作原理
运维·分布式·微服务·zookeeper·云原生·架构·消息队列
是阿建吖!3 小时前
【Linux】进程状态
linux·运维
明明跟你说过3 小时前
Linux中的【tcpdump】:深入介绍与实战使用
linux·运维·测试工具·tcpdump
Mr_Xuhhh4 小时前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法