nginx的优化和防盗链

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 www.kgc.com

*.kgc.com

nine:允许没有http_refer的请求访问资源,请求url里面可以不包含refer可以不带uri

www.kgc.com/ls.jpg

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

小的业务,不需要关注

你可能感兴趣的:(nginx,运维)