Web:nginx优化与防盗链

Nginx优化方法
●隐藏软件版本号
●设置连接超时
●更改程序运行用户与组
●更改进程数
●配置网页缓存时间
●配置网页压缩与防盗链
●Nginx日志切割
●fpm参数优化

nginx隐藏版本号
(在生产环境中,需要内藏版本号,以免泄露nginx的版本,使得攻击者不能对挺特定版本攻击)

查看nginx版本,可以使用命令curl -I 查看
[root@localhost ~]# curl -I http://192.168.153.220/
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Fri, 25 Jun 2021 19:01:04 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 23
Last-Modified: Tue, 22 Jun 2021 14:34:31 GMT
Connection: keep-alive
ETag: "60d1f4f7-17"
Accept-Ranges: bytes

隐藏版本号的第一种方法:修改配置文件
[root@localhost conf]# cd /usr/local/nginx/conf/
[root@localhost conf]# ls
fastcgi.conf            mime.types          scgi_params.default
fastcgi.conf.default    mime.types.default  uwsgi_params
fastcgi_params          nginx.conf          uwsgi_params.default
fastcgi_params.default  nginx.conf.bak      win-utf
koi-utf                 nginx.conf.default
koi-win                 scgi_params
[root@localhost conf]# vim nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens off;                #插入此行关闭版本号
保存退出
[root@localhost conf]# systemctl restart nginx
[root@localhost conf]# curl -I http://192.168.153.215   
HTTP/1.1 200 OK
Server: nginx                 #nginx版本号已经隐藏起来了
Date: Sat, 26 Jun 2021 16:56:52 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sat, 26 Jun 2021 16:27:43 GMT
Connection: keep-alive
ETag: "60d7557f-264"
Accept-Ranges: bytes
隐藏版本号的第二种方法:修改源码
src:基本所有的配置看到src就是放源码的位置
[root@localhost opt]# cd
[root@localhost ~]# ls
anaconda-ks.cfg  initial-setup-ks.cfg  nginx-1.12.2  nginx-1.12.2.tar.gz
[root@localhost opt]# cd nginx-1.12.2/
[root@localhost nginx-1.12.2]# cd src/
[root@localhost src]# ls
core  event  http  mail  misc  os  stream      #core是核心模块
[root@localhost core]# ls
nginx.c           ngx_inet.h             ngx_radix_tree.h
nginx.h           ngx_list.c             ngx_rbtree.c
[root@localhost core]# vim nginx.h    #仅修改此文件
#define nginx_version      1012002
#define NGINX_VERSION      "1.12.2"           #可以修改版本号
#define NGINX_VER          "apache/" NGINX_VERSION   #可以修改为apache
保存退出
然后需要重新编译安装
[root@localhost core]# cd /opt/nginx-1.12.2
[root@localhost nginx-1.12.2]#  ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module
[root@localhost nginx-1.12.2]# make && make install
然后把方法一中的关闭版本号重新打开
[root@localhost nginx-1.12.2]# cd /usr/local/nginx/conf/
[root@localhost conf]# vim nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens on;                #插入此行打开查看版本号
[root@localhost conf]# systemctl stop nginx
[root@localhost conf]# systemctl start nginx
[root@localhost conf]# curl -I http://192.168.153.215
HTTP/1.1 200 OK
Server: apache/1.12.2       #已经变成修改后的假名称
Date: Sat, 26 Jun 2021 17:32:50 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sat, 26 Jun 2021 16:27:43 GMT
Connection: keep-alive
ETag: "60d7557f-264"
Accept-Ranges: bytes

修改用户和组
若没有安装前创建用户,则在此服务中默认使用的是nobody

[root@localhost conf]# vim nginx.conf
#user  nobody;      
worker_processes  1;        将前面的#注释掉,然后修改
需要chown给与属组属主
systemctl restart nginx.service
ps aux | grep nginx        #查看用户与组是否修改成功

设置缓存时间

[root@localhost conf]# vim nginx.conf
        location / {
            root   html;
            index  index.html index.htm;
        }

        **location ~ \.(gif|jpg|jepg|bmp|ico)$ {     #添加图片识别(~代表所有设置图片类型的任意一个) 
          root  html;
          expires 1d;                  #设置缓存时间为一天
        }**
        
        #error_page  404              /404.html;
保存退出
上传文件,修改站点文件
[root@localhost nginx]# cd html/
[root@localhost html]# ls
50x.html  index.html
[root@localhost html]# rz -E
rz waiting to receive.
[root@localhost html]# ls
50x.html  e7ae8159abacbc2fb7dfc7afda7490a.jpg  index.html
[root@localhost html]# vim index.html
 14 <h1>Welcome to nginx!</h1>
 **15 <img src="e7ae8159abacbc2fb7dfc7afda7490a.jpg"/>**
保存退出
[root@localhost html]# systemctl restart nginx

测试方法1:访问网页
在这里插入图片描述
在这里插入图片描述
测试方法2: curl -I 192.168.153.215/e7ae8159abacbc2fb7dfc7afda7490a.jpg

[root@localhost html]# curl -I 192.168.153.215/e7ae8159abacbc2fb7dfc7afda7490a.jpg
HTTP/1.1 200 OK
Server: apache/1.12.2
Date: Sat, 26 Jun 2021 18:49:50 GMT
Content-Type: image/jpeg
Content-Length: 593508
Last-Modified: Sat, 05 Jun 2021 15:34:03 GMT
Connection: keep-alive
ETag: "60bb996b-90e64"
Expires: Sun, 27 Jun 2021 18:49:50 GMT
Cache-Control: max-age=86400     #看到设置的缓存的时间
Accept-Ranges: bytes

nginx日志分割
1、日志分割概述
●随着Nginx运行时间增加,日志也会增加。为了方便掌握Nginx运行状态,需要时刻关注Nginx日志文件
●太大的日志文件对监控是一个大灾难,所以要定期进行日志文件的切割(固定点——》时间戳)
●Nginx自身不具备日志分割处理的功能,但可以通过Nginx信号控制功能的脚本实现日志的自动切割
●通过Linux的计划任务周期性地进行日志切割

2、编写脚本日志分割思路
●设置时间变量
●设置保存日志路径
●将目前的日志文件进行重命名重建新日志文件
●删除时间过长的日志文件
●设置cron任务,定期执行脚本自动进行日志分割(一般选择在业务关闭时间点进行切割,升级,迁移等等)

3、日志分割脚本模板

[root@www logs]# vim lopt/fenge.sh
#!/bin/bash
#Filename:fenge.sh
d=$(date -d "-1 day" "+%Y%m%d")    #以时间戳方式进行日期的赋值(显示前一天的时间   可设置second minute hour day month year )
logs_path="/var/log/nginx"       #定义日志文件存放路径
pid_path="/usr/local/nginx/logs/nginx.pid"        #定义pid文件存放路径
[ -d $logs_path ] ||  mkdir -p $logs_path      #判断是否有日志存放路径,无则创建       
mv /usr/local/nginx/logs/access.log ${logs_path}/test.com-access.log-$d    #access日志移动到logs_path,并命名为test.com-access.log
kill -USR1 $(cat $pid_path)                    #重载使之生成新的acces.log用于日志分割(-OUIT 结束进程    -HUP平滑重启类似reload  -USR1日志分隔  -USR2平滑升级)
find $logs_path -mtime +30 | xargs rm -rf    #设置三十天之前的日志删除
访问时间atime: ( access time)显示的是文件中的数据【最后被访问的时间】,比如系统的进程直接使用或通过一些命令和脚本间接使用(执行一些可执行文件或脚本)
修改时间mtime: (modify time)显示的是文件内容被修改的最后时间,比如用vi编辑、echo >> > 、sed -i时就会被改变。(也就是Block的内容)
状态修改时间ctime: (change time)显示的是文件的权限、拥有者、所属的组、链接数发生改变时的时间。当然当内容改变时也会随之改变(即inode内容发生改变和Block内容发生改变时)

1、创建脚本
[root@localhost ~]# cd /opt/
[root@localhost opt]# ls
nginx-1.12.2  rh
[root@localhost opt]# vim fenge.sh
#!/bin/bash
#Filename:fenge.sh
d=$(date -d "-1 day" "+%Y%m%d")  
logs_path="/var/log/nginx"   
pid_path="/usr/local/nginx/logs/nginx.pid"  
[ -d $logs_path ] ||  mkdir -p $logs_path  
mv /usr/local/nginx/logs/access.log ${logs_path}/test.com-access.log-$d 
kill -HUP $(cat $pid_path)               
find $logs_path -mtime +30 | xargs rm -rf 
保存退出
[root@localhost opt]# systemctl start nginx
[root@localhost opt]# netstat -antp | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      38028/nginx: master 
[root@localhost opt]# ls /usr/local/nginx/logs
access.log  error.log  nginx.pid
2、给予权限执行分割
[root@localhost opt]# chmod +x fenge.sh         
[root@localhost opt]# ll
总用量 4
-rwxr-xr-x. 1 root  root  339 627 14:54 fenge.sh
drwxr-xr-x. 9 nginx nginx 186 627 01:27 nginx-1.12.2
drwxr-xr-x. 2 root  root    6 1031 2018 rh
 [root@localhost opt]# sh -x fenge.sh    查看调试信息
++ date -d '-1 day' +%Y%m%d
+ d=20210626
+ logs_path=/var/log/nginx
+ pid_path=/usr/local/nginx/logs/nginx.pid
+ '[' -d /var/log/nginx ']'
+ mv /usr/local/nginx/logs/access.log /var/log/nginx/test.com-access.log-20210626
++ cat /usr/local/nginx/logs/nginx.pid
+ kill -HUP 40027
+ find /var/log/nginx -mtime +30
+ xargs rm -rf
[root@localhost opt]# ls /var/log/nginx/   查看日志分割
test.com-access.log-20210626
修改时间,再次执行脚本
[root@localhost opt]# date -s 20210628
20210628日 星期一 00:00:00 CST
[root@localhost opt]# ./fenge.sh
[root@localhost opt]# ls /var/log/nginx
test.com-access.log-20210626  test.com-access.log-20210627
周期任务定时执行
[root@localhost opt]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
0 1 * * * /opt/fenge.sh        #每天一点整执行此脚本

配置Nginx实现连接超时
概述:为避免同一客户端长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间
Nginx使用keepalive_timeout来指定KeepAlive的超时时间(timeout)。
指定每个TCP连接最多可以保持多长时间。Nginx的默认值是65秒,有些浏览器最多只保持60秒,若将它设置为0,就禁止了keepalive连接。

超时参数:
●Keepalive_timeout 设置连接保持超时时间
●Client_header_timeout 指定等待客户端发送请求头的超时时间
●Client_body_timeout 设置请求体读超时时间

[root@localhost opt]# cd /usr/local/nginx/conf/
[root@localhost conf]# vim nginx.conf
 #keepalive_timeout  0;    
    keepalive_timeout  65;          
    client_header_timeout 80;        #等待客户端发送请求头的超时时间超时会发送408错误
    client_body_timeout 80;        #设置客户端发送请求体超时时间

nignx更改运行进程数
概述:在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞,增加进程数,可减少了系统的开销,提升了服务速度
更改进程数的配置方法:
●修改配置文件nginx.conf,修改进程配置参数
修改配置文件的worker_processes参数
●一般设为CPU的个数或者核数
●在高并发情况下可设置为CPU个数或者核数的2倍,默认情况,,Nginx的多个进程可能跑在一个CPU上,可以分配不同的进程给不同的CPU处理,充分利用硬件多核多CPU

[root@localhost proc]# cat /proc/cpuinfo | grep -c "physical"
8
[root@localhost proc]# ps aux | grep nginx
root      40027  0.0  0.0  20584  1460 ?        Ss   627   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     40103  0.0  0.0  23088  1412 ?        S    00:00   0:00 nginx: worker process
root      40492  0.0  0.0 112724   988 pts/2    S+   00:33   0:00 grep --color=auto nginx

[root@localhost proc]# vim /usr/local/nginx/conf/nginx.conf
2核cpu.开启2个进程
worker_processes  2;       #修改为核数相同或者2倍
worker_cpu_affinity 01 10;      #设置每个进程由不同的cpu处理,进程数匹配为2时为0001001001001000
2核cpu.开启4个进程
worker_processes  4;
worker_cpu_affinity 01 10 01 10;
4核cpu.开启4个进程
worker_processes  4;
worker_cpu_affinity 0001 0010 0100 1000;         

nginx配置网页压缩
●Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能
●允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装
●可在配置文件中加入相应的压缩功能参数对压缩性能进行优化

压缩功能参数
gzip on:开启gzip压缩输出
gzip_min_length 1k:设置允许压缩的页面最小字节数
gzip_buffers 4 16k:申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
gzip_http_version 1.1:设置识别http协议版本,默认是1.1,目前大部分浏览器已经支持gzip解压,但处理较慢,也比较消耗服务器CPU资源
gzip_comp_level 2:指定gzip压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理速度最慢gzip_types text/plain:压缩类型,对哪些网页文档启用压缩功能
gzip_vary on:让前端缓存服务器缓存经过gzip压缩的页面
[root@localhost proc]# vim /usr/local/nginx/conf/nginx.conf
#gzip  on;
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    #gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types text/plain;
    gzip_vary on;
[root@localhost proc]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost proc]# cd /usr/local/nginx/html/
[root@localhost html]# vim index.html
<h1>Welcome to nginx!</h1>
<img src="e7ae8159abacbc2fb7dfc7afda7490a.jpg"/>
[root@localhost html]# ls
50x.html  e7ae8159abacbc2fb7dfc7afda7490a.jpg  index.html
[root@localhost html]# rz -E
rz waiting to receive.
[root@localhost html]# systemctl stop nginx
[root@localhost html]# systemctl start nginx
[root@localhost html]# netstat -antp | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      41752/nginx: master 

在这里插入图片描述

nginx中FPM模块参数优化
概述:
● Nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整
● 根据服务器的内存与服务负载,调整FPM模块参数
●启动fpm进程方式,通过pm参数指定
static:将产生固定数量的fpm进程
dynamic:将以动态的方式产生fpm进程

FPM优化参数:
Static的方式的参数
pm.max_children:指定启动的进程数量
Dynamic方式的参数
pm.max_children:指定启动进程数的最大值
pm.start_servers:动态方式下初始的fpm进程数
pm.min_spare_servers:动态方式下最小的fpm空闭进程数
pm.max_spare_servers:动态方式下最大的fpm空闭进程数

nginx盗链
盗链端:192.168.153.220 #nginx服务
服务端:192.168.153.215 #nginx服务
win10: 192.168.153.150 #指向服务端dns服务

1、两台主机添加映射
[root@localhost html]# vim /etc/hosts
192.168.153.215 www.e7ae8159abacbc2fb7dfc7afda7490a.com
保存退出
2、win10添加映射
位置:
c: \WINDOWS\System32\drivers\etc
修改hosts文件如下(权限改为完全控制)

在这里插入图片描述

3、检查nginx两台机
[root@localhost html]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 114.114.114.114
4、添加图片
[root@localhost html]# cat index.html
<h1>Welcome to nginx!</h1>
<img src="e7ae8159abacbc2fb7dfc7afda7490a.jpg"/>
5、使用win10访问192.168.153.215.com.e7ae8159abacbc2fb7dfc7afda7490a.jpg记录下图片路径

在这里插入图片描述

6、在盗链端上设置盗链
[root@localhost ~]# cd /usr/local/nginx
[root@localhost nginx]# ls
client_body_temp  fastcgi_temp  logs       proxy_temp  scgi_temp
conf              html          passwd.db  sbin        uwsgi_temp
[root@localhost nginx]# cd html/
[root@localhost html]# ls
50x.html  index.html
[root@localhost html]# vim index.html
<h1>Welcome to nginx!</h1>
<img src="http://www.e7ae8159abacbc2fb7dfc7afda7490a.com/e7ae8159abacbc2fb7dfc7afda7490a.jpg">
其他内容全部删除保存退出
[root@localhost html]# systemctl start nginx
此时通过盗链端访问自己的地址192.168.153.220即可看见215网站添加的图片

在这里插入图片描述

防盗链

 修改server端主机的nginx配置文件
[root@localhost ~]# cd /usr/local/nginx
[root@localhost nginx]# vim /usr/local/nginx/conf/nginx.conf
添加内容
 location ~*\.(jpg|gif|swf)$ {
        valid_referers none blocked *.e7ae8159abacbc2fb7dfc7afda7490a.com e7ae8159abacbc2fb7dfc7afda7490a.com;
        if ( $invalid_referer ) {
           rewrite ^/ http://www.e7ae8159abacbc2fb7dfc7afda7490a.com/sb.jpg;
        }
}  
[root@localhost nginx]# cd html/
[root@localhost html]# ls
50x.html                             e7ae8159abacbc2fb7dfc7afda7490a.jpg.0
e7ae8159abacbc2fb7dfc7afda7490a.jpg  index.html
上传sb图片
[root@localhost html]# ls
50x.html                             e7ae8159abacbc2fb7dfc7afda7490a.jpg.0  sb.jpg
e7ae8159abacbc2fb7dfc7afda7490a.jpg  index.html                             sb.jpg.0
                               
防盗链设置参数详细说明:
valid_referers:设置信任的网站,即能引用相应图片的网站(白名单)
none:浏览器中 Referer为空的情况,就是直接在浏览器访问图片
blocked: referer不为空的情况,但是值被代理或防火墙删除了,这些值不以http://或者https://开头后面的网址或者域名: referer中包含相关字符串的网址
if语句:如果链接的来源域名不在 valid_referers所列出的列表中,
$invalid referer为1,则执行后面的操作,即进行重写或返回403页面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值