nginx上web服务的基本安全优化、服务性能优化、访问日志优化、目录资源优化和防盗链配置简介
一.基本安全优化
1.隐藏nginx软件版本信息
2.更改源码来隐藏软件名和版本
(1)修改第一个文件(核心头文件),在nginx安装目录下找到这个文件并修改
(2)第二个文件
(3)第三个文件,内置响应信息页面
(4)第四个文件
(5)重新编译安装并重启
3.更改nginx服务的默认用户和组
(1)在编译安装时指定用户和组
(2) 更改nginx.conf,在nobody处指定
二.修改参数优化服务性能
1.优化nginx的worker进程数,并将进程绑定到不同的cpu上
2.优化nginx事件处理模型、最大连接数和进程最大打开文件数
3.开启高效传输模式和上传文件大小的限制
4.配置nginx的gzip压缩
三.优化访问日志
1.运用shell脚本优化nginx的访问日志
2.舍弃不需要的访问日志
3.日志权限设置
四.站点目录和url路径访问优化
1.根据扩展名限制程序和文件访问
2.禁止访问指定目录下的所有文件和目录
(1)拒绝访问static目录和以static开头路径下的文件
(2)禁止访问某个目录并返回状态码
3.禁止非法域名解析(防用户IP)访问网站
(1)返回501
(2)永久重写301
五.nginxweb服务防盗链
1.文件名防盗链
2.图片目录防盗链
一.基本安全优化
1.隐藏nginx软件版本信息
一般来讲,同一版本号的设备或软件出现漏洞或问题,那么这一批次就几乎都有被攻击的风险1,通过隐藏版本号等敏感信息,在一定成都上可以增强web服务的安全性
隐藏版本使用的是server_tokens off/on;,一般放在http块内
[root@localhost nginx-1.22.0]# curl -I 192.168.2.190
HTTP/1.1 200 OK
Server: nginx/1.22.0
Date: Sun, 13 Aug 2023 06:36:39 GMT
Content-Type: text/html
Content-Length: 4
Last-Modified: Thu, 10 Aug 2023 03:52:52 GMT
Connection: keep-alive
ETag: "64d45f14-4"
Accept-Ranges: bytes
[root@localhost conf]# vim nginx.conf
......
http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server_tokens off;
......
}
[root@localhost conf]# systemctl restart nginx.service
[root@localhost nginx-1.22.0]# curl -I 192.168.2.190
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 13 Aug 2023 06:38:00 GMT
Content-Type: text/html
Content-Length: 4
Last-Modified: Thu, 10 Aug 2023 03:52:52 GMT
Connection: keep-alive
ETag: "64d45f14-4"
Accept-Ranges: bytes
2.更改源码来隐藏软件名和版本
[root@localhost ~]# curl -I 192.168.2.190
HTTP/1.1 200 OK
Server: nginx/1.22.0
Date: Mon, 14 Aug 2023 02:47:15 GMT
Content-Type: text/html
Content-Length: 4
Last-Modified: Thu, 10 Aug 2023 03:52:52 GMT
Connection: keep-alive
ETag: "64d45f14-4"
Accept-Ranges: bytes
(1)修改第一个文件(核心头文件),在nginx安装目录下找到这个文件并修改
[root@localhost core]# pwd
/usr/local/src/nginx-1.22.0/src/core
[root@localhost core]# vim nginx.h
更改NGINX_VERSION,NGINX_VER,NGINX_VAR为要伪造的版本号和服务名

(2)第二个文件
[root@localhost http]# pwd
/usr/local/src/nginx-1.22.0/src/http
[root@localhost http]# vim ngx_http_header_filter_module.c
修改此处

(3)第三个文件,内置响应信息页面
[root@localhost http]# pwd
/usr/local/src/nginx-1.22.0/src/http
[root@localhost http]# vim ngx_http_special_response.c
修改此处

(4)第四个文件
[root@localhost v2]# pwd
/usr/local/src/nginx-1.22.0/src/http/v2
[root@localhost v2]# vim ngx_http_v2_filter_module.c
修改此处

(5)重新编译安装并重启
[root@localhost nginx-1.22.0]# pwd
/usr/local/src/nginx-1.22.0
[root@localhost nginx-1.22.0]# ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'[root@localhost nginx-1.22.0]# make[root@localhost nginx-1.22.0]# make install[root@localhost nginx-1.22.0]# systemctl restart nginx.service[root@localhost ~]# curl -I 192.168.2.190
HTTP/1.1 200 OK
Server: rpcbind/2.3.30
Date: Mon, 14 Aug 2023 02:47:23 GMT
Content-Type: text/html
Content-Length: 4
Last-Modified: Thu, 10 Aug 2023 03:52:52 GMT
Connection: keep-alive
ETag: "64d45f14-4"
Accept-Ranges: bytes
3.更改nginx服务的默认用户和组
(1)在编译安装时指定用户和组
[root@localhost nginx-1.22.0]# pwd
/usr/local/src/nginx-1.22.0
[root@localhost nginx-1.22.0]# ./configure --user=nginx --group=nginx
(2) 更改nginx.conf,在nobody处指定
#user nobody;
worker_processes 1;
二.修改参数优化服务性能
1.优化nginx的worker进程数,并将进程绑定到不同的cpu上
(1)一般在nginx.conf文件中是“worker_processes 1;”,指定了nginx要开启的进程数,可以设置为cpu的核数,在面对高并发流量的场合可以进一步设置为cpu核数*2
(2)nginx的进程多是运行在某个cpu或某个cpu的核内,在优化这一硬件资源不均的情况时可以将不同的nginx进程绑定到对应的cpu配置,可以在任务管理器的性能中查看cpu核数
例如我的是四核就可以这样来绑定
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
#worker_cpu_affinity可以把不同的进程分给不同的cpu处理,上面4个二进制数是掩码,代表的是1-4个核,对应上面4个进程数,这个情况下每个进程会分到一个cpu核处理。
2.优化nginx事件处理模型、最大连接数和进程最大打开文件数
在Linux上使用epoll的I/O多路服用模型,最大连接数要根据具体的服务器性能和程序内存来指定,一般都放在events块内。最大文件打开数可以查询,一般和进程数放一起。
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
worker_rlimit_nofile 65535;
#可以设置为这个“ulimit -HSn”命令得出来的结果
events {use epoll;#事件模块指令,放在events中指定nginx的工作模式,select-标准工作模式,poll-标准工作模式,kqueue-BDS系统高效工作模式,epoll-Linux平台首选高效工作模式,rtsig,/dev/pollworker_connections 1024;#事件模块指令,定义每个进程的最大连接数,默认1024,max_client客户端连接数=worker_processes*worker_connections,max_clients=worker_processes*worker_connections/4,当然这些设置也受文件系统打开数量限制,执行名“ulimit -n 数量”后生效
}
3.开启高效传输模式和上传文件大小的限制
sendfile可以开启文件的高效传输模式,如果将tcp_nopush和tcp_nodelay都设置为on,可以有效防止网络和磁盘的I/O阻塞,提升效率,可以通过client_max_body_size指定最大上传文件大小,一般都放在http块中
http {include mime.types;default_type application/octet-stream;sendfile on;tcp_nopush on;tcp_nodelay on;client_max_body_size 20M;
......
}
4.配置nginx的gzip压缩
http {include mime.types;default_type application/octet-stream;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;gzip on;#开启压缩gzip_min_length 1k;#设置压缩页面的最小字节,建议设置为1K以上,小于1K会压缩变大gzip_buffers 4 16k;#压缩缓冲区大小,上面的表示是需要4个16k的内存作为压缩结果流缓存gzip_http_version 1.1;#压缩版本,用于识别http协议版本,默认1.1gzip_comp_level 2;#压缩比率,指定gzip压缩比,1的压缩比最小处理速度最快,9的压缩比最大传输速度快但处理速度最慢,较为消耗CPU资源gzip_types text/plain application/x-javascript text/css application/xml;#指定压缩类型gzip_vary on;#开启vary header,可以让前端的缓存服务器的缓存经过gzip压缩页面
......
}
三.优化访问日志
1.运用shell脚本优化nginx的访问日志
主要功能是将日志以一定的时间格式保存并重载配置,在测试完脚本运行无误后,可以配合定时任务使得保持访问日志的整洁,并且每天生成一个新的日志文件以进行记录
[root@localhost nginx-1.22.0]# whereis nginx
nginx: /usr/sbin/nginx.old /usr/sbin/nginx /etc/nginx
[root@localhost conf]# vim nginx_access_log_mg.sh
#!/bin/bash
cd /usr/local/src/nginx-1.22.0/logs &&\
/bin/mv access.log access_$(date +%F).log
/usr/sbin/nginx -s reload
[root@localhost conf]# bash nginx_access_log_mg.sh
[root@localhost logs]# ll
total 8
-rw-r--r-- 1 root root 1680 Aug 14 13:32 access_2023-08-14.log
-rw-r--r-- 1 root root 0 Aug 14 13:54 access.log
-rw-r--r-- 1 root root 1108 Aug 14 13:32 error.log
2.舍弃不需要的访问日志
舍弃掉一些图片资源的访问记录,以免消耗大量磁盘资源
server {listen 192.168.2.190;server_name www.aabb.com;location / {root /usr/local/src/nginx-1.22.0/html/ip;index index.html index.htm;}location ~ .*\.(jpg|JPG|jpeg|JPEG|gif|GIF)$ {access_log off;}}
3.日志权限设置
建议递归设置为700
[root@localhost nginx-1.22.0]# chmod -R 700 logs/
[root@localhost nginx-1.22.0]# pwd
/usr/local/src/nginx-1.22.0
四.站点目录和url路径访问优化
1.根据扩展名限制程序和文件访问
禁止访问images开头并php/php5/sh/pl/py结尾,static开头并以php/php5/sh/pl/py结尾,/data/attachment或/data/avatar开头以php/php5结尾的文件类型的内容
server {listen 192.168.2.190;server_name www.aabb.com;location / {root /usr/local/src/nginx-1.22.0/html/ip;index index.html index.htm;}location ~ .*\.(jpg|JPG|jpeg|JPEG|gif|GIF)$ {access_log off;}location ~ ^/images/.*\.(php|php5|sh|pl|py)$ {deny all ;}location ~ ^/static/.*\.(php|php5|sh|pl|py)$ {deny all;}location ~* ^/data/(attachment|avatar)/.*\.(php|php5)$ {deny all;}location ~ .*\.(php|php5)?$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;include fcgi.conf;}
}
2.禁止访问指定目录下的所有文件和目录
(1)拒绝访问static目录和以static开头路径下的文件
location ~ ^/(static)/ {deny all;
}
location ~ ^/static {deny all;
}
(2)禁止访问某个目录并返回状态码
location /xxx/ {return 404;
}
location /xxx/ { return 403;
}
3.禁止非法域名解析(防用户IP)访问网站
(1)返回501
server {listen 80 default_server;server_name _;return 501;
}
(2)永久重写301
server {listen 80 default_server;server_name _;rewrite ^(.*) http://xxx/$1 permanent;
}#恶意域名解析IP
server {if ($host !~ ^www/xxx/.com$){rewrite ^(.*) http//www.xxx.com$l permanent;
}
五.nginxweb服务防盗链
1.文件名防盗链
location ~* \.(gif|jpg|png|swf|flv)$ { valid_referers none blocked xxx.com ; #valid_referers可以设置允许访问资源的引用者列表,none表示不允许任何引用这直接访问,blocked表示拒绝所有引用者,允许xxx.com域名下的引用者访问资源if ($invalid_referer) {rewrite ^/ http://xxx.com/retrun.html;#如果引用者不在允许列表中,请求将会被重写到http://xxx.com/retrun.html,引用者在允许列表中则返回请求的资源,如上配置,xxx.com域名下的引用者可以获取资源#return 404;}
}
2.图片目录防盗链
location /images/ { #匹配/images、开头的请求valid_referers none blocked server_names xxx;#none,blocked含义同文件名防盗链,server_names后加上允许的域名列表if ($invalid_referer) { #如上配置,引用者不在允许域名列表中则403拒绝访问,在列表中则则返回其请求的资源return 403;}
}
相关文章:
nginx上web服务的基本安全优化、服务性能优化、访问日志优化、目录资源优化和防盗链配置简介
一.基本安全优化 1.隐藏nginx软件版本信息 2.更改源码来隐藏软件名和版本 (1)修改第一个文件(核心头文件),在nginx安装目录下找到这个文件并修改 (2)第二个文件 (3)…...
himall3.0商城源码
目录 1 himall3.0商城源码 1.1 /// 获取待评价订单数量 1.2 /// 保存支付订单信息,生成支付订单 1.3 /// 取最近time分钟内的满足打印的订单数据 himall3.0商城源码 /// <summary>...
【LeetCode75】第二十九题 删除链表的中间节点
目录 题目: 示例; 分析: 代码: 题目: 示例; 分析: 给我们一个链表,让我们把链表中间的节点删了。 那么最直观最基础的办法是遍历两边链表,第一遍拿到链表长度,第二次把链表中间节点删了。 这个暴力做法我没事过…...
Floyd(多源汇最短路)
Floyd求最短路 给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,边权可能为负数。 再给定 k 个询问,每个询问包含两个整数 x 和 y,表示查询从点 x 到点 y 的最短距离,如果路径不存在,则输出 impo…...
Pycharm找不到Conda可执行文件路径(Pycharm无法导入Anaconda已有环境)
在使用Pycharm时发现无法导入Anaconda创建好的环境,会出现找不到Conda可执行文件路径的问题。 解决 在输入框内输入D:\anaconda3\Scripts\conda.exe,点击加载环境。 注意前面目录是自己Anaconda的安装位置,之后就可以找到Anaconda的现有环…...
国产之光:讯飞星火最新大模型V2.0
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…...
通讯录实现【C语言】
目录 前言 一、整体逻辑分析 二、实现步骤 1、创建菜单和多次操作问题 2、创建通讯录 3、初始化通讯录 4、添加联系人 5、显示联系人 6、删除指定联系人 7、查找指定联系人 8、修改联系人信息 9、排序联系人信息 三、全部源码 前言 我们上期已经详细的介绍了自定…...
pcl欧式聚类
欧式聚类实现方法大致是: 1、找到空间中某点 p 1 p_1 p1,用KD-Tree找到离他最近的n个点,判断这n个点到 p 1 p_1 p1的距离。将距离小于阈值r的点 p 2 、 p 3 、 p 4 p_2、p_3、p_4 p2、p3、p4…放在类Q里 2、在 Q ( p 1 ) Q(p_1…...
macOS Ventura 13.5.1(22G90)发布(附黑/白苹果系统镜像地址)
系统镜像下载:百度:黑果魏叔 系统介绍 黑果魏叔 8 月 18 日消息,苹果今日向 Mac 电脑用户推送了 macOS 13.5.1 更新(内部版本号:22G90),本次更新距离上次发布隔了 24 天。 本次更新重点修复了…...
分布式监控平台——Zabbix
市场上常用的监控软件: 传统运维:zabbix、 Nagios 一、zabbix概述 作为一个运维,需要会使用监控系统查看服务器状态以及网站流量指标,利用监控系统的数据去了解上线发布的结果,和网站的健康状态。 利用一个优秀的监…...
【OpenGauss源码学习 —— 列存储(创建表)】
列存储 什么是列存储?语法实现语法格式参数说明示例源码分析(创建表)语法层(Gram.y)子模块(utility.cpp) 总结 声明:本文的部分内容参考了他人的文章。在编写过程中,我们…...
Jenkins 监控dist.zip文件内容发生变化 触发自动部署
为Jenkins添加plugin http://xx:xx/manage 创建一个任务 构建触发器 每3分钟扫描一次,发现指定文件build.zip文件的MD5发生变化后 触发任务...
Linux系列讲解 —— FTP协议的应用
简单介绍一下FTP文件传输协议在linux系统中的应用。 目录 0. 基本概念1. FTP Server1.1 安装FTP Server1.2 FTP Server开启和关闭1.3 查看FTP Server是否开启1.4 FTP服务器配置 2. FTP Client2.1 lftp2.2 ftp2.3 sftp2.4 文件资源管理器集成的ftp和sftp 3. ftp常用命令 0. 基本…...
Rancher-RKE-install 部署k8s集群
一、为什么用Rancher-RKE-install 1.CNCF认证的k8s安装程序。 2.有中文文档。 二、安装步骤 1.下载Rancher-Rke的二进制包-下面是项目的地址 GitHub - rancher/rke: Rancher Kubernetes Engine (RKE), an extremely simple, lightning fast Kubernetes distrib…...
PHP8的正则表达式-PHP8知识详解
在网页程序的时候,经常会有查找符合某些复杂规则的字符串的需求。正则表达式就是描述这些规则的工具。 正则表达式是把文本或者字符串按照一定的规范或模型表示的方法,经常用于文本的匹配操作。 例如:我们在填写手机号码的时候,…...
SpringCloud实用篇7——深入elasticsearch
目录 1 数据聚合1.1 聚合的种类1.2 DSL实现聚合1.2.1 Bucket聚合语法1.2.2 聚合结果排序1.2.3 限定聚合范围1.2.4 Metric聚合语法1.2.5.小结 1.3 RestAPI实现聚合1.3.1 API语法1.3.2 业务需求1.3.3 业务实现 2 自动补全2.1 拼音分词器2.2 自定义分词器2.3 自动补全查询2.4 实现…...
uni-app 经验分享,从入门到离职(二)—— tabBar 底部导航栏实战篇
文章目录 📋前言⏬关于专栏 🎯关于小程序 tabbar 的一些知识🎯创建一个基本的 tabBar📝最后 📋前言 这篇文章的内容主题是关于小程序的 tabBar 底部导航栏的入门使用和实战技巧。通过上一篇文章的基础,我们…...
Java虚拟机(JVM):内存区域
一、内存区域介绍 Java虚拟机(JVM)内存可以分为以下几个区域: 程序计数器(Program Counter Register):用于记录当前线程执行的字节码指令的地址,属于线程私有的区域。在任意时刻,一…...
11 - git stash 开发中临时加塞了紧急任务怎么处理
查看所有文章链接:(更新中)GIT常用场景- 目录 文章目录 开发中临时加塞了紧急任务怎么处理 开发中临时加塞了紧急任务怎么处理 当你此时工作区已经修改了 Readme 文件,然后突然需要解决其他问题(紧急问题、新任务&…...
高效的WMS系统手持盘点方案
WMS系统手持盘点就是指利用WMS系统支持的手持式电子盘点设备进行库存盘点的方式。 具体来说: - 手持盘点设备是一种小型的电子设备,具有移动条形码扫描功能,可以实时与WMS系统联通。 - WMS系统利用手持设备,可以给仓储人员下发具体的盘点任务,例如需要盘点的货位、商品等信息…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
