Web服务器群集:Nginx网页及安全优化

目录

一、理论

1.Nginx网页优化

2.Nginx安全优化

3.Nginx日志分割

二、实验

1.网页压缩

2.网页缓存

3.连接超时设置

4.并发设置

5.隐藏版本信息

 6.脚本实现每月1号进行日志分割

7.防盗链

三、总结


一、理论

1.Nginx网页优化

(1)概述

在企业中,部署Nginx后只采用默认的配置参数,会引发网站很多问题,换言之默认配置是针对以前较低的服务器配置的,以前的配置已不适用当今的互联网时代。

为了适应企业需求,就需要考虑如何提升Nginx的性能与稳定性,这就是Nginx优化的内容。

优化内容:

表1 优化内容

分类优化内容
网页优化配置网页压缩功能
配置网页缓存
连接超时设置
并发设置
页面安全配置隐藏版本号
日志分割日志分割
防盗链配置防盗链

(2)网页压缩

① gzip介绍

配置Nginx的网页压缩功能,是使用gzip压缩算法来对网页内容进行压缩后再传输到客户端浏览器。

作用:

降低了网络传输的字节数,加快网页加载的速度;
节省流量,改善用户的浏览体验;
gzip与搜索引擎的抓取工具具有更好的关系。

vim /usr/local/nginx/conf/nginx.conf
http {
...... gzip on;							#取消注释,开启gzip压缩功能gzip_min_length 1k;      		#最小压缩文件大小gzip_buffers 4 64k;      		#压缩缓冲区,大小为4个64k缓冲区gzip_http_version 1.1;   		#压缩版本(默认1.1,前端如果是squid2.5请使用1.0)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;		#压缩类型,表示哪些网页文档启用压缩功能
...... 
}

  ②   Nginx的压缩模块

Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能
允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装
可在配置文件中加入相应的压缩功能参数对压缩性能进行优化。

(3)网页缓存

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

vim /usr/local/nginx/conf/nginx.conf
http {
......server {...... location / {root html;index index.html index.htm;}location ~ \.(gif|jpg|jepg|png|bmp|ico)$ { 		#加入新的 location,以图片作为缓存对象root html;expires 1d;									#指定缓存时间,1天}
......}
}

(4)连接超时设置

HTTP有一个KeepAlive模式,它告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态。若接收到来自同一客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。
KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。
在企业网站中,为了避免同一个客户长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间。可以修改配置文件 nginx.conf,设置 keepalive_timeout超时。
 

vim /usr/local/nginx/conf/nginx.confhttp {...... keepalive_timeout 65 180;       //设置连接超时时间    client_header_timeout 80;client_body_timeout 80;...... }

(5)并发设置

在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞。

① 查看cpu的核心数:

查看cpu的核心数,根据核心数来设置工作进程数
cat /proc/cpuinfo |grep processor|wc -l
cat /proc/cpuinfo |grep -c processor
cat /proc/cpuinfo | grep -c "physical id"

② 修改工作进程核心数:

修改工作进程核心数 
vim /usr/local/nginx/conf/nginx.conf
worker_processes  1;        #修改为与CPU核数相同
worker_cpu_affinity 01 10;  #设置每个进程由不同cpu处理,进程数配为4时0001 0010 0100 1000

2.Nginx安全优化

(1)防盗链

防盗链是防止别人的网站代码里面盗用我们自己服务器上的图片,文件,视频等相关资源;

如果别人盗用网站的这些静态资源,明显的是会增大服务器的带宽压力;

作为网站的维护人员,要杜绝服务器的静态资源被其他网站盗用。

Nginx盗链的过程与apache一致,均是通过网页浏览,将网站图片重定向到自己的网站上。

vim /usr/local/nginx/conf/nginx.conf
http {
......server {......location ~* \.(jpg|gif|swf)$ {valid_referers none blocked *.david.com jack.com;if ( $invalid_referer ) {rewrite ^/ http://www.david.com/error.png;#return 403;}}......}
}

(2)隐藏版本信息

作用:一般情况下,软件的漏洞信息和特定的版本是相关的,因此,软件的版本号对攻击者来说是很有价值的,所以我们隐藏Nginx的版本号,减少受攻击风险,保护服务器安全运行

Nginx隐藏版本号的方法:
① 修改配置文件(隐藏版本号)

vim /usr/local/nginx/conf/nginx.conf
server_tokens off;
##若在http模块中加,为全局设置
##在server模块内加,为当前主机设置

② 修改源码法(修改版本号)

vim /opt/nginx-1.22.0/src/core/nginx.h
#define NGINX_VERSION "1.1.1" 					#修改版本号
#define NGINX_VER "IIS" NGINX_VERSION 			#修改服务器类型cd /opt/nginx-1.22.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make installvim /usr/local/nginx/conf/nginx.conf
http {include       mime.types;default_type  application/octet-stream;server_tokens on;......
}

3.Nginx日志分割

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

日志分割脚本:

#!/bin/bash
day=$(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'
pid_file='/usr/local/nginx/logs/nginx.pid'
if [ ! -d $dir ]then mkdir $dirfi
mv ${logs_file} ${dir}/access${day}.log
mv ${logs_error} ${dir}/error${day}.log
kill -USR1 $(cat ${pid_file})
find $dir -mtime +30 -exec rm -rf {} \;

二、实验

1.网页压缩

(1)配置文件

9e0bb8081f9d4932a900c95340d12789.png

 加入压缩功能参数

fe5d84f4de8f47878320c18081a2f91c.png

配置网页

3f4e81ebdc854efb9348c8a929fccb7f.png

4b3e879311c447a49320a42738fd9913.png

 查看图片为已压缩

b73aa8f46e124339b0154f2c76d3aafb.png

2.网页缓存

(1)配置文件

286c49c6ecf34210983619337051418a.png

1191f0bfced74bac9330dc88564557f6.png

  查看图片缓存失效时间为1天9584fcf5b5fb443289340fc3b976e59f.png

3.连接超时设置

(1)配置文件

ad61d4dc3a804a559cf1f6d32a8417cd.png

 设置超时

8761b643593d48d5bdac4749a81f8d83.png

 查看连接已设超时4f5961958aeb4807b5e779b6d25f2d0a.png

4.并发设置

(1)配置文件

97612f7be6624decaa297883ff783103.png

 查看CPU内核数:

95c83d31849d4c0eaf8301e05e7b99c0.png

 修改工作进程核心数:

c9d06f9da1794371980f24c5470e31a2.png

5.隐藏版本信息

(1)修改配置文件(隐藏版本号)

 查询版本号 

f6376566174143a6911abaa8501eaa90.png

配置文件关闭版本

0e0ce5d63b494fc095f874be2a3e1817.png

关闭版本号

a1906232d7c44562a79ba4e19d19e1ed.png

查询

82002c8a479b4de69fcbc2acbc9e7a7b.png

 (2)修改源码法(修改版本号)

编辑文件

vim /opt/nginx-1.22.0/src/core/nginx.h

修改版本号及服务器类型

84ea9e6524c64645a810002cd61c5f0f.png

指定安装路径

5d3f53f9b9a94c08b095ce2c0440dd28.png

完成

926148d2ee3c4c949910441aba59b35c.png

  编译安装20b2d825b8a5484186a5c27d357458af.png

 启用版本

65b56b6818f14145b81766a05d0e2499.png

 查看版本

 46082bb9e701465e83582fd79e530187.png

 6.脚本实现每月1号进行日志分割

 (1)编写日志分割脚本

cd /opt
vim nginxlog.sh

0816c1a5a20c420d9f08ae54ffe0b98f.png

 (2)赋权

2cde4a87f60d47cd9b19e33e05d0b136.png

(3)执行脚本进行测试

a78cbd338abd4b3ebb2e1c556baef389.png

(4)查看日志

1b9e4f999f744a92bb05e800fb576692.png

(5)计划性任务

a9f8008ac2834d6e9c43a2968a8aeb90.png

7.防盗链

(1)web源主机(192.168.204.200)

配置文件

76e2f9ad6dff477eb513aaa7a96ae1a7.png

6d2ca8eb050e405996f6e804e27b5cd1.png

配置网页

bd8d3d323fc54c16ada36f2778e28614.png

 c06fa8ac2ea2465d81f02198eae96eb3.png  

配置主机与IP映射

2f80075085144cb28b8b8b670ea9c4d7.png

80d3d285d3044df2bf370fbd7f13e01d.png

 (2)盗链网址主机(192.168.204.150)

配置文件

3fb1966b48c34f1abd6f80c8ef7f63d1.png

 9d94ddd61d014b4ea9c556a57817f739.png

 配置网页

4d04cb4551814a38a7c4dc05166490a5.png

da998cf3e86f4188901b73f9f0aaf728.png

 5f1c911e6cc84578af4fee053a682335.png

 (3)在web源主机查看浏览器

41232058fbc5498c9e2230aa9c0cedb8.png

(4)在盗图网站主机上进行浏览器验证

89d3c22a735c43afb392c89ac59004dd.png

三、总结

在企业信息化应用环境中,服务器的安全性和响应速度需要根据实际情况进行响应参数配置,以达到最优的用户体验,默认的 Nginx安装参数只能提供最基本的服务,还需要调和如网页缓存时间、连接超时、网页压缩等响应参数,才能发挥出服务器的最大作用。

Nginx网页及安全优化常用方法为网页压缩、网页缓存、连接超时设置、并发设置、防盗链、日志分割和隐藏版本信息。

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

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

相关文章

C++不知算法系列之计数排序算法的计数之巧

1. 前言 计数排序是较简单的排序算法,其基本思想是利用数组索引号有序的原理。 如对如下的原始数组中的数据(元素)排序: //原始数组 int nums[5]{9,1,7,6,8};使用计数排序的基本思路如下: 创建一个排序数组。数组的大小由原始数组的最大值…

vue3 element-plus 暗黑模式(主题切换)简易版

暗黑模式是说明 暗黑模式是指在应用程序或操作系统中使用暗色背景和浅色文本的界面设计。与传统的亮色模式相比,暗黑模式具有以下特点: 减少眼部疲劳:使用暗色背景可以减少屏幕发出的蓝光,减轻长时间使用电子设备对眼睛的疲劳程度…

python机器学习—— 数据预处理 算法初步

目录 数据预处理1.获取数据2.处理缺失值3.划分数据集4.数据预处理和PCA降维5.算法实现:估计器 数据预处理 1.获取数据 from sklearn.datasets import load_iris liload_iris() print("获取特征值") print(li.data) print("目标值",li.target)#…

Spring Boot 统一功能处理

✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录 ⽤户登录权限效验Spring Boot 拦截器自定义拦截器将自定义拦截器加入到系统配置 拦截器实现原理 统一异常处理创建一个异常处…

LLM - 搭建 ProteinGPT 结合蛋白质结构 PDB 知识的行业 ChatGPT 系统

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/131403263 论文:ProteinChat: Towards Enabling ChatGPT-Like Capabilities on Protein 3D Structures 工程:ht…

数据库监控与调优【十七】—— 表结构设计优化

表结构设计优化 第一范式(1NF) 字段具有原子性,即数据库的每一个字段都是不可分割的原子数据项,不能是集合、数组、记录等非原子数据项 当实体中的某个属性有多个值时,必须拆分为不同的属性 例子: 如图…

【广州华锐互动】机械设备事故VR模拟体验系统

随着虚拟现实技术的不断发展,越来越多的行业开始尝试将VR技术应用到实际场景中,以提供更加真实的体验。其中,机械伤害事故VR警示教育系统的出现,为机械工程师、安全培训人员等行业提供了一种全新的培训方式。在实现上,…

Linux基础

Linux root用户,cd ~ 相当于 cd /root 普通用户,cd ~ 相当于cd /home/当前用户名 注:cd - 返回进入此目录之前所在目录 rm --> remove mv --> move cp --> copy !! 执行最近的一次命令 echo $USER 展现当前用户名字 echo $PATH 展…

Linux:安装tomcat

注意:1.安装tomcat时最好用非root用户安装 2.可以选择新建一个用户,用户安装部署tomcat,本文将继续用fovace账户进行tomcat安装 一、前置条件 安装tomcat需要先安装jdk,所以先确定系统中是否已经有jdk,如下&#xff1a…

Docker的run流程

底层原理 Docker怎么工作? Docker为什么比VM虚拟机块? 1.Docker有比虚拟机更少的抽象层 2.docker利用的是宿主机的内核,vm需要是Guest OS 所以说,新建一个容器的时候,docker不需要像虚拟机一样加载一个系统内核&am…

消息中间件中常见问题

如何保证消息不丢失 MQ的用途 异步发送(验证码,短信,邮件)MySQL,ES,Redis之间的数据同步分布式事务削峰填谷 消息可能丢失的环境 消息在产生端时候生产端挂掉,消息未到达交换机&#xff0c…

VS里拉取时候,变成变基中,变成分离分支状态,git 头指针分离于 baf67ff

分离头指针(detached HEAD) 通常,我们工作在某一个分支上,比如 master 分支。这个时候 master 指针和 HEAD 指针是一起前进的,每做一次提交,这两个指针就会一起向前挪一步。但是在某种情况下(例…