IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Nginx高并发优化+日志管理+配置参数详解 -> 正文阅读

[系统运维]Nginx高并发优化+日志管理+配置参数详解

前言


一、Nginx高并发

Linux下高并发socket最大连接数所受的各种限制

1.修改用户进程可打开文件数限制
  /etc/security/limits.conf
  nginx - nofile 65535
2.Linux系统级的最大打开文件数限制
  fs.file-max = 188414		//和内存容量相关
3.修改网络内核对TCP连接的有关限制
  net.ipv4.ip_local_port_range = 1024	
4.限制接收新 TCP 连接侦听队列的大小
  net.core.somaxconn = 2048
5.启用tcp连接timewait快速回收和重用
  net.ipv4.tcp_tw_recycle = 1
  net.ipv4.tcp_tw_reuse = 1

1.cpu核心数的优化

vim nginx.conf
  3 worker_processes  auto;						#设定cpu核心自动分配
  3 worker_processes  2;						#设定只是用2个核心
  4 worker_cpu_affinity 01 10;					#进行cpu核心的绑定

2.最大连接数的优化

vim nginx.conf
events {
 14     worker_connections  65535;				#设定nginx的最大连接数
 15 }
vim /etc/security/limits.conf
60 nginx   -       nofile  65535				#添加后即可生效使用热插拔模块在内存中立刻生效

切换到nginx用户查看最大打开文件数即可看到为65535
在这里插入图片描述

3.网络阻塞

vim /usr/local/nginx.com
 28     sendfile        on;				#开启sendfile可以开启高效文件传输模式(zero copy 方式),避免内核缓冲区数据和用户缓冲区数据之间的拷贝。
 29     tcp_nopush     on;				#采用tcp_cork标准进行传输即客户的访问数据在Nginx的缓冲区域到达一定量的时候会进行发送有助于解决网络阻塞
 30     tcp_nodelay     on;				#此参数和tcp_nopush互斥可以开启nginx会自行兼容本身参数,表示将所有的数据有了不论是否填满缓冲区域立刻发送
 tcp_nopush,tcp_nodelay,开启前提必须开启sendfile

三个指令都开启的好处是,sendfile可以开启高效的文件传输模式,tcp_nopush开启可以确保在发送到客户端之前数据包已经充分“填满”, 这大大减少了网络开销,并加快了文件发送的速度。 然后,当它到达最后一个可能因为没有“填满”而暂停的数据包时,Nginx会忽略tcp_nopush参数, 然后,tcp_nodelay强制套接字发送数据。所以三个都开启比开启单个效率更高

4.erro日志存放位置设定

 7 error_log  logs/error.log info;	#设定日至的存放为位置以及日志级别日志输出级别有 debug,info,notice,warn,error,crit 可供选择,其中debug输出日志最为详细crit(严重)输出日志最少。默认是error

该日志的采集格式暂时不支持自定义方式采集,但是可以分开存储方式集进行存储不同级别的日志
在这里插入图片描述

脚本示例

#!/bin/bash
cd /usr/local/nginx/logs && mv access.log access_$(date +%F -d -1day).log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
写好后加入creoutab定时任务中定时执行一次即可,日志文件所在的目录不需要给nginx用户权限
chmo -R 700 /usr/local/nginx/logs 

5.访问日志的控制方式

 location ~ .*\.(js|jpg|jpeg|png|css|bmp|gif)$ {
                access_log off;
        }
参数作用
main指定日志的采集格式
gzip指定使用gzip的方式进行日志的压缩,压缩比率分为1-9默认为1压缩越高速度越慢
buffer=32k指定日志写入时缓存数据为32K默认为64K
flush设置缓存的有效时间。如果超过 flush 指定的时间,缓存中的内容将被清空
ifif 条件判断。如果指定的条件计算为 0 或空字符串,那么该请求不会写入日志。

6.日志的采集格式设定

日志采集格式的设定方式

$remote_addr       客户端地址
$remote_user       客户端用户名称 
$time_local        访问时间和时区
$request           请求的URI和HTTP协议
$status            HTTP请求状态
$body_bytes_sent   发送给客户端文件内容大小
$http_referer      url跳转来源
$http_user_agent   用户终端浏览器等信息
$http_host         请求地址,即浏览器中你输入的地址(IP或域名)
$request_time      处理请求的总时间,包含了用户数据接收时间
$upstream_response_time 建立连接和从上游服务器接收响应主体的最后一个字节之间的时间
$upstream_connect_time  花费在与上游服务器建立连接上的时间
$upstream_header_time   建立连接和从上游服务器接收响应头的第一个字节之间的时间

二、平滑升级Nginx以及版本回退

1.平滑升级

重新制作一个新Nginx二进制程序

 \cp -f objs/nginx /usr/local/nginx/sbin/ngin		#复制nginx二进制文件到sbin目录下同时保证系统不会读取这一步复制过去的文件所以要加\进行转译
 ps ax | grep nginx									#获取主程pid
 kill -USR2 27867									#使得原来的主程序不再获得新的请求
 kill -WINCH 27867									#使新版本的主程序开始接受请求

在这里插入图片描述

2.版本回退

\cp -f objs/nginx /usr/local/nginx/sbin/nginx		#将新版本的程序覆盖过去
kill -HUP 28120										#唤醒原有进程
kill -WINCH 28149									#停止新的进程
kill -9	28121										#新版本的worker已经没用了可以禁掉了

三、Nginx配置详解

1.Nginx对于访问流量的限制

https://docs.nginx.com/nginx/admin-guide/security-controls/controlling-access-proxied-http/
官方文档位置
http {
upstream westos{
        sticky;
        server 172.25.254.92:80;
        server 172.25.254.93:80;
}
limit_conn_zone $binary_remote_addr zone=addr:10m;			#在内存中开一个10M大小的区域使得访问数据可以被记录同时
server{
        listen 80;
        server_name www.westos.com;
                location / {
                        limit_conn addr 10;					#限制最大的并发连接数为10
                        limit_rate 50k;						#限制下载的带宽速度为50k
                        proxy_pass http://westos;
                }
        }
}

上传一张图片可以尝试进行压力测试可以看到的效果更加直观,测试后并发量为10时可以完成1000的并发数10次的访问量,限制带宽后明显很慢

2.对于当个IP的高频次访问控制

http {
        upstream westos {
        server 172.25.0.93:80 ;
        server 172.25.0.94:80 ;
        }
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log logs/access.log main;
    #limit_conn_zone $binary_remote_addr zone=addr:200m;
    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay on;
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;		#限制了同一个IP对与该服务器每一秒只能访问一次
    #keepalive_timeout  0;
    keepalive_timeout  10;
    gzip  on;
    server {
        listen       80;
        server_name  localhost;

        charset utf-8;

        access_log logs/access.server.log. main;


        location / {
          proxy_pass http://westos ;
          limit_req zone=one;										#开启访问频次限制他功能在RS上
          #limit_conn addr 1;										#以经限制访问频次最大连接数不必限制
          #limit_rate 50k;											#访问带宽不必限制 
        }

3.nginx的访问控制

location ~ /\.ht {
            deny  all;					#拒绝所有人访问
            allow 127.0.0.1 ;			#允许本地回环环访问
            allow 172.25.0.90 ;			#只允许某个IP访问固
        }
    }

4.监控模块的设开启以及设定

location /status {
 				stub_status on;		#开启监控模块
                deny all ;
                allow 127.0.0.1 ;
                access_log off;		#禁止访问监控模块时还进行日志的统计
                error_log off;		#禁止错误日志的统计
}

5.nginx对https搭建方式、重定向功能以及php网页缓存的构建方式

server {
        listen       443 ssl;
        server_name  localhost;

        ssl_certificate      cert.pem;
        ssl_certificate_key  cert.pem;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location /westos.org/ {			#代理westos.org/后边的内容但是不会代理indx.php,直接代理index.php是有危险的
                proxy_pass http://www.westos.org/index.php;
        }
		
		location ~ .*\.(gif|jpg|png)$ {	#将网站的数据缓存到站点上节省网站服务端的带宽
    		expires 365d;
    		root /www;
		}
    }

总结

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-06-29 19:27:13  更:2022-06-29 19:27:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 12:11:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码