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
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限流
#限制单位时间内的请求数目,以及速度限制:
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
加入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自动备份前一天的日志
限制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程序: cp -f nginx.old nginx
唤醒原进程:kill -HUP 29636
关闭新版本的worker进程: kill -WINCH 29761
关闭新版本主进程: kill -QUIT 29761