云计算学习100天-第29天

发布于:2025-08-30 ⋅ 阅读:(14) ⋅ 点赞:(0)

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


网站公告

今日签到

点亮在社区的每一天
去签到