nginx的优化和防盗链
nginx的优化
1、隐藏版本号:
bug多。更新版本速度比较快,所以一旦版本号暴露出去,有可能给对方提供攻击的漏洞
curl -I(大写i) 192.168.233.30
在http大模块中修改,不在server中,也不是location
(1)第一种方式:在配置文件nginx.conf中修改的命令是加上一行:server_tokens off
(2)第二种方式:修改源码文件,重新编译安装:
在源码包里面修改配置文件;修改完之后要重新配置,编译和安装;隐藏版本号打开
2、nginx的日志分割:
nginx没有自带的日志分割功能,靠我们运维人员通过脚本实现日志分割
在opt里创建一个文件(vim nginxlog.sh)
#!/bin/bash
#按照时间来进行分割,每天都生成一个新的日志
#获取日期
d=$(date +%Y-%m-%d)
#找到nginx日志的存储位置
dir="/usr/local/nginx/logs"
#定义分割的源日志
logs_file='/usr/local/nginx/logs/access.log'
logs_error='/usr/local/nginx/logs/error.log'
#定义nginx的PID文件
pid_file='/usr/local/nginx/run/nginx.pid'
if [ ! -d "$dir" ]
then
mkdir -p $dir
fi
#移动日志并重命名日志文件
mv ${logs_file} {dir}/access_{d}.log
#mv /usr/local/nginx/logs/access.log /usr/local/nginx/logs/access_2023-10-12.log
mv ${logs_error} {dir}/error_{d}.log
#发送信号给nginx主进程,让nginx重新生成一个新的日志文件
kill -USR1 $(cat ${pid_file})
#USR1 生成一个新的日志 cat /usr/local/nginx/run/nginx.pid
#日志清理 日志清理原则:业务日志一般保留30天。数据库日志,保留2年。用户信息加密,而且要永久保存。高可用。
#业务日志如果最近无重大事项,保留10天之内的也可以,但是要申请批准。
find $dir -mtime +30 -exec rm -rf {} \;
还需要赋权chmod 777,以及crontab -e -u root指定root来执行定时任务***** /opt/nginxlog.sh
3、网页压缩:
nginx:
http_gzip_static_module:可以对文件内容和图片进行压缩的功能,节约宽带,提升用户的访问速度
(1) cd /usr/local/nginx/conf/
(2) cp nginx.conf nginx.conf.bak.2003.10.12
(3) vim nginx.conf
找到gzip on,然后取消注释
gzip on:开启压缩功能
gzip_min_lenght 1k:如果文件的大小是1k,不再进行压缩处理
gzip_comp_level 6:压缩级别:压缩比率 1-9 1是速度快,压缩比最低,9压缩的速度最慢,但是压缩比最高,默认是1
gzip_comp on:前端的缓存也可以支持压缩
支持压缩的所有类型 :gzip_types text/plain image/jpg text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json;
4、nginx的图片缓存时间
可以在日后访问时,不需要经常的想后台请求数据,加快访问速度
一般是针对静态页面,动态不设置缓存时间
(1) cd /usr/local/nginx/conf/
(2) vim nginx.conf
在location后面再添加一个:
location ~* \.(gif|jpg|jepg|bmp|ico)$ {
root html;
expires 1d;
}
(3)systemctl restart nginx
5、连接超时:
keepalive_timeout 60 - 120
(1) cd /usr/local/nginx/conf/
(2) vim nginx.conf
找到 #keepalive_timeout 0;
在后面添加两行
keepalive_timeout 60;
client_header_timeout 80;
#客户端向服务端发送一个完整request header的超时间,如果客户端在80秒内没有发送一个完整的请求头,nginx将会返回408,request time out
6、nginx并发设置:
在高并发的场景下,需要nginx启动更多的进程来保证快速响应
cpu
根据cpu的核心数,可以调整nginx的工作进程数
查看cpu核数的命令:
(1)cat /proc/cpuinfo | grep -c processor
(2)cat /proc/cpuinfo | grep processor | wc -l
面试题:
work_procersses 4;
worker_connerctions 15000;
60000个
别忘了修改limits.conf
8个以上性能降低;
面试题:
TIME_WAITD大量出现,该如何优化?
time_wait是tcp连接状态中的一种,不是报错!出现在四次挥手之后
在time_wait状态下,tcp处于连接等待状态,等待有一个持续时间 http1.1的会话保持
1、确保可靠的关闭连接
2、避免连接复用
他在连接正常关闭之后,一段时间之后,自动消失。而且占用的资源很少,对服务器性能的影响有限
net.ipv4.tcp_syncookies = 1
#表示开SYN cookies
当出现SYN等待队列溢出时,启用cookies处理syn队列,默认是0 。1开启。
net.ipv4.tcp_tw_reuse = 1
#time_wait状态可以重用,一个连接就要占用一个端口,time_wait把所有的端口全部占满了,新的连接请求也不会拒绝。
net.ipv4.tcp_tw_recycle = 1
#让time_wait尽快回收。
net.ipv4.tcp_fin_timeout = 60 # 所有time_wait 最大的生命周期60秒。
nginx的内置变量:打印结果
$remote_addr:显示客户端的ip地址
$remote_port:显示客户端的端口号
$uri:显示请求的uri
$host:显示请求的主机名
$request_method:显示请求的方法
重要的变量:
proxy_set_header X-Forwarded-for $remote_addr
#代理服务器设置这个变量,客户端的真实要发送给后端,否则代理服务器地址会被拉入黑名单
proxy_set_header X-Real-IP $remote_addr
#客户端的真实ip,发送给后端,现在所有的网站都会要求客户端请求时,加上真实ip
微信,微博,B站,都会显示ip地址
防盗链:
防止其他网站盗用本站的图片
valid_referers:设置信任的网站
*.kgc.com
nine:允许没有http_refer的请求访问资源,请求url里面可以不包含refer可以不带uri
www.kgc.com = www.kgc.com/ls.jpg
blocked:请求网站时,前面可以不带协议(也就是类似于http)
if( $invalid_referer ) {
rewrite ^/ http://www.kgc.com/errer.png
}
如果连接资源是来自于上面
默写:
1、nginx有哪些优化,简述配置过程
(1)隐藏版本号
http模块的全局配置:server_tokens off
改源码文件
2、日志分割
3、页面压缩
gzip on;取消注释
4、缓存时间
worker_process 4
worker_cpu_affinity 0001 0010 0100 1000
worker_connection 15000;
4*15000=60000
limits.conf 656534
5、压缩图片
expires 1d;
time_wait
小的业务,不需要关注