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了

可以在另一台机器测试

相关推荐
qq_312920111 小时前
安装lua-nginx-module实现WAF功能
nginx·junit·lua
Shepherd06191 小时前
【Jenkins实战】Windows安装服务启动失败
运维·jenkins
Biomamba生信基地2 小时前
Linux也有百度云喔~
linux·运维·服务器·百度云
new_abc2 小时前
Ubuntu 22.04 ftp搭建
linux·运维·ubuntu
七月在野,八月在宇,九月在户2 小时前
前端--> nginx-->gateway产生的跨域问题分析
前端·nginx·gateway
鹿鸣天涯3 小时前
‌华为交换机在Spine-Leaf架构中的使用场景
运维·服务器·网络
小白也有IT梦3 小时前
域名绑定服务器小白教程
运维·nginx
有梦想的咕噜3 小时前
Secure Shell(SSH) 是一种网络协议
运维·网络协议·ssh
dntktop3 小时前
免费,WPS Office教育考试专用版
运维
苹果醋33 小时前
C语言 strlen 函数 - C语言零基础入门教程
java·运维·spring boot·mysql·nginx