Nginx优化
Nginx服务优化
curl -l http://20.0.0.6 ###查看是头部信息
curl -I http://20.0.0.6 ##查看的响应的报文首部信息
但是我们可以在配置文件中将这些东西隐藏掉,让别人无法查看你的信息。
方法一:修改配置文件的方式
vim /usr/local/nginx/conf/nginx.conf #进入NGINX配置文件
server_tokens off; #在http下添加此信息
systemctl restart nginx.service
curl -I http://20.0.0.6
方法二 修改源码文件,重新编译
vim /opt/nginx-1.23.0/src/core/nginx.h
修改源码文件后想要生效,必须重新编译一下。
cd./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module/opt
make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/ 把老的NGINX文件移出去
cp nginx /usr/local/nginx/sbin/ #把最新编译的/objs/下的NGINX复制到SBIN目录下
方法三:修改缓存时间
vim /usr/local/nginx/conf/nginx.conf
http {
......
server {
......
location / {
root html;
index index.html index.htm;
}
location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ { #加入新的 location,以图片作为缓存对象
root html;
expires 1d; #指定缓存时间,1天
}
......
}
}
systemctl restart nginx
日志切割
#!/bin/bash
#filename:qiege.sh
day=$(date -d "-1 day" "+%Y%m%d") #显示前一天的日期
logs_path="/var/log/nginx" #新建一个存放日志的目录
pid_path="/usr/local/nginx/logs/nginx.pid" #将nginx的pid赋值给他
[ -d $logs_path ] || mkdir -p $logs_path #查看有没有该目录,没有就重新创建一个
mv /usr/local/nginx/logs/access.log $logs_path/sdh.com-access.log-$day #将日志文件移到新建的目录下 并标上时间
kill -USR1 $(cat $pid_path) #清空之前日志文件重新加载日志文件
find $logs_path -mtime +30 -exec rm -rf {} \; #删除30天以前的日志文件
创建一个周期性任务 每天执行该文件
crontab -e
0 1 * * * /root/fenge.sh #设置周期性计划
方法四:修改用户和组
/usr/local/nginx/conf/nginx.conf
[root@sdh ~]# systemctl restart nginx
[root@sdh ~]# ps aux | grep ngin
方法五:连接超时
HTTP有个KeepAlive,告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态。若接收到来自客户端的其他请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。
KeepAlive在一段时间内保持打开状态,它们会在这段时间占用资源,占用过多就会影响性能。
vim /usr/local/nginx/conf/nginx.conf
keepalive_timeout 65; ##三次握手超过时间
client_header_timeout 80; 等待客户端发送请求头的超时时间会发送408 错误
client_body_timeout 80; ##设置客户端发送请求体的超时时间
方法六:文件句柄
linux/Unix上,一切皆文件,每一次用户发起请求就会生成一个文件句柄,文件句柄可以理解为就是一个索引,所以文件句柄就会随着请求量的增多,而进程调用的频率增加,文件句柄的产生就越多,系统对文件句柄默认的限制是1024个,对Nginx来说非常小了,需要改大一点
(1)设置方式
- 系统全局性修改
- 用户局部性修改
- 进程局部性修改
系统全局性修改和用户局部性修改
vim /etc/security/limits.conf
root soft nofile 65535
root hard nofile 65535
* soft nofile 25535
* hard nofile 25535
在End of file前面添加4个参数
-
soft:软控制,到达设定值后,操作系统不会采取措施,只是发提醒
-
hard:硬控制,到达设定值后,操作系统会采取机制对当前进程进行限制,这个时候请求就会受到影响
-
root:这里代表root用户(系统全局性修改)
-
*:代表全局,即所有用户都受此限制(用户局部性修改
-
nofile:指限制的是文件数的配置项。后面的数字即设定的值,一般设置10000左右
进程局部性修改
vim /etc/nginx/nginx.conf
每个进程的最大文件打开数,所以最好与ulimit -n
的值保持一致。
worker_rlimit_nofile 35535; #进程限制
方法七:cpu的亲和配置
cpu的亲和能够使nginx对于不同的work工作进程绑定到不同的cpu上面去。就能够减少在work间不断切换cpu,把进程通常不会在处理器之间频繁迁移,进程迁移的频率小,来减少性能损耗。
1)具体设置
Nginx运行工作进程个数一般设置CPU的核心或者核心数x2。如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 grep ^processor /proc/cpuinfo | wc -l。
vim /usr/local/nginx/conf/nginx.conf
worker_processes 2; #修改为核数相同或者2倍
worker_cpu_affinity 01 10; #设置每个进程由不同cpu处理,进程数配2 4 6 8分别为0001 0010 0100 1000
systemctl restart nginx
ps aux | grep nginx#查看nginx主进程中包含几个子进程
worker_cpu_affinity 01 10;
01表示启用第一个CPU内核,10表示启用第二个CPU内核
worker_cpu_affinity 01 10;表示开启两个进程,第一个进程对应着第一个CPU内核,第二个进程对应着第二个CPU内核。
方法八:事件处理模型优化
nginx的连接处理机制在于不同的操作系统会采用不同的I/O模型,Linux下,nginx使用epoll的I/O多路复用模型,在freebsd使用kqueue的IO多路复用模型,在solaris使用/dev/pool方式的IO多路复用模型,在windows使用的icop等等。要根据系统类型不同选择不同的事务处理模型,我们使用的是Centos,因此将nginx的事件处理模型调整为epoll模型。
events {
worker_connections 10240; // ##设置连接数
use epoll;
}
方法九:GZIP压缩性能优化
gzip on; #表示开启压缩功能
gzip_min_length 1k; #表示允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,表示不管页面多大都进行压缩,建议设置成大于1K。如果小于1K可能会越压越大
gzip_buffers 4 32k; #压缩缓存区大小
gzip_http_version 1.1; #压缩版本
gzip_comp_level 6; #压缩比率, 一般选择4-6,为了性能gzip_types text/css text/xml application/javascript; #指定压缩的类型 gzip_vary on; #vary header支持
方法十:高效传输模式
sendfile on; # 开启高效文件传输模式。
tcp_nopush on; #需要在sendfile开启模式才有效,防止网路阻塞,积极的减少网络报文段的数量。将响应头和正文的开始部分一起发送,而不一个接一个的发送。
方法十一:proxy超时设置
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k
盗链网站(20.0.0.10)源主机网站(20.0.0.6)
在盗链网址下配置
vim /var/www/html/index.html
在里面配置使访问盗链网站时上面可以显示源网站的图片信息
现在我们可以在源主机上配置一下,禁止别人盗用我没的东西 (俗称防盗链)
配置防盗链
location ~* \.(swf)$ {
valid_referers none blocked *.sdhc.com sdhc.com;
if ( $invalid_referer ) {
rewrite ^/ http://www.sdhc.com/error.png.jpg;
}
}
一下,禁止别人盗用我没的东西 (俗称防盗链)
配置防盗链
location ~* \.(swf)$ {
valid_referers none blocked *.sdhc.com sdhc.com;
if ( $invalid_referer ) {
rewrite ^/ http://www.sdhc.com/error.png.jpg;
}
}
[外链图片转存中…(img-MRWAza7L-1659057036641)]