欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > Nginx优化

Nginx优化

2024/10/24 18:23:37 来源:https://blog.csdn.net/yangye2424637628/article/details/141162539  浏览:    关键词:Nginx优化

文章目录

  • 一、隐藏版本号
  • 二、设置 Nginx 服务在启动时使用的用户名和组名
  • 三、缓存时间
  • 四、日志切割
  • 五、连接超时
    • keepalive_timeout
    • client_header_timeout
    • client_body_timeout
  • 六、更改进程数
  • 七、网页压缩
  • 八、防盗链
    • 开启防盗链

一、隐藏版本号

使用 Fiddler 工具抓取数据包,查看 Nginx版本
在这里插入图片描述
方法一:修改配置文件方式

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.223.10

在这里插入图片描述
在这里插入图片描述
方法二:修改源码文件,重新编译

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

在这里插入图片描述

systemctl restart nginx
curl -I 127.0.0.1

在这里插入图片描述

二、设置 Nginx 服务在启动时使用的用户名和组名

vim /usr/local/nginx/conf/nginx.conf
user nginx nginx;
systemctl restart nginx
ps aux | grep nginx
主进程由root创建,子进程由nginx创建

在这里插入图片描述
在这里插入图片描述

三、缓存时间

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

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

对于所有请求图片文件(如 .jpg、.png 等)的请求,Nginx 都会在 html 目录下查找文件,
并且告诉客户端浏览器这些资源在 1 天内有效,可以被缓存
在这里插入图片描述
​Cahce-Control:max-age=86400 表示缓存时间是 86400 秒。也就是缓存一天的时间,一天之内浏览器访问这个页面,都是用缓存中的数据,而不需要向 Nginx 服务器重新发出请求,减少了服务器的使用带宽。
在这里插入图片描述

四、日志切割

vim /fenge.sh
#!/bin/bashd=$(date -d "-1 day" "+%Y%m%d")                 #显示前一天的时间
logs_path="/var/log/nginx"
pid_path=`cat /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-{$d}#重建日志文件
kill -USR1 $pid_path
#删除30天前的日志文件                   
find $logs_path -mtime +30 -exec rm -rf {} \;
#find $logs_path -mtime +30 |xargs rm -rf

在这里插入图片描述

chmod +x fenge.sh
./fenge.sh
ls /var/log/nginx
ls /usr/local/nginx/logs/access.log

在这里插入图片描述

crontab -e
0 1 * * * /root/fenge.sh

在这里插入图片描述

五、连接超时

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

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

vim /usr/local/nginx/conf/nginx.conf
http {
...... keepalive_timeout 65 180;client_header_timeout 80;client_body_timeout 80;
...... 
}systemctl restart nginx

在这里插入图片描述

keepalive_timeout

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

第一个参数 65:表示长连接的读取超时时间,单位是秒。在这个例子中,如果客户端在 65 秒内没有发送任何数据,Nginx 将关闭该连接。

第二个参数 180:表示空闲 keepalive 连接的超时时间,单位也是秒。这意味着如果连接在 180 秒内没有任何数据传输,即使连接仍然处于打开状态,Nginx 也会关闭该连接。

client_header_timeout

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

client_body_timeout

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

六、更改进程数

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

在这里插入图片描述

vim /usr/local/nginx/conf/nginx.conf
worker_processes  2;        #修改为核数相同或者2倍
worker_cpu_affinity 01 10;      
#设置每个进程由不同cpu处理,进程数配2 4 6 8分别为0001 0010 0100 1000 systemctl restart nginx

worker_cpu_affinity 是 Nginx 配置中的一个指令,用于设置工作进程与 CPU 核心的亲和性,即绑定特定的工作进程到特定的 CPU 核心上运行。这样可以提高 CPU 缓存的利用率,从而提升 Nginx 处理请求的性能。这个指令在多核 CPU 环境中尤其有用。
在这里插入图片描述

七、网页压缩

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;  #压缩类型,表示哪些网页文档启用压缩功能
...... 
}

在这里插入图片描述

vim /usr/local/nginx/html/index.html
<img src="error.png">systemctl restart nginx

在这里插入图片描述
在这里插入图片描述

八、防盗链

在企业网站服务中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失,也避免了不必要的带宽浪费。
Nginx 的防盗链功能也非常强大,在默认情况下,只需要进行很简单的配置,即可实现防盗链处理。

开启防盗链

使用另外一台服务器

1. #安装httpd
yum install -y httpd
2. #切换至/var/www/html
cd /var/www/html
vim index.html 
<html>
<body>
<img src="http://www.yy.com"/>
</body>
</html>
4.添加域名映射
echo "192.168.44.10 www.yy.com" >>/etc/hosts
echo "192.168.44.40 www.yy2.com" >>/etc/hosts

在这里插入图片描述

vim /usr/local/nginx/conf/nginx.confserver {listen       80;server_name  www.lichen.com;charset utf-8;location ~* \.(jpg|gif)$ {    valid_referers none blocked *.lichen.com lichen.com;if ($invalid_referer) {   #如果为真说明,是在盗用rewrite ^/ http://www.lichen.com/fdl.png;  #如果$invalid——referer为真,则向其显示该地址信息#此处也可以写返回403状态码#return 403;}}
}

在这里插入图片描述

location ~* .(jpg|gif)$:这是一个 location 块的匹配指令,~* 表示使用正则表达式匹配请求的 URI。这里匹配所有以 .jpg 或 .gif 结尾的请求。

valid_referers none blocked *.lichen.com lichen.com;:这个指令定义了哪些引用(referer)是有效的。在这个例子中:

none 表示不允许任何引用。
blocked 表示阻止所有引用。
*.yy.com 允许所有子域名为 .yy.com 的引用。
yy.com 允许来自 yy.com 域名的引用。
valid_referers 指令通常用于防止其他网站盗用你的资源。如果请求的引用不在允许的列表中,Nginx 将检查 $invalid_referer 变量。

if ($invalid_referer):这是一个条件判断,如果 $invalid_referer 为真(即请求的引用无效),则执行大括号内的指令。

rewrite ^/ http://www.lichen.com/fdl.png;:如果引用无效,使用 rewrite 指令重写 URL,将请求重定向到 http://www.lichen.com/fdl.png。这意味着当有人试图从不允许的网站引用图片时,他们将被重定向到指定的图片地址。

return 403;:这是一个注释掉的示例,如果取消注释,它将返回 HTTP 403 Forbidden 状态码,禁止访问。

www.yy.com
在这里插入图片描述
www.yy2.com
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com