Nginx 优化

文章目录

1、隐藏版本号

隐藏nginx的版本号,为了防止恶意用户利用已知漏洞进行攻击

c 复制代码
## 查看版本号
curl -I http://192.168.10.23

方法一:修改配置文件方式
vim /usr/local/nginx/conf/nginx.conf
http {
    include	mime.types;
    default_type	application/octet-stream;
    ## 添加,关闭版本号
    server_tokens off;	
    ......
}

systemctl restart nginx
curl -I http://192.168.10.23

方法二: 
vim /opt/nginx-1.12.0/src/core/nginx.h
#define NGINX_VERSION "1.1.1" 					#修改版本号
#define NGINX_VER "IIS" NGINX_VERSION 			#修改服务器类型

cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make -j 2

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

## 重启服务
systemctl restart nginx
## 测试
curl -I http://192.168.10.23

2、修改用户与组

java 复制代码
vim /usr/local/nginx/conf/nginx.conf
## 取消注释,修改用户为 nginx ,组为 nginx
user nginx nginx; 								
## 重启
systemctl restart nginx
## 查看
ps aux | grep nginx
## 主进程由root创建,子进程由nginx创建

3、缓存时间

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

设置缓存过期时间,主要是控制静态资源的缓存时间, 方便提高网站访问速度

c 复制代码
vim /usr/local/nginx/conf/nginx.conf
## 加入新的 location,以图片作为缓存对象
location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ { 		
	root html;
	## 指定缓存时间,1天
	expires 1d;				
	## 1s,1m,1h			
}

#重启服务
systemctl restart nginx

4、日志切割

c 复制代码
vim /opt/fenge.sh
#!/bin/bash
## 显示前一天的时间
day=$(date -d "-1 day" "+%Y%m%d")	
										
logs_path="/var/log/nginx"
pid_path="/usr/local/nginx/logs/nginx.pid"

## 判断路径是否存在,不存在则创建
[ -d $logs_path ] || mkdir -p $logs_path

## 创建日志文件目录
mv /usr/local/nginx/logs/access.log ${logs_path}/kgc.com-access.log-$day	

## 向指定进程发送USR1信号
kill -USR1 $(cat $pid_path)		
## 建新日志文件
find $logs_path -mtime +30 -exec rm -rf {} \;	
## 删除30天之前的日志文件
## find $logs_path -mtime +30 | xargs rm -rf 

## 文件赋权
chmod +x /opt/fenge.sh

## 启动脚本
/opt/fenge.sh
ls /var/log/nginx
ls /usr/local/nginx/logs/access.log 

## 定时任务
crontab -e
0 1 * * * /opt/fenge.sh

5、连接超时

HTTP有一个KeepAlive模式,它告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态。若接收到来自同一客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。

KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能

c 复制代码
vim /usr/local/nginx/conf/nginx.conf
http {
...... 
    keepalive_timeout 65 180;        三次握手的超时时间
    client_header_timeout 80;        等待客户端发送请求头的超时时间会送408 错误
    client_body_timeout 80;          设置客户端发送请求体的超时时间
...... 
}

keepalive_timeout

指定KeepAlive的超时时间(timeout)。指定每个TCP连接最多可以保持多长时间,服务器将会在这个时间后关闭连接。 Nginx的默认值是65秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为0,就禁止了keepalive 连接

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

client_header_timeout

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

client_body_timeout

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

6、更改进程数

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

c 复制代码
## 查看cpu核数
cat /proc/cpuinfo | grep -c "physical id"
#查看nginx主进程中包含几个子进程
ps aux | grep nginx							

vim /usr/local/nginx/conf/nginx.conf
worker_processes  2;
## 设置每个进程由不同cpu处理,进程数配为4时0001 0010 0100 1000
worker_cpu_affinity 01 10;

## 重启
systemctl restart nginx

7、配置网页

Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能

允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装

可在配置文件中加入相应的压缩功能参数对压缩性能进行优化

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

cd /usr/local/nginx/html
先将game.jpg文件传到/usr/local/nginx/html目录下
vim index.html
...... 
<img src="game.jpg"/>				#网页中插入图片
</body>
</html>

nginx -s reload

在Linux系统中,打开火狐浏览器,右击点查看元素
选择 网络 ---> 选择 HTML、WS、其他 
访问 http://192.168.10.23 ,双击200响应消息查看响应头中包含 Content-Encoding: gzip

8、防盗链

c 复制代码
----------------配置防盗链-------------------
vim /usr/local/nginx/conf/nginx.conf
http {
......
	server {
	......
		location ~* \.(jpg|gif|swf)$ {
			valid_referers none blocked *.kgc.com kgc.com;
			if ( $invalid_referer ) {
				rewrite ^/ http://www.kgc.com/error.png;
				#return 403;
            }
        } 
	......
	}
}
----------------------------------------------------------------------------------------------------------
~* \.(jpg|gif|swf)$ :这段正则表达式表示匹配不区分大小写,以.jpg 或.gif 或.swf 结尾的文件;
valid_referers :设置信任的网站,可以正常使用图片;
none:允许没有http_refer的请求访问资源(根据Referer的定义,它的作用是指示一个请求是从哪里链接过来的,如果直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含 Referer 字段的),如 http://www.kgc.com/game.jpg
我们使用 http://www.kgc.com 访问显示的图片,可以理解成 http://www.kgc.com/game.jpg 这个请求是从 http://www.kgc.com 这个链接过来的。
blocked:允许不是http://开头的,不带协议的请求访问资源; 
*.kgc.com:只允许来自指定域名的请求访问资源,如 http://www.kgc.com

if语句:如果链接的来源域名不在valid_referers所列出的列表中,$invalid_referer为true,则执行后面的操作,即进行重写或返回 403 页面。
----------------------------------------------------------------------------------------------------------
网页准备:
Web源主机(192.168.10.23)配置:
cd /usr/local/nginx/html
将game.jpg、error.png文件传到/usr/local/nginx/html目录下
vim index.html
<html>
<body>
<img src="game.jpg"/>
</body>
</html>

echo "192.168.10.23 www.kgc.com" >> /etc/hosts 
echo "192.168.10.80 www.benet.com" >> /etc/hosts 

盗链网站主机(192.168.10.80):
cd /usr/local/nginx/html
vim index.html
...... 
<img src="http://www.kgc.com/game.jpg"/>
</body>
</html>

echo "192.168.10.23 www.kgc.com" >> /etc/hosts 
echo "192.168.10.80 www.benet.com" >> /etc/hosts 

在盗图网站主机上进行浏览器验证
http://www.benet.com
相关推荐
Leinwin20 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_8653825020 小时前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
漠北的哈士奇20 小时前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.75920 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
运维小欣21 小时前
智能体选型实战指南
运维·人工智能
yy552721 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 天前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
05大叔1 天前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
安当加密1 天前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
dashizhi20151 天前
服务器共享禁止保存到本地磁盘、共享文件禁止另存为本地磁盘、移动硬盘等
运维·网络·stm32·安全·电脑