Nginx优化与防盗链

一.Nginx服务优化

1.配置Nginx隐藏版本号

(一) 修改配置文件方式

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

[root@ngnix nginx-1.26.1]# cd /usr/local/nginx/conf
[root@ngnix conf]# ls
fastcgi.conf            koi-utf             nginx.conf           uwsgi_params
fastcgi.conf.default    koi-win             nginx.conf.default   uwsgi_params.default
fastcgi_params          mime.types          scgi_params          win-utf
fastcgi_params.default  mime.types.default  scgi_params.default
[root@ngnix conf]# vim nginx.conf
 server_tokens on;   #打开显示版本号
[root@ngnix conf]# systemctl restart nginx
[root@ngnix conf]# curl -I http://192.168.80.30
HTTP/1.1 200 OK
Server: apache/2.48.0
Date: Sun, 02 Jun 2024 05:13:40 GMT
Content-Type: text/html; charset=utf-8

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

修改Nginx用户与组

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

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

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

​​​​

[root@ngnix conf]# vim nginx.conf
[root@ngnix conf]# systemctl restart nginx.service 
[root@ngnix conf]# ps aux | grep nginx
root       5518  0.0  0.0  46008  1164 ?        Ss   13:34   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx      5520  0.0  0.0  48484  2000 ?        S    13:34   0:00 nginx: worker process
root       5524  0.0  0.0 112824   988 pts/0    R+   13:34   0:00 grep --color=auto nginx

3.配置网页缓存时间

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

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

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

    [root@ngnix conf]# vim nginx.conf
    [root@ngnix 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@ngnix conf]# systemctl reload nginx
    [root@ngnix conf]# cd /usr/local/nginx/html/
    http {
    ......
    server {
    ......
    location / {
    root html;
    index index.html index.htm;
    }

      	location ~ \.(gif|jpg|jepg|png|bmp|ico)$ { 		#加入新的 location,以图片作为缓存对象
      		root html;
      		expires 1d;									#指定缓存时间,1天
      	}
    

    ......
    }
    }
    http://www.xy101.com/dingzhen.html

4. 日志分割

#!/bin/bash
#this is used for cutting nginx log files


YESTERDAY=$(DATE -D "-1 day" "+%Y%m%d")
LOGPATH=/var/log/nginx

NGINX_HOME=/usr/local/nginx
PIDPATH=$NGINX_HOME/logs/nginx.conf

#使用test -d判断专门保存日志的目录是否存在,如果不存在则创建目录
test -d $LOGPATH || mkdir -p $LOGPATH

#使用mv命令进行日志分制,移动日志文件到专门保存日志的目录里,并在文件名后缀添加时间标记
mv $NGINX_HOME/logs/access.log $LOGPATH/access.log_$YESTERDAY
mv $NGINX_HOME/logs/access.log $LOGPATH/ERROR.log_$YESTERDAY

#使用kill -USR1 使nginx生成新的日志文件,用于后续的日志记录
kill -USR1 $(cat $PIDPATH)

#使用find -mtime 选项查找出超过N天以前的旧日志文件并删除,用来释放磁盘空间
find $LOGPATH -mtime +90 -delete

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)。

vim /usr/local/nginx/conf/nginx.conf
http {
...... 
    keepalive_timeout 65 55;第一个65代表服务器端主动断开连接保持时间,第二个55代表客户端主动断开连接保持时间
    keepalive_requests 100;
    client_header_timeout 80;
    client_body_timeout 80;
...... 
}

systemctl restart nginx

6.更改进程数

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

ngixnworker_processes  auto;
worker_cpu_affinity 01 10;   #为进程绑定两个cpu
[root@ngnix conf]# systemctl restart nginx.service
[root@ngnix conf]# ps aux | grep ngixn
root       6903  0.0  0.0 112824   988 pts/0    S+   15:38   0:00 grep --color=auto 

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

[root@ngnix usr]# cd /opt/nginx-1.26.1/
[root@ngnix nginx-1.26.1]# ls
auto     CHANGES.ru  configure  html     Makefile  objs    src
CHANGES  conf        contrib    LICENSE  man       README
[root@ngnix nginx-1.26.1]# cd auto/
[root@ngnix auto]# ls
cc          feature       headers  install  module   options  stubs    types
define      have          include  lib      modules  os       summary  unix
endianness  have_headers  init     make     nohave   sources  threads
[root@ngnix auto]# cat options | grep YES
HTTP=YES
HTTP_CACHE=YES
HTTP_CHARSET=YES
HTTP_GZIP=YES
HTTP_SSI=YES
HTTP_ACCESS=YES
[root@ngnix nginx-1.26.1]# cd /usr/local/nginx/conf
[root@ngnix conf]# pwd
/usr/local/nginx/conf
[root@ngnix 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 image/jpg image/png test/html;		#压缩类型,表示哪些网页文档启用压缩功能
[root@ngnix conf]# nginx -t

[root@ngnix conf]# cd /usr/local/nginx/html/
[root@ngnix html]# ll -h
总用量 1.4M
-rw-r--r-- 1 root root  497 5月  30 11:36 50x.html
-rw-r--r-- 1 root root   52 6月   2 14:12 chunren.html
-rw-r--r-- 1 root root  98K 5月  30 15:40 chunren.jpg
-rw-r--r-- 1 root root   54 6月   2 14:14 dingzhen.html
-rw-r--r-- 1 root root 1.3M 6月   2 14:14 dingzhen.jpg
-rw-r--r-- 1 root root  615 5月  30 11:36 index.html
-rw-r--r-- 1 root root  150 5月  30 20:48 test.php
[root@ngnix html]# vim dingzhen.html

实现网页图片的大小压缩

[root@ngnix html]# cd /etc/yum.repos.d/
[root@ngnix yum.repos.d]# ls
local.repo  repo.bak
[root@ngnix yum.repos.d]# mv repo.bak/* ./
mv:是否覆盖"./local.repo"? yes
[root@ngnix yum.repos.d]# mv local.repo repo.bak/
[root@ngnix yum.repos.d]# yum install -y gd-devel
cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_image_filter_module 
make && make install

vim /usr/local/nginx/conf/nginx.conf
http {
   .... 
   gzip on;
   gzip_types text/plain .... image/jpeg image/gif image/png;       #将图片类型文件压缩加入gzip
   ....
	server {
	....
		location ~* \.(jpg|gif|png)$ {
			image_filter resize 200 200;		#按等比例缩小图像的宽或高至指定大小。如果只想设置一个维度,另一维可以指定为:"-"
             expires ld;
		}										#(如果长>宽就以长为标准,宽为比例;如果长<宽就以宽为标准,长为比例)
    }
}


cd /usr/local/nginx/html
先将game.jpg文件传到/usr/local/nginx/html目录下
vim index.html
...... 
<img src="game.jpg"/>				#网页中插入图片
</body>
</html>

systemctl restart nginx

防盗链

盗链主机

[root@localhost yum.repos.d]# cd /usr/local/nginx/html
[root@localhost html]# vim dz.html  #创建盗链html
<h1>this is test web</h1>
<img src="http://www.xy101.com/dingzhen.jpg" />
[root@localhost html]#vim /etc/httpd/conf/httpd.conf 
ServerName www.dz.com:80

此时此刻发现盗链主机成功盗链源网站

在源主机机型设置防盗链

[root@ngnix html]# cd /usr/local/nginx/html

[root@ngnix conf]# vim nginx.conf

 location ~ \.(gif|jpg|jpeg|swf)$ {      这段正则表达式表示匹配不区分大小写,以.jpg 或.gif 或.swf 结尾的文件;
            root html;
            expires 1d;
            valid_referers none blocked xy101.com *.xy101.com; 设置信任的网站
            if ( $invalid_referer ) {
                 rewrite ^/ http://www.xy101.com/error.png;
            }
        }
相关推荐
醉の虾18 分钟前
Vue3 使用v-for 渲染列表数据后更新
前端·javascript·vue.js
张小小大智慧26 分钟前
TypeScript 的发展与基本语法
前端·javascript·typescript
hummhumm36 分钟前
第 22 章 - Go语言 测试与基准测试
java·大数据·开发语言·前端·python·golang·log4j
asleep7011 小时前
第8章利用CSS制作导航菜单
前端·css
hummhumm1 小时前
第 28 章 - Go语言 Web 开发入门
java·开发语言·前端·python·sql·golang·前端框架
旦沐已成舟1 小时前
DevOps-Jenkins-新手入门级
服务器
幼儿园的小霸王1 小时前
通过socket设置版本更新提示
前端·vue.js·webpack·typescript·前端框架·anti-design-vue
疯狂的沙粒1 小时前
对 TypeScript 中高级类型的理解?应该在哪些方面可以更好的使用!
前端·javascript·typescript
gqkmiss2 小时前
Chrome 浏览器 131 版本开发者工具(DevTools)更新内容
前端·chrome·浏览器·chrome devtools
Summer不秃2 小时前
Flutter之使用mqtt进行连接和信息传输的使用案例
前端·flutter