Nginx优化与防盗链

Nginx优化

Nginx服务优化
curl -l http://20.0.0.6   ###查看是头部信息

image-20220721144119721

curl -I http://20.0.0.6   ##查看的响应的报文首部信息

image-20220721144446035

但是我们可以在配置文件中将这些东西隐藏掉,让别人无法查看你的信息。

方法一:修改配置文件的方式
vim /usr/local/nginx/conf/nginx.conf  #进入NGINX配置文件
server_tokens  off;    #在http下添加此信息
systemctl restart nginx.service
curl -I http://20.0.0.6

image-20220721144950162

image-20220721145423152

方法二 修改源码文件,重新编译
vim /opt/nginx-1.23.0/src/core/nginx.h

image-20220721150440967

修改源码文件后想要生效,必须重新编译一下。

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目录下

image-20220721152239068

image-20220721153356798

image-20220721153445500

方法三:修改缓存时间
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

image-20220721161449535

image-20220721162415616

image-20220721162723296

日志切割
#!/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天以前的日志文件

image-20220721174242416

创建一个周期性任务 每天执行该文件

crontab -e
0 1 * * * /root/fenge.sh   #设置周期性计划

方法四:修改用户和组
 /usr/local/nginx/conf/nginx.conf
[root@sdh ~]# systemctl restart nginx
[root@sdh ~]# ps aux | grep ngin

image-20220724160625714

image-20220724160817558

方法五:连接超时

HTTP有个KeepAlive,告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态。若接收到来自客户端的其他请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。

KeepAlive在一段时间内保持打开状态,它们会在这段时间占用资源,占用过多就会影响性能。

vim /usr/local/nginx/conf/nginx.conf
 keepalive_timeout  65;   ##三次握手超过时间
    client_header_timeout 80;  等待客户端发送请求头的超时时间会发送408 错误
    client_body_timeout 80;  ##设置客户端发送请求体的超时时间

image-20220724161342873

方法六:文件句柄

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个参数

image-20220724161818028

  • soft:软控制,到达设定值后,操作系统不会采取措施,只是发提醒

  • hard:硬控制,到达设定值后,操作系统会采取机制对当前进程进行限制,这个时候请求就会受到影响

  • root:这里代表root用户(系统全局性修改)

  • *:代表全局,即所有用户都受此限制(用户局部性修改

  • nofile:指限制的是文件数的配置项。后面的数字即设定的值,一般设置10000左右

进程局部性修改
vim /etc/nginx/nginx.conf

每个进程的最大文件打开数,所以最好与ulimit -n的值保持一致。

worker_rlimit_nofile 35535; #进程限制

方法七:cpu的亲和配置

cpu的亲和能够使nginx对于不同的work工作进程绑定到不同的cpu上面去。就能够减少在work间不断切换cpu,把进程通常不会在处理器之间频繁迁移,进程迁移的频率小,来减少性能损耗。

image-20220724162515998

1)具体设置

Nginx运行工作进程个数一般设置CPU的核心或者核心数x2。如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 grep ^processor /proc/cpuinfo | wc -l。

image-20220724162828253

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

image-20220724163111614

ps aux | grep nginx#查看nginx主进程中包含几个子进程

image-20220724163218000

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支持

image-20220724164636215

方法十:高效传输模式
sendfile on; # 开启高效文件传输模式。
tcp_nopush on; #需要在sendfile开启模式才有效,防止网路阻塞,积极的减少网络报文段的数量。将响应头和正文的开始部分一起发送,而不一个接一个的发送。

image-20220724164807556

方法十一: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
在里面配置使访问盗链网站时上面可以显示源网站的图片信息

image-20220727151624155

image-20220727151844705

现在我们可以在源主机上配置一下,禁止别人盗用我没的东西 (俗称防盗链)
配置防盗链
  location ~* \.(swf)$ {
                   valid_referers none blocked *.sdhc.com sdhc.com;
             if ( $invalid_referer ) {
                   rewrite ^/ http://www.sdhc.com/error.png.jpg;
          }
}

image-20220727152743771

一下,禁止别人盗用我没的东西 (俗称防盗链)

配置防盗链
  location ~* \.(swf)$ {
                   valid_referers none blocked *.sdhc.com sdhc.com;
             if ( $invalid_referer ) {
                   rewrite ^/ http://www.sdhc.com/error.png.jpg;
          }
}

[外链图片转存中…(img-MRWAza7L-1659057036641)]

image-20220727154939032

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值