nginx优化和防盗链

本文介绍了如何隐藏Nginx版本号以增强安全性,修改配置关闭版本泄露,日志分割和压缩策略以提升性能,以及处理高并发、TIME_WAIT优化和防盗链技术。
摘要由CSDN通过智能技术生成

1.隐藏版本号

为什么隐藏版本号

因为nginx Bug多,更新版本速度比较快,所以一旦版本号暴露出去,有可能给对方提供攻击漏洞

1

vim  /usr/local/nginx/conf/nginx.conf

在http大模块(http全局模块)中修改,不在server中,也不是location

输入  Server_tokens  off;

2

修改源码文件,重新编译安装

源码包里面,修改配置文件

修改完之后要重新配置,编译和安装

隐藏版本号

进入源码包解压文件中有个src 里面有个core ,打开 nginx.h 文件13到14行

第一种方式

vim /usr/local/nginx/conf/nginx.conf
  http {
     include       mime.types;
     default_type  application/octet-stream;
  server_tokens off;
#在20行,添加隐藏版本号

第二种方式

#在安装包里修改配置文件后,需要重新编译软件,之后到nginx.conf里面把隐藏版本号功能关闭(也可以打开)
[root@c1 core]# vim /opt/nginx-1.22.0/src/core/nginx.h
define NGINX_VERSION      "1.22.0"
define NGINX_VER          "nginx/" NGINX_VERSION
#在13行和14行修改版本号,"1.22.0" "nginx/" 可自定义
wq!

[root@c1 src]# cd /opt/nginx-1.22.0

./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module

make && make install

2.nginx 日志分割

Nginx没有自带的日志分割功能,靠运维人员通过脚本实现日志分割,结合定时任务进行操作,日志脚本一定要给权限,不然会报错。

0 1 * * * /opt/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 {} \;

3.网页压缩

http_gzip_staic_module 

可以对文件内容和图片进行压缩的功能,节约宽带,提升用户的访问速度

vim /usr/local/nginx/conf/nginx.conf
gzip on;
#33行把 gzip on 的注释取消掉

gzip_min_length 1k;
#如果文件的大小是1K,那么不再进行压缩处理

gzip_comp_level 6;
#压缩级别或者叫压缩比率 1-9 ,1是速度最快,压缩比最低,9压缩的速度最慢,但是压缩比最高,默认是1

gzip_vary on;
#支持前段的缓存也可以压缩

gzip_types text/plain image/jpg 
#以下为可以支持的格式类型
gzip_types text/plain 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; 要以分号结尾

将图片放到  /usr/local/nginx/html中

压缩

4.nginx的图片缓存时间

可以在日后访问时,不需要经常的向后台请求数据,加快访问速度,一般针对静态页面,动态页面不设置缓存时间
vim /usr/local/nginx/conf/nginx.conf

Location  ~*  \.(gif|jpg|jepg|bmp|ico)$ {
root  html;
expires  1d;
}
#支持的格式root表示拼接,html表示以html结尾,expires表示设置缓存时间,1d表示一天,一般都设置一天
wq!

没改之前缓存时间

86400  就是1天

5.连接超时

Keepalive_timeout  65;
#30行,设置超时时间一般在60秒到120秒左右

client_header_timeout 80;
#客户端向服务端发送一个完整的request(请求),header(头)的超时时间,如果客户端在80秒内没有发送一个完整的请求头,那么nginx将会返回408,也就是request timeout(请求超时)

client_body_timeout 80;
#客户端与服务端建立连接之后发送request body(请求体)的超时时间,80秒内客户端没有发送任何内容,nginx 就会发送408 request time out (请求超时)。

6.nginx并发设置

在高并发的场景下,需要nginx启动更多的进程来保证快速响应

根据cpu的核心数,调整nginx工作进程

查询cpu核数有几个,这是有上限的,最多不要超过8个 ,worker_processes  8; 8个以上不会有性能提升,反而会降低稳定性 ,生产中设4个足够了 一个核可以支持1w5,4个核可以支持6w个并发

work_connections  15000; ,别忘了修改  limits.conf

Cat  /proc/cpuinfo |grep  processor  |  wc -l

Cat  /proc/cpuinfo | grep  -c  processor

8个以上性能降低:会不停切换导致效率降低

怎么绑定cpu

Worker_processes  4

要记得修改limits.conf

#全局配置

Events  {

Worker_connections  1024;

Worker_cpu_affinity   0001  0010 0100 1000;   

# 要和上面保持一致,几个核就写几个

#把进程绑定cpu上,减少cup之间的切换,提高效率

}

面试题

 TIME_WAIT 大量出现 如何优化

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' (模拟tinme_wait)

Time_wait是tcp连接的状态中的一种,不是报错!,出现在四次挥手之后

在time_wait状态下,tcp处于连接等待状态,等待有一个持续时间http1.1会话保持

  1. 确保可靠的关闭连接
  2. 避免连接复用,

他在连接正常关闭之后,一段时间之后,他会自动消失,而且占用的资源很少,对服务器性能的影响有限。

如需快速取消time_wait

需要改配置文件:vim  /etc/sysctl.conf

nginx的常用内置变量   打印结果

$remote_addr  : 显示客户端的ip地址

$remote_port  :显示客户端的端口号

$uri: 显示请求的uri

$host: 显示请求的主机名

$request_metthod:显示请求的方法

重要的变量配置

Proxy_set_header X-Forwarded-for  $remote_addr

代理服务器设置这个变量,客户端的真实要发给后端,否则代理服务器地址会被拉入黑名单

Proxy_set_header X-Real-IP $remote_addr

客户端的真实ip,发送给后端,现在所有的网站都是要求客户端请求时加上真实ip.

微信,微博,B站,都会显示ip地址

 

防盗链

防止其他网站盗用本站的图片

Valid_referers none  blocked *.kgc.com kgc.com;

If  (  $vailid_referer  )  {

Rewrite  ^/  http://www.kgc.com/error.png;

Valid_referers:  设置信任的网站

Kgc.com   www.kgc.com

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

www.Kgc.com =  www.kgc. com/error.png;

Blocked:请求我那个展示,前面可以不带协议

valid_referers none blocked *.kgc.com kgc.com;

        if ( $invalid_referer ) {

          rewrite ^/ http://www.kgc.com/error.png;

          }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值