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为要伪造的版本号和服务名

0523b5db55334ca6925e3ce0f1fc547d.png

(2)第二个文件

[root@localhost http]# pwd
/usr/local/src/nginx-1.22.0/src/http
[root@localhost http]# vim ngx_http_header_filter_module.c

修改此处

7c3bf502002b476187a3fbea81540c06.png

(3)第三个文件,内置响应信息页面

[root@localhost http]# pwd
/usr/local/src/nginx-1.22.0/src/http
[root@localhost http]# vim ngx_http_special_response.c

 

 修改此处

609de875760e41b5bda76cfeab9cae95.png

(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 

修改此处 

5298c7bed4f042379b2058722815a0d2.png

(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;}
}

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/96031.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Selenium 自动化 | 案例实战篇

Chrome DevTools 简介 Chrome DevTools 是一组直接内置在基于 Chromium 的浏览器(如 Chrome、Opera 和 Microsoft Edge)中的工具,用于帮助开发人员调试和研究网站。 借助 Chrome DevTools,开发人员可以更深入地访问网站&#xf…

C++11并发与多线程笔记(9) async、future、packaged_task、promise

C11并发与多线程笔记(9) async、future、packaged_task、promise 1、std::async、std::future创建后台任务并返回值2、std::packaged_task:打包任务,把任务包装起来3、std::promise3、小结 1、std::async、std::future创建后台任务…

Amazon CloudFront 部署小指南(六)- Lambda@Edge 基础与诊断

内容简介 本文适用于希望使用 Amazon CloudFront LambdaEdge 提升 Amazon CloudFront 边缘计算能力的用户,旨在帮助您更好的进行 CloudFront LambdaEdge 的开发、调试、测试、部署等工作。 首先我们会对 CloudFront LambdaEdge 做个简单的介绍,然后分七个…

219、仿真-基于51单片机L298直流电机开始停止正反转加减速Proteus仿真设计(程序+Proteus仿真+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、程序源码 资料包括: 需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方案一&a…

JMeter 特殊组件-逻辑控制器与BeanShell PreProcessor 使用示例

文章目录 前言JMeter 特殊组件-逻辑控制器与BeanShell PreProcessor 使用示例1. 逻辑控制器使用1.1. While Controller 使用示例1.2. 如果(If)控制器 使用示例 2. BeanShell PreProcessor 使用示例 前言 如果您觉得有用的话,记得给博主点个赞…

售后工单管理系统是什么?售后服务管理系统对企业有什么作用?

售后服务管理系统可以提高客户满意度、提升售后服务效率、实现客户关系管理、支持知识库和员工培训、以及数据分析和改进等多种作用,从而帮助企业提高售后服务质量和效率,增强客户忠诚度,提高整体运营效率。 1、集成化信息平台   系统可以实…

【C++】开源:跨平台Excel处理库-libxlsxwriter配置使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Excel处理库-libxlsxwriter配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&…

[管理与领导-27]:IT基层管理者 - 团队管理 - 育人 - 如何评估团队的能力?如何培养团队?

目录 一. 培养团队(练兵)为什么很重要 二. 如何评估团队的能力模型 三、培养人才 一. 培养团队(练兵)为什么很重要 培养团队是组织中的一项重要任务,以下是一些说明为什么培养团队是如此重要的原因: 养…

一文了解汽车芯片的分类及用途介绍

汽车芯片按其功能可分为控制类(MCU和AI芯片)、功率类、传感器和其他(如存储器)四种类型。市场基本被国际巨头所垄断。人们常说的汽车芯片是指汽车里的计算芯片,按集成规模可分为MCU芯片和AI芯片(SoC芯片&am…

实验篇——多序列比对,构树

实验篇——多序列比对,构树 文章目录 前言一、名词解释二、实操1. 文件准备2. 多序列比对3. 对比对序列修剪4. 构建进化树5. 可视化进化树 总结 前言 系统发育树构建的软件大致有如下几种策略:从最简单的UPGMA法,到邻接法,最大简…

python+django+mysql项目实践五(信息搜索)

python项目实践 环境说明: Pycharm 开发环境 Django 前端 MySQL 数据库 Navicat 数据库管理 信息搜素 输入内容进行搜索,内容有文本类和时间类 文本类需要模糊搜索,包含即检索 时间类需要选取时间范围内的内容 views 利用Q完成对指定内容的检索 检索后按检索内容更新…

【傅里叶级数与傅里叶变换】数学推导——3、[Part4:傅里叶级数的复数形式] + [Part5:从傅里叶级数推导傅里叶变换] + 总结

文章内容来自DR_CAN关于傅里叶变换的视频,本篇文章提供了一些基础知识点,比如三角函数常用的导数、三角函数换算公式等。 文章全部链接: 基础知识点 Part1:三角函数系的正交性 Part2:T2π的周期函数的傅里叶级数展开 P…

公告:微信小程序备案期限官方要求

备案期限要求 1、若微信小程序未上架,自2023年9月1日起,微信小程序须完成备案后才可上架,备案时间1-20日不等; 2、若微信小程序已上架,请于2024年3月31日前完成备案,逾期未完成备案,平台将按照…

Typora 相对路径保存图片以及 Gitee 无法显示图片

目录 Typora 相对路径保存图片 Gitee 无法显示图片 Typora 相对路径保存图片 Step1:修改 Typora 的偏好设置 自动在当前目录创建名为 "./${filename}.assets" 的文件夹粘贴图片到 md 中时,图片会自动另存到 "./${filename}.assets&qu…

链游再进化 Web3版CSGO来袭

过去几年,游戏开发者们一直希望借Web3这个价值流通网络,改造传统游戏的经济系统,将虚拟资产的掌管权交给用户,让资产自由地在市场流通。 Web3游戏发展史上,涌现过CryptoKitties、Axie Infinity两大爆款,但…

判断链表中是否有环

如下图,如何判断链表中存在环路呢? 一种简单的方法描述: 设置两个链表指针p1和p2并指向链表,设置两个记录指针移动次数的变量c1和c2。在循环中,p1每次移动2个位置,c1加2;p1每次移动一个位置&am…

百望云联合华为发布票财税链一体化数智解决方案 赋能企业数字化升级

随着数据跃升为数字经济关键生产要素,数据安全成为整个数字化建设的重中之重。为更好地帮助企业发展,中央及全国和地方政府相继出台了多部与数据相关的政策法规,鼓励各领域服务商提供具有自主创新的软件产品与服务,帮助企业在合规…

【uniapp】picker mode=“region“ 最简单的省市区 三级联动

省市区 picker template <picker mode"region" :value"date" class"u-w-440" change"bindTimeChange"><u--inputborder"bottom"class"u-fb u-f-s-28"placeholder"请选择省市区"type"te…

PHP海外代购管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 海外代购管理系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/88229435 论文 https://…

gitlab修改远程仓库地址

目录 背景&#xff1a; 解决&#xff1a; 1.删除本地仓库关联的远程地址&#xff0c;添加新的远程仓库地址 2.直接修改本地仓库关联的远程仓库地址 3.打开.git隐藏文件修改远程仓库地址 4.拉取代码报错(git host key verification failed) 背景&#xff1a; 公司搬家&#…