nginx 日志分割、优化与防盗链

本文介绍了如何进行Nginx日志分割,包括创建脚本和设置定时任务。接着探讨了Nginx的优化技巧,如隐藏版本信息、设置图片缓存、调整连接超时和进程数以及实现网页压缩。此外,还讲解了防止盗链的方法和FPM参数优化,以提升Nginx服务器的性能和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、ngxin日志分割

nginx自身不具备日志分割处理的功能,但可以通过nginx信号控制功能的脚本实现日志的自动分割,通过Linux的计划任务crontab周期性地进行日志分割
实现步骤

  • 一、创建脚本
vim /opt/nginx_log_cut.sh
#!/bin/bash
#Filename:nginx_log_cut.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}/access.log-$d
kill -HUP $(cat $pid_path)
find $logs_path -mtime +30 | xargs rm -rf

date -d “-1 day” “+%Y%m%d” 表示前一天的时间
kill -HUP $(cat $pid_path) 表示重载服务

  • 二、给予权限,并执行脚本
[root@www opt]# chmod +x nginx_log_cut.sh 
[root@www opt]# ./nginx
  • 三、查看分割的日志
[root@www opt]# ls /var/log/nginx/
access.log-20210623
[root@www opt]#
  • 四、修改时间再次执行脚本
[root@www opt]# date -s 20210625
20210625日 星期五 00:00:00 CST
[root@www opt]# ./nginx_log_cut.sh
[root@www opt]# ls /var/log/nginx/
access.log-20210623  access.log-20210624
[root@www opt]# 
  • 五、设置定时任务
[root@www opt]# crontab -e
0 1 * * * /opt/nginx_log_cut.sh

二、优化

2.1隐藏版本

两种方式:① 修改配置文件法 ② 修改源码法

2.1.1、修改配置文件法

  • 在nginx主配置文件内添加 server_tokens off; 此内容,表示关闭版本号
[root@www opt]# vim /usr/local/nginx/conf/nginx.conf
 17 http {
 18     include       mime.types;
 19     default_type  application/octet-stream;
 20     server_tokens off;
  • 重启服务,查看版本号,使用crul -I 命令查看版本号
[root@www opt]# curl -I 192.168.177.111
HTTP/1.1 200 OK
Server: nginx/1.15.9 //可以看到版本号
Date: Thu, 24 Jun 2021 16:21:44 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 24
Last-Modified: Thu, 24 Jun 2021 05:22:09 GMT
Connection: keep-alive
ETag: "60d41681-18"
Accept-Ranges: bytes

[root@www opt]# systemctl stop nginx
[root@www opt]# systemctl start nginx
[root@www opt]# curl -I 192.168.177.111
HTTP/1.1 200 OK
Server: nginx //隐藏了版本号
Date: Thu, 24 Jun 2021 16:22:26 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 24
Last-Modified: Thu, 24 Jun 2021 05:22:09 GMT
Connection: keep-alive
ETag: "60d41681-18"
Accept-Ranges: bytes

[root@www opt]# 

2.1.2、修改源码法

  • 源码包里面src目录就是存源码的地方
[root@www opt]# vim /opt/nginx-1.15.9/src/core/nginx.h
 12 #define nginx_version      1015009
 13 #define NGINX_VERSION      "1.2.3" //将原始的1.15.9修改为1.2.3
 14 #define NGINX_VER          "abcd/" NGINX_VERSION //将nginx修改为abcd

  • 重新编译安装
[root@www opt]# cd /opt/nginx-1.15.9
[root@www nginx-1.15.9]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
[root@www nginx-1.15.9]# make && make install
  • 在nginx主配置文件内注释掉添加的 server_tokens off;
 17 http {
 18     include       mime.types;
 19     default_type  application/octet-stream;
 20     #server_tokens off;
  • 重启服务,查看版本号
[root@www nginx-1.15.9]# curl -I 192.168.177.111
HTTP/1.1 200 OK
Server: abcd/1.2.3 //修改成功
Date: Thu, 24 Jun 2021 16:34:51 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 24
Last-Modified: Thu, 24 Jun 2021 05:22:09 GMT
Connection: keep-alive
ETag: "60d41681-18"
Accept-Ranges: bytes

[root@www nginx-1.15.9]# 

2.2设置图片缓存时间

  • 修改主配置文件,添加图片识别,设置缓存时间1天
  1 
  2 #user  nobody;
  3 worker_processes  1;
  4 
  5 #error_log  logs/error.log;
  6 #error_log  logs/error.log  notice;
  7 #error_log  logs/error.log  info;
  8 
  9 #pid        logs/nginx.pid;
 10 
 11 
 12 events {
 13     worker_connections  1024;
 14 }
		......//省略部分内容
 36     server {
 37         listen       192.168.177.111:80;
 38         server_name  www.accp.com;
 39         charset utf-8;
 40         access_log  logs/access.log;
 41         location / {
 42             root   /var/www/html/accp;
 43             index  index.html index.htm;
 44         }
 45         location ~ \.(gif|jpg|jpeg|bmp|ico)$ {  //添加图片识别
 46          root   html;
 47          expires 1d; //缓存时间一天
 48         }
 	......//省略部分内容
  • 重启服务,查看是否有缓存时间

在这里插入图片描述

2.3设置连接超时

Nginx 使用 keepalive_timeout 指定每个 TCP 连接最多可以保持多长时间,默认值是 65 秒。
若将它设置为 0,就禁止了 keepalive 连接。
在这里插入图片描述

[root@www html]# vim /usr/local/nginx/conf/nginx.conf
 ......//省略部分内容
 31     #keepalive_timeout  0;
 32     keepalive_timeout  65;
 33     client_header_timeout 80;
 34     client_body_timeout 80; 

client_header_timeout 80; ——等待客户端发送请求头的超时时间 超时会发送408错误
client_body_timeout 80; ——设置客户端发送请求体超时时间

2.4设置进程数

  • 先查看当前系统cpu的核数,然后再来做相应的调整
  • cpu信息、内存信息等在/proc目录下
[root@www html]# grep -c "physical id" /proc/cpuinfo //cpu核数是4
4
[root@www html]# ps aux | grep nginx
root      95529  0.0  0.0  20556   632 ?        Ss   01:08   0:00 nginx: master process /usr/local/nginx/sbin/nginx
																		//上面一行是nginx的主进程
nginx     95530  0.0  0.0  23092  1648 ?        S    01:08   0:00 nginx: worker process //nginx的子进程
root      95830  0.0  0.0 112724   984 pts/1    S+   01:39   0:00 grep --color=auto nginx
[root@www html]# 
  • 修改nginx主配置文件设置进程数
vim /usr/local/nginx/conf/nginx.conf
worker_processes 2;   //2核cpu,开启2个进程(修改为核数相同或者2倍)
worker_cpu_affinity 01 10; //设置每个进程由不同cpu处理,进程数配为2时为0001、0010

worker_cpu_affinity 01 10;表示开启两个进程,第一个进程对应着第一个CPU内核,第二个进程对应着第二个CPU内核。01表示启用第一个CPU内核,10表示启用第二个CPU内核

worker_processes 4; //2核cpu,开启4个进程
worker_cpu_affinity 01 10 01 10;

worker_cpu_affinity 01 10 01 10;表示开启四个进程开启了四个进程,它们分别对应着开启2个CPU内核,第一个进程对应着第一个CPU内核,第二个进程对应着第二个CPU内核,第三个进程对应着第一个CPU内核,第四个进程对应着第二个CPU内核。

worker_processes 4; //4核cpu,开启4个进程
worker_cpu_affinity 0001 0010 0100 1000;

worker_cpu_affinity 0001 0010 0100 1000; 0001表示启用第一个CPU内核,0010表示启用第二个CPU内核,依此类推

2.5网页压缩

gzip on;                                     #开启gzip压缩功能
gzip_min_length 1k;                 #设置允许压缩的页面最小字节数
gzip_buffers 4 16k;                   #buffer 大小为4个16k缓冲区大小
gzip_http_version 1.1;              #压缩版本(默认不设置)
gzip_comp_level 6;                  #压缩比率,最小为1,处理速度快,传输速度慢,9最大压缩比,处理速度慢,传输速度快
                                                 #建议5-6
gzip_types text/plain application/x-javascript text/css image/jpg image/jpeg image/png image/gif application/xml text/javascript application/x-httpd-php application/javascript application/json;
gzip_disable “MSIE [1-6].”;      #配置禁用gzip条件,支持正则,表示ie6以下不启用gzip
gzip_vary on;                           #支持前端缓存服务器存储压缩页面

  • 修改nginx主配置文件
[root@www html]# vim /usr/local/nginx/conf/nginx.conf
......//省略部分内容
    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 6;
    gzip_types text/plain application/x-javascript text/css image/jpg image/jpeg image/png image/gif application/xml text/javascript application/x-httpd-php application/javascript application/json;
    gzip_disable "MSIE [1-6]\.";
    gzip_vary on;
......//省略部分内容

三、防盗链

  • 实验环境:

    • nginx服务端:IP地址 192.168.177.111
    • nginx盗链端:IP地址 192.168.177.130
    • win10客户端
  • 实验步骤:

    • ①nginx服务端、nginx盗链端,添加dns映射
    • ②win10客户端添加dns映射
    • ③上传图片到nginx服务端
    • ④修改nginx服务端主页,插入图片,win10客户端访问
    • ⑤在nginx盗链端,修改主页设置盗链

  • nginx服务端 192.168.177.111
echo "192.168.177.111 www.dog.com" >> /etc/hosts
  • nginx盗链端 192.168.177.130
echo "192.168.177.111 www.dog.com" >> /etc/hosts
  • win10客户端:修改hosts文件(C:\Windows\System32\drivers\etc)目录下

在这里插入图片描述

  • 上传图片到nginx服务端
    在这里插入图片描述
    修改nginx服务端主页,插入图片,win10客户端访问
    在这里插入图片描述
    在这里插入图片描述
    在nginx盗链端,修改主页设置盗链(盗链端并没有上传任何图片)
    在这里插入图片描述
    win10客户端访问盗链端
    在这里插入图片描述
  • nginx服务端修改主配置文件,设置防盗链
.....//省略部分内容
server {
        listen       192.168.177.111:80;
        server_name  localhost;
        charset utf-8;
        access_log  logs/access.log;
        location / {
            root   html;
            index  index.html index.htm;
        }
        location ~*\.(jpg|gif|swf|jpeg)$ {
            valid_referers none blocked *.dog.com dog.com; 
            #只允许来源为*.dog.com dog.com的访问源进行访问,如果不是显示error.png图片
            if ( $invalid_referer ) {
               rewrite ^/ http://www.dog.com/error.png;
            }
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    .....//省略部分内容

防盗链设置参数详细说明:
valid_referers:设置信任的网站(白名单)
none:浏览器中 Referer为空的情况,就是直接在浏览器访问图片
blocked:referer不为空的情况,但是值被代理或防火墙删除了,这些值不以http://或者https://开头
后面的网址或者域名:referer中包含相关字符串的网址
if语句:如果链接的来源域名不在 valid_referers 所列出的列表中, $invalid_referer为1,则执行后面的操作,即进行重写或返回403页面
在这里插入图片描述

四、fpm参数优化

Nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整
FPM模块参数调整,要根据服务器的内存与服务负载进行调整

  • 启动fpm进程方式——通过pm参数指定
    • static:将产生固定数量的fpm进程
      • pm.max_children:指定启动的进程数量
    • dynamic:将以动态的方式产生fpm进程
      • pm.max_children:指定启动的进程数量最大的数量
      • pm.start_servers:动态方式下初始的fpm进程数量
      • pm.min_spare_servers:动态方式下最小的fpm空闲进程数
      • pm.max_spare_servers:动态方式下最大的fpm空闲进程数
vim /usr/local/php/etc/php-fpm.conf 
pid = run/php-fpm.pid
pm = dynamic //动态模式   静态模式参数为static
pm.max_children=20    
pm.start_servers = 5   
pm.min_spare_servers = 2  
pm.max_spare_servers = 8  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值