您现在的位置是:首页 >学无止境 >Nginx优化与防盗链网站首页学无止境

Nginx优化与防盗链

陌上花开,静待绽放! 2024-08-13 12:01:03
简介Nginx优化与防盗链

Nginx服务优化

1.配置Nginx隐藏版本号

在这里插入图片描述

(1)修改配置文件法/usr/local/nginx/conf/nginx.conf

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(1)修改源码法

在这里插入图片描述

在这里插入图片描述

[root@clr /opt]# ls
nginx-1.24.0  nginx-1.24.0.tar.gz  rh
[root@clr /opt]# cd /opt/nginx-1.24.0/src/core
[root@clr /opt/nginx-1.24.0/src/core]# vim nginx.h
#define NGINX_VERSION      "2.4.6"       #修改版本号
#define NGINX_VER          "apache/" NGINX_VERSION    #修改软件名称

[root@clr /opt/nginx-1.24.0/src/core]# cd /opt/nginx-1.24.0/
[root@clr /opt/nginx-1.24.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install

在这里插入图片描述

[root@clr /opt/nginx-1.24.0]# cd /usr/local/nginx/conf
[root@clr /usr/local/nginx/conf]# vim nginx.conf

    server_tokens on;   #显示软件版本号

[root@clr /usr/local/nginx/conf]# systemctl restart nginx  #重启nginx服务
[root@clr /usr/local/nginx/conf]# curl -I http://192.168.80.50
HTTP/1.1 200 OK
Server: apache/2.4.6    #此处显示的伪装的版本号

在这里插入图片描述

2.更改程序运行用户与组

修改Nginx用户与组

在这里插入图片描述
在这里插入图片描述

(1)编译安装时指定用户与组

在这里插入图片描述

 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install       # --user指定用户, --group指定组

(2)修改配置文件法指定

在这里插入图片描述

[root@clr /usr/local/nginx/conf]# ps aux | grep nginx
root      71319  0.0  0.0  20584   620 ?        Ss   16:15   0:00 nginx: master process /usr/local/nginx/sbinnginx
nginx     71320  0.0  0.0  23112  1628 ?        S    16:15   0:00 nginx: worker process
root      71477  0.0  0.0 112824   976 pts/2    S+   16:31   0:00 grep --color=auto nginx
[root@clr /usr/local/nginx/conf]# vim nginx.conf
user  nobody;     #修改允许访问nginx服务的组账号与用户账号

[root@clr /usr/local/nginx/conf]# systemctl restart nginx
[root@clr /usr/local/nginx/conf]# ps aux | grep nginx
root      71524  0.0  0.0  20588   624 ?        Ss   16:35   0:00 nginx: master process /usr/local/nginx/sbinnginx
nobody    71525  0.0  0.0  23116  1384 ?        S    16:35   0:00 nginx: worker process
root      71527  0.0  0.0 112824   976 pts/2    S+   16:35   0:00 grep --color=auto nginx

[root@clr /usr/local/nginx/conf]# vim nginx.conf
user  nginx nginx;   #第一个nginx代表用户名,第二个nginx代表组名

[root@clr /usr/local/nginx/conf]# systemctl restart nginx
[root@clr /usr/local/nginx/conf]# ps aux | grep nginx
root      71556  0.0  0.0  20588   624 ?        Ss   16:37   0:00 nginx: master process /usr/local/nginx/sbinnginx
nginx     71557  0.0  0.0  23116  1384 ?        S    16:37   0:00 nginx: worker process
root      71559  0.0  0.0 112824   980 pts/2    S+   16:37   0:00 grep --color=auto nginx

在这里插入图片描述

3.配置网页缓存时间

在这里插入图片描述

在这里插入图片描述

  • http段:实现对所有虚拟主机站点网页进行缓存

  • server段:实现对某一个虚拟主机的一个站点中所有网页进行缓存

  • location段:实现对某一个虚拟主机的某个指定访问路径进行缓存

在这里插入图片描述

[root@clr /usr/local/nginx/conf]# vim nginx.conf
    server {
        location ~ .(html|htm|gif|png|jpg|jpeg)$ {     #针对不同后缀的文件进行缓存
           root    html;
           expires  1d;
        }
   }

[root@clr /usr/local/nginx/conf]# 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@clr /usr/local/nginx/conf]# systemctl restart nginx

[root@clr /usr/local/nginx/conf]# cd ../
[root@clr /usr/local/nginx/html]# vim test.html    #编写静态访问页面
<html>
<body>
<h1>this is nginx test web!</h1>
<h1>look,my girl!!!</h1>
<img src="girl.png" />
</body>
</html>

在这里插入图片描述

在这里插入图片描述

4.Nginx日志切割

在这里插入图片描述

[root@clr /usr/local/nginx]# vim fengge.sh 

#!/bin/bash
#该脚本用于存放nginx服务三个月内的的分割日志

#定义变量获取当前时间前一天的时间格式
lastday=$(date -d "-1 day" +%Y-%m-%d)

#定义变量指定存放分割日志的目录
log_path="/var/log/nginx"

#定义变量指定nginx的工作目录
nginx_home="/usr/local/nginx"

#定义变量指定nginx服务的pid号文件路径
pid_path="$nginx_home/logs/nginx.pid"

#############main################
#判断存放分割日志的目录是否存在,如若不存在则创建
if [ ! -d $log_path ];then
  mkdir -p $log_path
fi

#[ -d $log_path ] || mkdir -p $log_path

#执行日志分割操作,将访问/错误日志移动到指定目录/var/log/nginx/中,并以指定时间格式保存
mv $nginx_home/logs/access.log $log_path/access.log-$lastday
mv $nginx_home/logs/error.log $log_path/error.log-$lastday

#重建新日志文件
kill -USR1 $(cat $pid_path)

#删除90天(3个月)前的旧日志文件
find $log_path -mtime +90 | xargs rm -rf

[root@clr /usr/local/nginx]# ls /var/log | grep nginx      
[root@clr /usr/local/nginx]# ls /var/log/nginx
ls: 无法访问/var/log/nginx: 没有那个文件或目录
[root@clr /usr/local/nginx]# bash fengge.sh 
[root@clr /usr/local/nginx]# ls /var/log/nginx
access.log-2023-06-01  error.log-2023-06-01     #按照指定格式新生成的nginx服务的日志文件

[root@clr /usr/local/nginx]# crontab -e   #设置计划性任务,每天的0点0分执行脚本文件
0 0 * * * /usr/local/nginx/fengge.sh
[root@clr /usr/local/nginx]# crontab -l
0 0 * * * /usr/local/nginx/fengge.sh
[root@clr /usr/local/nginx]# systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since 六 2023-04-22 19:21:03 CST; 1 months 10 days ago

在这里插入图片描述
在这里插入图片描述

5.设置连接超时

在这里插入图片描述
HTTP有一个KeepAlive模式,它告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态。若接收到来自同一客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接
KeepAlive在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。

keepalive_timeout

指定KeepAlive的超时时间(timeout)。指定一个长连接最多可以保持多长时间,服务器将会在这个时间后关闭连接。 Nginx的默认值是65秒,有些浏览器最多只保持60秒,所以可以设定为60秒。若将它设置为0,就禁止了keepalive 连接。
第二个参数(可选的)指定了在响应头Keep-Alive:timeout=time中的time值。这个头能够让一些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Nginx不会发送Keep-Alive响应头。

client_header_timeout

客户端向服务端发送一个完整的request header的超时时间。如果客户端在指定时间内没有发送一个完整的 request header,Nginx返回HTTP 408(Request Timed Out)。

client_body_timeout

指定客户端与服务端建立连接后发送request body的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx返回HTTP 408(Request Timed Out)。

在这里插入图片描述

[root@clr /usr/local/nginx/conf]# vim nginx.conf
    #keepalive_timeout  0;
    keepalive_timeout  60 60;      #第一个60代表服务器端主动断开连接保持时间,第二个60代表客户端主动断开连接保持时间
    client_header_timeout 80;
    client_body_timeout 80;

在这里插入图片描述

6.更改进程数

在这里插入图片描述
在这里插入图片描述

[root@clr /usr/local/nginx/conf]# vim nginx.conf

worker_processes  auto;    #此处设置为auto,代表自动获取系统的cpu个数
[root@clr /usr/local/nginx/conf]# nginx -t
[root@clr /usr/local/nginx/conf]# systemctl restart nginx.service 
[root@clr /usr/local/nginx/conf]# ps aux | grep nginx
root      73918  0.0  0.0  20588   636 ?        Ss   19:27   0:00 nginx: master process /usr/local/nginx/sbinnginx
nginx     73919  0.0  0.0  23116  1396 ?        S    19:27   0:00 nginx: worker process
nginx     73920  0.0  0.0  23116  1396 ?        S    19:27   0:00 nginx: worker process
root      73922  0.0  0.0 112824   980 pts/2    S+   19:27   0:00 grep --color=auto nginx
[root@clr /usr/local/nginx/conf]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2    #查看系统的cpu个数为2

在这里插入图片描述
在这里插入图片描述

[root@clr /usr/local/nginx/conf]# vim nginx.conf
user  nginx nginx;
worker_processes  auto;
worker_cpu_affinity 01 10;       #为两核cpu绑定进程

[root@clr /usr/local/nginx/conf]# nginx -t
[root@clr /usr/local/nginx/conf]# systemctl restart nginx.service 

在这里插入图片描述

7.配置网页压缩与防盗链

在这里插入图片描述
在这里插入图片描述

[root@clr /usr]# cd /opt/nginx-1.24.0/
[root@clr /opt/nginx-1.24.0]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  Makefile  man  objs  README  src
[root@clr /opt/nginx-1.24.0]# cd auto/
[root@clr /opt/nginx-1.24.0/auto]# ls
cc      endianness  have          headers  init     lib   module   nohave   os       stubs    threads  unix
define  feature     have_headers  include  install  make  modules  options  sources  summary  types
[root@clr /opt/nginx-1.24.0/auto]# cat options | grep YES
HTTP=YES
HTTP_CACHE=YES
HTTP_CHARSET=YES
HTTP_GZIP=YES
HTTP_SSI=YES
HTTP_ACCESS=YES
HTTP_AUTH_BASIC=YES
HTTP_MIRROR=YES
HTTP_USERID=YES
HTTP_AUTOINDEX=YES
HTTP_GEO=YES

在这里插入图片描述
在这里插入图片描述

[root@clr /opt/nginx-1.24.0/auto]# cd /usr/local/nginx/conf
[root@clr /usr/local/nginx/conf]# vim nginx.conf
    gzip on;							#取消注释,开启gzip压缩功能
   gzip_min_length 1k;      		#最小压缩文件大小
   gzip_buffers 4 64k;      		#压缩缓冲区,大小为4个64k缓冲区
   gzip_http_version 1.1;   		#压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
   gzip_comp_level 6;       		#压缩比率
   gzip_vary on;					#支持前端缓存服务器存储压缩页面
   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;		#压缩类型,表示哪些网页文档启用压缩功能

在这里插入图片描述

在这里插入图片描述

盗链网站中设置以下配置操作
[root@clr ~]# vim /etc/httpd/conf/httpd.conf 
ServerName www.accp.com:80

[root@clr ~]# cd /var/www/html
[root@clr /var/www/html]# vim daolian.html

<html>
<body>
<h1>this is dao lian web!!!!!</h1>
<img src="http://www.gzy.com/girl.png" />     #图片路径信息来自于源网站的地址
</body>
</html>

在这里插入图片描述
在这里插入图片描述

[root@clr /usr/local/nginx/conf]# vim nginx.conf
http {
    server {
        location ~ .(gif|jpg|jpeg)$ {
             root  html;
             expires 1h;

             valid_referers none blocked *.gzy.com gzy.com;
             if ($invalid_referer) {
                rewrite ^/ http://www.gzy.com/error.png;
            }
        }
     }
}              

在这里插入图片描述
在这里插入图片描述

2. Nginx深入优化

应用程序级别的优化:

优化名称操作关键字
隐藏版本号server_tokens off;
设置运行用户/组user 用户组 组名;
页面缓存时间expires 时间;
连接保持超时keepalive_timeout 服务器超时时间 [客户端超时时间];
设置工作进程数worker_processes auto; 或者同CPU数量 worker_cpu_affinity 绑核
设置并发worker_rlimit_nofile、worker_connections
网页压缩gzip on;
防盗链rewrite
IO模型 IO多路复用events { use epoll; }
日志分割脚本

系统内核级别的优化

ulimit -n    
/etc/security/limits.conf  
*                soft    nofile          65535			打开文件数
*                hard    nofile          65535
*                soft    nproc           65535			打开进程数
*                hard    nproc           65535
*                soft    memlock         unlimited		内存锁定不限制
*                hard    memlock         unlimited
/etc/sysctl.conf
net.ipv4.tcp_syncookies =1			开启SYNCookies
net.ipv4.tcp_tw_reuse = 1			允许将TIME-WAIT sockets重新用于新的TCP连接,
net.ipv4.tcp_tw_recycle = 1			开启TCP连接中TIME-WAIT sockets的快速回收
net.ipv4.tcp_fin_timeout = 30		修改系统默认的fin TIMEOUT 时间

net.ipv4.ip_local_port_range = 1024 65535   外向连接的端口范围
net.ipv4.tcp max tw buckets= 5000           系统同时保持TIME WAIT最大数量         
net.ipv4.tcp_max_syn_backlog = 8192         SYN队列长度
net.ipv4.tcp_keepalive_time = 1200          发送keepalive探测包消息的频度

用过哪些nginx模块?

关键字模块名称
http_gzip_static_module网页压缩模块
http_stub_status_module状态统计模块
http_rewrite_moduleURL重写模块
http_auth_basic_module用户认证模块
http_fastcgi_modulefastcgi转发php-fpm模块
http_ssl_modulehttps安全加密认证模块
http_proxy_module请求转发模块
http_upstream_*_module反向代理负载均衡模块
http_stream_*_module四层反向代理模块
http_limit conn module限制最大连接数模块
http_limit reg module限制最大访问频率模块
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。