首页 > 数据库 > 数据库开发技术 > Nginx优化+防盗链,网站安全升级秘籍!
在互联网快速发展的今天,网络攻击事件层出不穷,其中恶意盗取网站资源的行为尤为严重。为了有效防止未经授权的资源访问,保护企业资产和用户数据的安全,我们需要采取有效的防护措施。 本文将重点介绍如何通过优化Nginx以及设置防盗链策略来提升网站的安全性和运行效率。

除了精彩的内容,我还为大家精心准备了一份粉丝福利,记得查看文章末尾哦!
Nginx是俄罗斯人编写的十分轻量级的HTTP 服务器,Nginx,它的发音为“engine X”,是一个高性能的 HTTP 和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器.
Nginx 是由 俄罗斯人 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发. Nginx 以事件驱动(epoll)的方式编写,所以有非常好的性能,同时也是一个非常高效的反 向代理、负载平衡。
但是 Nginx 并不支持 cgi 方式运行,原因是可以减少因此带来的一些程 序上的漏洞。所以必须使用 FastCGI 方式来执行 PHP 程序。
由于 Nginx 本身的一些优点,轻量,开源,易用,越来越多的公司使用 nginx 作为自己公司 的 web 应用服务器,本文详细介绍 nginx 源码安装的同时并对 nginx 进行优化配置。

在这里我们还可以看到在查看的时候,work 进程是 nginx 程序用户,但是 master 进程还是 root,其中,master 是监控进程,也叫主进程,work 是工作进程,部分还有 cache 相关进程, 关系如图:

可以直接理解为 master 是管理员,work 进程才是为用户提供服务的!
一般我们设置 CPU 的核心或者核心数 x2
如果不了解 cpu 的核数,可以 top 命令之后按 1 也可以看出来,也可以查看/proc/cpuinfo 文 件

修改配置文件# vim /usr/local/nginx/conf/nginx.conf
worker_processes 4;

[root@www ~]# /usr/local/nginx1.10/sbin/nginx -s reload[root@www ~]# ps -aux | grep nginx | grep -v grep

Nginx 运行 CPU 亲和力
在 Nginx 中,你可以使用 CPU 亲和力(也称为 CPU 绑定或 CPU 亲和性)来将 Nginx 的工作进程绑定到特定的 CPU 核心上。这可以帮助提高性能,特别是在多核服务器上,因为它可以减少 CPU 缓存失效和提高 CPU 缓存的利用率。
比如 4 核配置 worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000
比如 8 核配置 worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
worker_processes 最多开启 8 个,8 个以上性能提升不会再提升了,而且稳定性变得更低, 所以 8 个进程够用了。
Nginx 最多可以打开文件数
worker_rlimit_nofile 65535;
这个指令是指当一个 nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文件数 (ulimit -n)与 nginx 进程数相除,但是 nginx 分配请求并不是那么均匀,所以最好与 ulimit -n 的值保持一致。
注: 文件资源限制的配置可以在/etc/security/limits.conf 设置,针对 root/user 等各个用户或者* 代表所有用户来设置。
* soft nofile 65535* hard nofile 65535
用户重新登录生效(ulimit -n)
events {use epoll;worker_connections 65535;multi_accept on;}
nginx 采用 epoll 事件模型,处理效率高 work_connections 是单个 worker 进程允许客户端最大连接数,这个数值一般根据服务器性 能和内存来制定,实际最大值就是 worker 进程数乘以 work_connections 实际我们填入一个 65535,足够了,这些都算并发值,一个网站的并发达到这么大的数量,也算一个大站了! multi_accept 告诉 nginx 收到一个新连接通知后接受尽可能多的连接.
主要目的是保护服务器资源,CPU,内存,控制连接数,因为建立连接也是需要消耗资源的。
keepalive_timeout 60;tcp_nodelay on;client_header_buffer_size 4k;open_file_cache max=102400 inactive=20s;open_file_cache_valid 30s;open_file_cache_min_uses 1;client_header_timeout 15;client_body_timeout 15;reset_timedout_connection on;send_timeout 15;server_tokens off;client_max_body_size 10m;
keepalived_timeout 客户端连接保持会话超时时间,超过这个时间,服务器断开这个链接tcp_nodelay;也是防止网络阻塞,不过要包涵在 keepalived 参数才有效client_header_buffer_size 4k;客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过 1k,不过由于一般系统分页都要大于 1k,所以这里设置为分页大小。分页大小可以用命令 getconf PAGESIZE 取得。open_file_cache max=102400 inactive=20s;这个将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。open_file_cache_valid 30s;这个是指多长时间检查一次缓存的有效信息。open_file_cache_min_uses 1;open_file_cache 指令中的 inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在 inactive 时间内一次没被使用,它将被移除。client_header_timeout 设置请求头的超时时间。我们也可以把这个设置低些,如果超过这个时间没有发送任何数据,nginx 将返回 request time out 的错误client_body_timeout 设置请求体的超时时间。我们也可以把这个设置低些,超过这个时间没有发送任何数据,和上面一样的错误提示reset_timeout_connection 告诉 nginx 关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间。send_timeout 响应客户端超时时间,这个超时时间仅限于两个活动之间的时间,如果超过这个时间,客户端没有任何活动,nginx 关闭连接server_tokens 并不会让 nginx 执行的速度更快,但它可以关闭在错误页面中的 nginx 版本数字,这样对于安全性是有好处的。client_max_body_size 上传文件大小限制
使用 gzip 压缩功能,可能为我们节约带宽,加快传输速度,有更好的体验,也为我们节约 成本,所以说这是一个重点。 Nginx 启用压缩功能需要你来 ngx_http_gzip_module 模块,apache 使用的是 mod_deflate 一般我们需要压缩的内容有:文本,js,html,css,对于图片,视频,flash 什么的不压缩, 同时也要注意,我们使用 gzip 的功能是需要消耗 CPU 的!
gzip on;gzip_min_length 2k;gzip_buffers 4 32k;gzip_http_version 1.1;gzip_comp_level 6;gzip_types text/plain text/css text/javascript application/json application/javascriptapplication/x-javascript application/xml;gzip_vary on;gzip_proxied any;
gzip on; #开启压缩功能gzip_min_length 1k; #设置允许压缩的页面最小字节数,页面字节数从 header 头的Content-Length 中获取,默认值是 0,不管页面多大都进行压缩,建议设置成大于 1K,如果小与 1K 可能会越压越大。gzip_buffers 4 32k; #压缩缓冲区大小,表示申请4个单位为32K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储 gzip 压缩结果。gzip_http_version 1.1; #压缩版本,用于设置识别 HTTP 协议版本,默认是 1.1,目前大部分浏览器已经支持 GZIP 解压,使用默认即可gzip_comp_level 6; #压缩比例,用来指定 GZIP 压缩比,1 压缩比最小,处理速度最快,9 压缩比最大,传输速度快,但是处理慢,也比较消耗 CPU 资源。gzip_types text/css text/xml application/javascript; #用来指定压缩的类型,‘text/html’类型总是会被压缩。默认值: gzip_types text/html (默认不对 js/css 文件进行压缩)# 压缩类型,匹配 MIME 类型进行压缩# 不能用通配符 text/*# (无论是否指定)text/html 默认已经压缩# 设置哪压缩种文本文件可参考 conf/mime.typesgzip_vary on; #vary header 支持,改选项可以让前端的缓存服务器缓存经过 GZIP 压缩的页面,例如用 Squid 缓存经过 nginx 压缩的数据
缓存,主要针对于图片,css,js 等元素更改机会比较少的情况下使用,特别是图片,占用带宽大,我们完全可以设置图片在浏览器本地缓存 365d,css,js,html 可以缓存个 10 来天, 这样用户第一次打开加载慢一点,第二次,就非常快了!缓存的时候,我们需要将需要缓存 的拓展名列出来, Expires 缓存配置在 server 字段里面
location ~* \.(ico|jpe?g|gif|png|bmp|swf|flv)$ {expires 30d;#log_not_found off;access_log off;}location ~* \.(js|css)$ {expires 7d;log_not_found off;access_log off;}注:log_not_found off;是否在 error_log 中记录不存在的错误。默认是。
总结: expire 功能优点
(1)expires 可以降低网站购买的带宽,节约成本
(2)同时提升用户访问 体验
(3)减轻服务的压力,节约服务器成本,是 web 服务非常重要的功能。 expire 功能缺点:被缓存的页面或数据更新了,用户看到的可能还是旧的内容,反而影响用户体验。
解决办法:第一个缩短缓存时间,
例如:1 天,但不彻底,除非更新频率大于 1 天;第二个 对缓存的对象改名。网站不希望被缓存的内容 1)网站流量统计工具 2)更新频繁的文件(google 的 logo)
防止别人直接从你网站引用图片等链接,消耗了你的资源和网络流量,那么我们的解决办法 由几种:
1:水印,品牌宣传,你的带宽,服务器足够
2:防火墙,直接控制,前提是你知 道 IP 来源
3:防盗链策略 下面的方法是直接给予 404 的错误提示
location ~* ^.+\.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {valid_referers none blocked www.benet.com benet.com;if ($invalid_referer) {#return 302 http://www.benet.com/img/nolink.jpg;return 404;break;}access_log off;}
在完成上述防盗链设置后,进行充分的测试是不可或缺的步骤。
这包括使用浏览器直接尝试访问敏感资源,观察是否符合预期的保护效果;利用搜索引擎对网站进行抓取测试,
检查资源是否得到有效保护;以及通过第三方工具扫描网站,查找可能的安全漏洞或异常行为。

如果在测试中发现设置不生效或存在问题,应及时调整相关参数,并重新测试直到满足安全要求。
值得注意的是,在使用防盗链时,还需要注意以下几点:定期更新防盗链规则以应对新的威胁和网站需求的变化;避免引入新的安全漏洞,如不公开敏感资源的真实URL;以及定期备份数据,防止数据丢失或篡改。
通过nginx的性能优化和合理的防盗链策略配置,可以显著提升网站的安全性和运行效率。
这不仅有助于保护企业的知识产权和用户数据,还能增强用户对网站的信任感,为企业的持续发展提供强有力的支撑。
敬请关注博主,我们将持续为您带来云计算行业及更多前沿技术的最新信息,助您把握技术动态,领先一步!”
若您渴望深入了解云计算知识,或希望与云计算、运维、网络等领域的精英们共同交流学习,欢迎您私信博主,引荐您加入专业交流群。在这里,您可以与各路大咖切磋技艺,共享行业前沿资讯,一同成长进步。期待您的参与,让我们共同开启云计算领域的探索之旅!




🌟亲爱的朋友们,你是否对云计算充满好奇,想要深入了解这一前沿科技?那么,现在就有一个绝佳的机会摆在你面前!🌟
💡**只要简单两步,你就能轻松获取珍贵的云计算资料一份!**💡
1️⃣立即关注博主:不错过任何一次与前沿科技近距离接触的机会!
2️⃣ 回复关键词“云计算资料”:打开通往云计算知识宝库的大门!
🎁这份资料包含了云计算的精华内容,无论是初学者还是专业人士,都能从中获得宝贵的启示和收获。🎁

原文作者:网络豆云计算学堂;如有侵权,请联系管理员删除。