Nginx优化

一、隐藏版本号

使用 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 install

vim /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.conf

http {
......
  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/bash
 
d=$(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.conf
 
server {
        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
在这里插入图片描述

优化方案

1、比如在大促期间双十一时,在可以重启的状态下,nginx如何优化
①:在可以重启的状态下,为避免同一客户端长时间占用连接,造成资源浪费,可在http段设置相应的连接超时参数keepalive_timeout,实现控制连接访问时间

②:当Nginx将网页数据返回给客户端后,可针对静态网页设置缓存时间,在配置文件内的http段内的server段内添加location,配置expires 1d;避免重复请求,加快了访问速度

③:在高并发场景,需要启动更多的nginx进程以保证快速响应,避免造成阻塞;配置worker_processes开启多进程

④:可在配置文件中加入相应的压缩功能参数对压缩性能进行优化,以节约网站带宽,提升用户的访问体验

2、Nginx 前端页面/图片加载不出来,你是怎么排查故障的
① 首先文件的格式是否正常,看我服务端html目录下是否有图片,若确定在,再去nginx的配置文件中查看是否支持我上传图片的格式,所以我会去/usr/local/nginx/conf/nginx.conf,添加我上传图片的格式,然后去我的测试端浏览器中清空缓存再次测试

② 查看缓冲区内存是否过小,是否我上传的图片过大,是否需要压缩图片在我测试端浏览器中是会先把文件加载到缓冲区,但是若上传的文件大小大于我的缓冲区,肯定就无法加载出来,去/usr/local/nginx/conf/nginx.conf中的gzip_buffers参数的大小,可以调整缓冲器的大小或者压缩图片

3、nginx怎么处理请求的?
nginx接收一个请求后,首先由listen和server_name指令匹配server模块,再匹配server模块里的location,location就是实际地址

server {            				# 第一个Server区块开始,表示一个独立的虚拟主机站点
    listen       80;      		# 提供服务的端口,默认80
    server_name  localhost;       		# 提供服务的域名主机名
    location / {            				# 第一个location区块开始
        root   html;       				# 站点的根目录,相当于Nginx的安装目录
        index  index.html index.htm;      	# 默认的首页文件,多个用空格分开
    }          					# 第一个location区块结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值