Nginx服务优化与防盗链

一、隐藏版本号

在网页中我们通过F12+F5可以查看到版本号,或者使用Fiddler工具抓取数据包,查看Nginx版本,也可以在CentOS中使用命令curl -I http://192.168.10.23显示响应报文首部信息
这十分的不好,容易被针对攻击。

1.1、方法一:修改配置文件方式

vim /usr/local/nginx/conf/nginx.conf
在下http添加
server_tokens off;
systemctl restart nginx.service
curl -I 192.168.88.79

1.2、方法二:

vim /opt/nginx-1.18.0/src/core/nginx.h


cd /opt/nginx-1.18.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make
cd objs/
cp nginx /usr/local/nginx/sbin/

systemctl restart nginx.service

curl -I 192.168.88.79

二、修改用户与组

vim/usr/local/nginx/conf/nginx.conf
user nginx nginx;

取消注释,修改用户为 nginx, 组为nginx
ps aux|grep nginx
主进程由 root 创建,子进程由 nginx 创建

三、缓存时间

当 Nginx 将网页数据返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度
一般针对静态网页设置,对动态网页不设置缓存时间

cd /usr/local/nginx/html/

放入一张图片名为game.jpg

vim /usr/local/nginx/conf/nginx.conf

最后http://192.168.88.79/game.jpg
game.jpg ( 685×421)
http://192.168.88.79/game.jp

四、日志切割

bash 复制代码
#!/bin/bash
#Filename:fenge.sh
#前一天的时间
day=$(date-d"-1day""+%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}/kgc.com-access.log-$day

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

#30天之前的日志文件
find$logs_path-mtime+30-execrm-rf{}\;

chmod+x/opt/fenge.sh
/opt/fenge.sh
ls/var/log/nginx
ls/usr/local/nginx/logs/access.log
计划任务
crontab-e
0 1* * */opt/fenge.sh

五、连接超时

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

**keepalive_timeout**指令设置了客户端与服务器之间保持连接的超时时间。

  • 第一个值(65秒)是告诉Nginx,在客户端与服务器之间没有任何数据传输的情况下,连接将在65秒后自动关闭。这是为了节省服务器资源,避免保持太多空闲连接。
  • 第二个值(180秒)是告诉Nginx,如果使用了HTTP Keep-Alive头部,那么连接的最大空闲时间可以延长至180秒。这适用于支持HTTP持久连接的客户端,它们可以在一次TCP连接中发送多个HTTP请求,从而减少建立新连接的开销。

client_header_timeout

client_header_timeout 指令设置了客户端发送请求头给服务器的超时时间。client_header_timeout 80; 表示如果Nginx在80秒内没有收到客户端请求头的完整部分,那么它将会关闭这个连接。这个设置有助于防止客户端因为网络问题或其他原因而无限期地占用服务器资源。

client_body_timeout 指令设置了客户端发送请求体(如POST请求的表单数据)给服务器的超时时间。

client_body_timeout 80; 表示如果Nginx在80秒内没有收到客户端请求体的完整部分,那么它将会关闭这个连接。这个设置同样有助于防止因为客户端问题而导致的服务器资源浪费。

bash 复制代码
    keepalive_timeout  65 180;
    client_header_timeout 80;
    client_body_timeout 80;

六、更改进程数

在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞

cat /proc/cpuinfo |grep -c "physical id"

  • -c:这个选项告诉grep命令只输出匹配行的数量,而不是匹配行的内容。

查看nginx主进程中包含几个子进程

ps aux|grep nginx

一个work

systemctl restart nginx

七、配置网页压缩

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

bash 复制代码
        gzip  on;
        gzip_min_length 1k;
        gzip_buffers 4 64k;
        gzip_http_version 1.1;
        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;

在文件页面配置
<imgsrc="game.jpg"/>

systemctl restart nginx

打开

八、配置防盗链

vim /usr/local/nginx/conf/nginx.conf

bash 复制代码
   location ~* \.(jpg|git|swf)$ {
        valid_referers none blocked *.yc.com yc.com;
        if ( $invalid_referer  ) {
        #return 403;
        rewrite ^/ http://www.yc.com/error.png;
        }
        }

注意png上面就不能png了

可以在另一台机器测试

相关推荐
Avan_菜菜10 小时前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB1 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode3 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220703 天前
如何搭建本地yum源(上)
运维
ping某5 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树886 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠6 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质6 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工7 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智7 天前
ARP代理--工作原理
运维·网络·arp·arp代理