nginx并发优化

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

#/etc/security/limits.conf
#修改用户进程可打开文件数限制
nginx  -  nofile 65535

#/etc/sysctl.d/nginx.conf
#linux系统级的最大打开文件数限制
fs.file-max = 188414 #和内存容量相关
#修改网络内核对TCP连接的有关限制
net.ipv4.ip_local_port_range = 1024 65535
#限制接受新TCP连接监听队列的大小
net.core.somaxconn = 2048
#启用tcp连接timewait快速回收和重用
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

查看nginx最大并发量 nginx最大进程数_查看nginx最大并发量


查看nginx最大并发量 nginx最大进程数_查看nginx最大并发量_02


查看nginx最大并发量 nginx最大进程数_nginx_03

worker_processes  #工作进程数
worker_connections     #单个工作进程并发连接数
#nginx作为http服务器时:
max_clients = worker_processes * worker_connectionsnginx
#作为反向代理服务器时:
max_clients = worker_processes * worker_connections / 2
worker_processes    #将其设置为可用的CPU内核数将是一个好的开始
worker_rlimit_nofile #worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。
worker_processes     2;  #最多开启8个worker_cpu_affinity 01 10; cpu有多少个核,就有几位数,1代表内核开启,0代表内核关闭
multi_accept on;  #告诉nginx收到一个新连接通知后接受尽可能多的连接
use epoll;   #使用epoll模型开启文件高效传输模式,同时设置tcp_nopush 和tcp_nodelay 为on,可以防止网路和磁盘IO阻塞。
sendfile on;
tcp_nopush on;
 tcp_nodelay on;

查看nginx最大并发量 nginx最大进程数_重定向_04

nginx限流

#限制单位时间内的请求数目,以及速度限制:
http {limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
#rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次...
server {
location / {     
  limit_req zone=one;
#  limit_req zone=one burst=5
#  limit_req zone=one burst=5 nodelay;}

nginx配置管理

#自动索引:下载方便
location / {    autoindex on;}
#Nginx expire缓存配置: 缓存可以降低网站带宽,加速用户访问
location ~ .*\.(gif|jpg|png)$ {    
expires 365d;    
root /www;}

日志轮询

写入一个脚本:

#!/bin/bash
cd /usr/local/nginx/logs && mv access.log access_$(date +%F -d -1day).log
/usr/local/nginx/sbin/nginx -s reload

查看nginx最大并发量 nginx最大进程数_新版本_05

加入crontab定时任务:

00 00 * * * /opt/nginxlog.sh &?/dev/null
#为了安全给,日志目录加上700权限
#禁用不必要的日志记录,以节省磁盘IO的消耗
Location ~ .*\.(js|jpg|jpeg|png|css|bmp|gif)$ {
Access_log off;
}
#站点目录和文件的限制
location ~ ^/images/.*\.(sh|php)$ {  
              deny all;    
                  }
中文乱码charset utf-8;

每天晚00:00自动备份前一天的日志

查看nginx最大并发量 nginx最大进程数_重定向_06

限制ip

限制IP
#vi /usr/local/nginx/conf/nginx.conf

Location / {
Deny 172.25.0.10;
Allow 172.25.0.0/24;
Deny all;}
If ($remote_addr = 172.25.0.254) {
return 403;
}

nginx重定向

防止域名恶意解析到服务器IP:
server { 
listen 80; 
server_name   _; 
return 500; 
} 
也可以重定向:server { l
isten 80; server_name   _; 
rewrite ^(.*) http://www.westos.org permanent; 
}
80重定向443
server { listen 80; 
server_name www.westos.org; 
rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
}www.westos.org/bbs 重定向bbs.westos.org:
rewrite ^/bbs$ http://bbs.westos.org permanent;
rewrite ^/bbs/(.*)$ http://bbs.westos.org/$1 permanent;
bbs.westos.org 重定向www.westos.org/bbs:
if ($host = "bbs.westos.org"){ 
rewrite ^/(.*)$ http://www.westos.org/bbs/$1 permanent; 
}
bbs.westos.org 重定向www.westos.org/bbs:
if ($host = "bbs.westos.org"){
 rewrite ^/(.*)$ http://www.westos.org/bbs/$1 permanent;
  }

升级版本

wget http://www.nginx.org/download/nginx-1.19.1.tar.gz 
 
#解压
tar  -xvf  nginx-1.19.1.tar.gz
#进入新版本目录
cd nginx-1.19.1 
 
#执行配置
./configure
 
#执行编译(只编译不安装)
make
#备份旧版本文件
cp /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin/nginx.old
 
#复制新版本文件
cp -f nginx-1.19.1/objs/nginx /usr/local/nginx/sbin/

#测试新版本nginx是否正常
nginx -t
 
#使nginx的旧版本停止就收请求,有Nginx新版本接替,且老进程处理完所有请求,关闭所有连接后,停止
kill -USR2 (本机pid)
 
#关闭旧版本进程
kill -WINCH (本机pid)
 
#验证nginx是否升级成功
nginx  -V
nginx version: nginx/1.19.1
 
#显示最新编译的版本信息即更新成功

查看nginx最大并发量 nginx最大进程数_新版本_07


查看nginx最大并发量 nginx最大进程数_查看nginx最大并发量_08

查看nginx最大并发量 nginx最大进程数_重定向_09

查看nginx最大并发量 nginx最大进程数_新版本_10

查看nginx最大并发量 nginx最大进程数_nginx_11


升级成功

退回版本

版本回退:
还原nginx程序: cp -f nginx.old nginx

唤醒原进程:kill -HUP 29636

关闭新版本的worker进程: kill -WINCH 29761
关闭新版本主进程: kill -QUIT 29761