Nginx的页面优化,安全优化,日志分割,配置防盗链,图片缓存,解决部分问题

一、隐藏版本号

他人可以使用调试代理工具(fiddler工具)、浏览器插件等,通过识别网站的响应头信息来获取你的 Nginx
版本号。为了增强服务器的安全和隐私,可以进行隐藏版本号 ,也可以在 nginx.h 文件中修改服务名称和版本号 ,从而误导别人。

1.1、方法一:隐藏版本号

在nginx.conf配置文件里的 http 块中加上 server_tokens off;

server_tokens off; 指的是禁用服务器响应头中的版本信息

vim /usr/local/nginx/conf/nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens off;								#添加,关闭版本号
    ......
}

1.2、方法二: 修改源码文件,重新编译安装

修改源码包中的 src/core/nginx.h 文件(改版本和服务名称,如下图),重新编译安装,nginx.conf文件中将 server_tokens
off;改为 server_tokens on; 否则不会显示你的误导信息(off 相当于隐藏版本号),没有 server_tokens off;
就不用管。

vim /opt/nginx-1.24.0/src/core/nginx.h
#define NGINX_VERSION "aa" 					#修改版本号
#define NGINX_VER "2233" NGINX_VERSION 			#修改服务器类型

cd /opt/nginx-1.24.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make install

vim /usr/local/nginx/conf/nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens on;
	......
}

systemctl restart nginx

[root@12 nginx-1.24.0]# nginx -v
nginx version: 2233aa

用 curl -I http://172.16.80.12 命令查看一下

二、Nginx的日志分割

Nginx与apache的不同之处,就是Nginx本身没有设计日志分割工具,所以需要运维人员进行脚本编写来实现日志分割

//编写脚本
vim nginxlog.sh

#!/bin/bash

# 获取日期
d=$(date +%Y-%m-%d)

# 定义存储目录
dir="/usr/local/nginx/logs"

# 定义需要分割的源日志
logs_file='/usr/local/nginx/logs/access.log'
logs_error='/usr/local/nginx/logs/error.log'

# 定义nginx的pid文件
pid_file='/usr/local/nginx/run/nginx.pid'

if [ ! -d "$dir" ]
then
	mkdir $dir
fi

# 移动日志并重命名文件
mv ${logs_file} ${dir}/access_${d}.log
mv ${logs_error} ${dir}/error_${d}.log

# 发送kill -USR1信号给Nginx的主进程号,让Nginx重新生成一个新的日志文件
kill -USR1 $(cat ${pid_file})

#日志文件清理,将30天前的日志进行清除
find $logs_path -mtime +30 -exec rm -rf {} \;

三、Nginx的网页压缩

在 Nginx 的 ngx_http_gzip_module
压缩模块提供对文件内容压缩的功能。进行相关的配置修改,就能实现Nginx页面的压缩,达到节约带宽,减小传输数据量,提升用户访问速度。

修改之前备份一个 nginx.conf 配置文件

[root@12 ~]# cd /usr/local/nginx/conf
[root@12 conf]# cp nginx.conf nginx.conf.bak.2024.2.28

修改nginx.conf文件,在http块中配置

[root@12 conf]# vim nginx.conf

http {
    ......

    gzip on;                       #取消注释,开启gzip的压缩功能
    gzip_min_length 1k;        #最小压缩文件的大小      
    gzip_buffers 4 64k;        #压缩缓冲区,大小为4个64K缓冲区,Nginx 会使用 4 个 64KB 大小的缓冲区来存储压缩后的数据。
    gzip_http_version 1.1;     #压缩版本,默认为1.1
    gzip_comp_level 6;         #压缩比率(压缩等级为1-9,6是中等等级,也是常用等级)Gzip 压缩级别的范围是 1 到 9,
	其中 1 表示压缩速度最快,但压缩比最低,9 表示压缩速度最慢,但压缩比最高。默认值为 1。
    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;
                                #gzip_types压缩的类型,哪些文档启用压缩功能。用空格隔开
								
    ......
}

四、配置Nginx的图片缓存

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

一般针对静态网页设置,对动态网页不设置缓存时间。

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

http {
    ......
    location ~* \.(gif|jpg|jepg|bmp|ico)$ {
             root html;
             expires 1d;    #设置缓存时间为一天;         
         }
}

要在电脑上访问,必须要在本机做hosts配置,映射

五、连接超时

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

vim /usr/local/nginx/conf/nginx.conf
http {
    ...... 
    keepalive_timeout 65 180;  #指定TCP链接最多可以保持65秒
    client_header_timeout 80;  #请求头
    client_body_timeout 80;    #请求体
    ...... 
}

解释:

1、keepalive_timeout

指定KeepAlive的超时时间(timeout)。指定每个TCP连接最多可以保持多长时间,服务器将会在这个时间后关闭连接。

Nginx的默认值是65秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为0,就禁止了keepalive 连接。

第二个参数(可选的)指定了在响应头Keep-Alive:timeout=time中的time值。
这个头能够让一些浏览器主动关闭连接,这样服务器就不必去关闭连接了。
没有这个参数,Nginx 不会发送 Keep-Alive 响应头。

2、client_header_timeout

客户端向服务端发送一个完整的 request header 的超时时间。
如果客户端在指定时间内没有发送一个完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)。

3、client_body_timeout

指定客户端与服务端建立连接后发送 request body 的超时时间。
如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408(Request Timed Out)。

六、Nginx的保持连接和会话保持

连接保持是指保持 TCP 连接的打开状态,以便复用连接发送多个 HTTP
请求;而会话保持是为了确保用户的请求在负载均衡集群中能够被分发到同一台服务器上,以维持用户的会话状态。

连接保持(Connection Keep-Alive):

连接保持是指在 HTTP 协议中,客户端与服务器之间的 TCP 连接在完成一次请求-
响应后保持打开状态一段时间,以便在此时间段内可以复用这个连接发送其他请求。这样做可以减少连接建立的开销,提高网络传输效率。Nginx
支持连接保持功能,并允许在配置中设置连接超时时间。

会话保持(Session Persistence):

会话保持是指在负载均衡环境中,确保同一个客户端的多次请求能够被分发到同一台后端服务器上,以保持客户端和服务器之间的会话状态不变。这对于某些需要维护会话状态的应用程序是很重要的,比如在线购物网站,用户在添加商品到购物车后应该继续和同一台服务器保持会话以确保购物车的一致性。Nginx
可以通过配置特定的会话保持策略,如基于客户端 IP 地址的会话保持或基于 Cookie 的会话保持等来实现会话保持功能。

Nginx的连接保持:

在 Nginx 配置中,连接保持通常由 keepalive_timeout
指令来控制。这个指令定义了服务器与客户端之间空闲连接的超时时间。可以设置为一个较小的值以释放不活跃的连接,也可以设置为较大的值以保持连接活跃状态。

keepalive_timeout 65;

Nginx的会话保持:

在负载均衡环境中,会话保持通常由 ip_hash 。ip_hash 指令基于客户端 IP 地址进行会话保持,确保相同 IP
的请求被分发到同一台后端服务器。sticky 指令可以配置基于 Cookie 或其他自定义方式实现会话保持。

七、Nginx并发设置

在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞。查看cpu的核心数,根据核心数来设置工作进程数。

//查看cpu核数
cat /proc/cpuinfo |grep processor|wc -l

cat /proc/cpuinfo |grep -c processor

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

worker_processes最多开启8个,8个以上性能就不会再提升了,而且稳定性会变的更低,因此8个进程够用了。

vim /usr/local/nginx/conf/nginx.conf
worker_processes  4;				#修改为核数相同或者2倍
worker_cpu_affinity 0001 0010 0100 1000;	
#worker_cpu_affinity 是一个用于设置 worker 进程绑定到指定 CPU 的指令。

将 Nginx worker 进程绑定到特定的 CPU 核心,以提高性能和避免 CPU Cache 的伪共享。

通过将 worker 进程绑定到特定的 CPU 核心,可以减少 CPU 切换(context switching)的开销,
并确保 worker 进程在一个独立的 CPU 核心上运行,避免了不同进程间的 CPU Cache 竞争,从而提高了整体性能

八、TIME_WAIT 状态

TIME_WAIT 是 TCP 连接状态中的一种状态,它出现在一个 TCP 连接被主动关闭后。在 TCP 的四次挥手过程中,当连接的一方发送了 FIN
报文(用于关闭连接)并接收到对方的 ACK 报文(确认收到 FIN 报文),就会进入 TIME_WAIT 状态。

在 TIME_WAIT 状态下,TCP
连接处于等待状态,等待一个持续时间,确保网络中所有的数据包都被接收方完全处理完毕。这个等待时间通常是两倍的最大报文段生存时间(Maximum Segment
Lifetime,MSL)。

TIME_WAIT 状态的持续时间有两个主要目的:

1、确保可靠关闭连接:在 TCP 的四次挥手过程中,发送 FIN 报文后,对方可能还有数据未处理完毕。TIME_WAIT
状态的持续时间确保在连接关闭后,旧的数据包在网络中被正确处理,防止它们干扰新的连接。

2、避免出现连接复用问题:如果 TIME_WAIT 状态的持续时间较短,可能会导致旧的连接仍然存在于网络中,并被误认为是新的连接,
从而导致连接复用问题。

TIME_WAIT 状态通常是正常的 TCP 连接关闭过程中的一部分,它在连接正常关闭后经历一段时间后自动消失。在连接的生命周期内,TIME_WAIT
状态占用的资源非常小,并且对服务器性能影响有限。

然而,当服务器上同时有大量的短连接频繁创建和销毁,或者处理大量并发连接时,TIME_WAIT 连接可能会积累,导致服务器上出现大量 TIME_WAIT
状态的连接。在这种情况下,可能需要优化服务器的连接管理方式或调整 TCP 参数来处理 TIME_WAIT 连接。

//查看所有tcp的连接状态
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

CLOSED(关闭):表示该连接处于未活动状态,或者连接已经关闭。

LISTEN(监听):表示服务器正在等待来自客户端的连接请求,处于监听状态。

SYN_RECV(SYN 接收):表示服务器已经接收到来自客户端的 SYN 请求(连接请求),正在等待确认。

SYN_SENT(SYN 发送):表示应用程序已经向服务器发送了 SYN 请求,正在等待服务器确认。

ESTABLISHED(已建立):表示连接已经建立,正常的数据传输阶段。

FIN_WAIT1(终止等待1):表示应用程序已经发送了连接关闭请求(FIN),正在等待另一端的确认。

FIN_WAIT2(终止等待2):表示另一端已经确认连接关闭请求,正在等待另一端发送连接关闭请求。

CLOSE_WAIT(关闭等待):表示另一端已经关闭连接,但本地应用程序还未关闭连接。

CLOSING(正在关闭):表示双方同时尝试关闭连接。

TIME_WAIT(时间等待):表示连接已经关闭,但仍在等待一段时间(2倍的最大报文段生存时间,MSL),
以确保网络中所有的数据包都已经被正确处理。

LAST_ACK(最后确认):表示应用程序已经发送了最后的确认,等待另一端的确认后进入 CLOSED 状态。

vim /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1 
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 60

net.ipv4.tcp_syncookies = 1
#表示开启SYN Cookies。
当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN×××,默认为0,表示关闭

net.ipv4.tcp_tw_reuse=1
#让TIME_WAIT状态可以重用,这样即使TIME_WAIT占满了所有端口,也不会拒绝新的请求造成障碍 默认是0

net.ipv4.tcp_tw_recycle=1
#让TIME_WAIT尽快回收 默认0

net.ipv4.tcp_fin_timeout=65
#表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。

九、配置防盗链

vim /usr/local/nginx/conf/nginx.conf
http {
......
    server{
    ...........
    location ~* \.(jpg|gif|swf)$ {            
         root  html;
         expires 1d;
         valid_referers none blocked *.hzxx.com hzxx.com;   
         if ( $invalid_referer ) {
           rewrite ^/ http://www.hzxx.com/error.png;
           }
        }
    ......
    }
......
}

~* \.(jpg|gif|swf)$ :这段正则表达式表示匹配不区分大小写,以.jpg 或.gif 或.swf 结尾的文件;
valid_referers :设置信任的网站,可以正常使用图片;

none:允许没有http_refer的请求访问资源(根据Referer的定义,它的作用是指示一个请求是从哪里链接过来的,
如果直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含 Referer 字段的),如
http://www.hzxx.com/game.jpg
我们使用 http://www.hzxx.com 访问显示的图片,可以理解成 http://www.hzxx.com/game.jpg 这个请求是从
http://www.hzxx.com
这个链接过来的。

blocked:允许不是http://开头的,不带协议的请求访问资源;
*.hzxx.com:只允许来自指定域名的请求访问资源,如 http://www.hzxx.com

if语句:如果链接的来源域名不在valid_referers所列出的列表中,$invalid_referer为true,则执行后面的操作,
即进行重写或返回 403 页面。

十、fpm参数优化

Nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整。

根据服务器的内存与服务负载,调整FPM模块参数。

vim /usr/local/php/etc/php-fpm.conf 
pid = run/php-fpm.pid

vim /usr/local/php/etc/php-fpm.d/www.conf
 --96行--
pm = dynamic                #fpm进程启动方式,动态的
 --107行--
pm.max_children=20          #fpm进程启动的最大进程数
 --112行--
pm.start_servers = 5        #动态方式下启动时默认开启的进程数,在最小和最大之间
 --117行--
pm.min_spare_servers = 2    #动态方式下最小空闲进程数
 --122行--
pm.max_spare_servers = 8    #动态方式下最大空闲进程数

kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`         #重启php-fpm

netstat -anpt | grep 9000

题外话

初入计算机行业的人或者大学计算机相关专业毕业生,很多因缺少实战经验,就业处处碰壁。下面我们来看两组数据:

2023届全国高校毕业生预计达到1158万人,就业形势严峻;

国家网络安全宣传周公布的数据显示,到2027年我国网络安全人员缺口将达327万。

一方面是每年应届毕业生就业形势严峻,一方面是网络安全人才百万缺口。

6月9日,麦可思研究2023年版就业蓝皮书(包括《2023年中国本科生就业报告》《2023年中国高职生就业报告》)正式发布。

2022届大学毕业生月收入较高的前10个专业

本科计算机类、高职自动化类专业月收入较高。2022届本科计算机类、高职自动化类专业月收入分别为6863元、5339元。其中,本科计算机类专业起薪与2021届基本持平,高职自动化类月收入增长明显,2022届反超铁道运输类专业(5295元)排在第一位。

具体看专业,2022届本科月收入较高的专业是信息安全(7579元)。对比2018届,电子科学与技术、自动化等与人工智能相关的本科专业表现不俗,较五年前起薪涨幅均达到了19%。数据科学与大数据技术虽是近年新增专业但表现亮眼,已跻身2022届本科毕业生毕业半年后月收入较高专业前三。五年前唯一进入本科高薪榜前10的人文社科类专业——法语已退出前10之列。

“没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。

网络安全行业特点

1、就业薪资非常高,涨薪快 2022年猎聘网发布网络安全行业就业薪资行业最高人均33.77万!

img

2、人才缺口大,就业机会多

2019年9月18日《中华人民共和国中央人民政府》官方网站发表:我国网络空间安全人才 需求140万人,而全国各大学校每年培养的人员不到1.5W人。猎聘网《2021年上半年网络安全报告》预测2027年网安人才需求300W,现在从事网络安全行业的从业人员只有10W人。
img

行业发展空间大,岗位非常多

网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…

职业增值潜力大

网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。

随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。

从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。

黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

行业发展空间大,岗位非常多

网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…

职业增值潜力大

网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。

随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。

从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。

黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

img

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值