阶段二:企业级中间件-Nginx进阶

性能优化之三大法宝

动静分离

分类

Web应用中的资源可分为两类:

☆ 动态内容

需后端程序实时生成的数据(如PHP/Java接口返回的JSON、用户登录状态页),通常由应用服务器(如Tomcat、Node.js)处理。

☆ 静态内容

无需后端计算、可直接返回的文件(如图片、CSS/JS、字体文件),由Nginx直接高效处理。

动静分离的本质 将静态资源与动态请求分离到不同的服务或目录,通过Nginx精准路由,避免动态请求阻塞静态资源的高效传输,同时降低后端压力。

经典配置

server {
    listen 80;
    server_name example.com;

# 动态请求:转发到后端应用服务器(如Tomcat/Node.js)
    location /api/ {
        proxy_pass http://backend_server:8080/;  # 指向后端服务地址
        proxy_set_header Host $host;            # 传递原始请求头
    }

# 静态资源:直接由Nginx从本地目录返回
    location ~* \.(jpg|jpeg|png|gif|css|js|woff|woff2|ico)$ {
        root /var/www/static;                   # 静态资源存放目录
        expires 30d;                            # 缓存30天(可选优化)
    }

# 默认动态请求(如PHP/HTML模板)
    location / {
        proxy_pass http://app_server:3000/;     # 指向应用服务器
    }
}

注意事项:

客户端缓存

告知浏览器获取的信息是在某个区间时间段是有效的,基本格式:

expires 30s; //表示把数据缓存30秒
expires 30m; //表示把数据缓存30分
expires 10h; //表示把数据缓存10小时
expires 3d;  //表示把数据缓存3天

禁止缓存配置说明

add_header Cache-Control no-store;

案例:缓存图片/js/css文件,缓存时间为1天

location ~* \.(jpg|jpeg|gif|png|js|css)$ {
    expires 1d;
    #add_header Cache-Control no-store;
}

开启Gzip压缩

压缩文件大小变小了,传输更快了。目前市场上大部分浏览器是支持GZIP的。

IE6以下支持不好,会出现乱码情况。

http://nginx.org/en/docs/http/ngx_http_gzip_module.html

gzip on;                     # 第1行:开启Gzip压缩功能
gzip_min_length 1k;          # 第2行:仅压缩大于1KB的文件(小于1KB的压缩后可能更大,不处理)
gzip_buffers 4 16k;          # 第3行:压缩时使用的缓冲区数量(4个)和大小(每个16KB)
gzip_http_version 1.1;       # 第4行:兼容HTTP/1.1协议(主流浏览器均支持)
gzip_comp_level 5;           # 第5行:压缩级别(1-10),数字越大压缩率越高但CPU消耗越大(推荐5~6)
gzip_types text/plain 
           text/css 
           text/javascript 
           application/javascript 
           application/x-javascript 
           image/jpeg 
           image/gif 
           image/png 
           image/x-ms-bmp;    # 第6行:指定要压缩的文件类型(优先压缩文本和图片)
gzip_vary on;                # 第7行:在响应头中添加Vary: Accept-Encoding,帮助缓存服务器区分压缩/未压缩版本
gzip_disable "MSIE [1-6]\."; # 第8行:禁用对IE6及以下版本的Gzip(兼容性问题)

vary 是差异,多样化的意思。
gzip_vary 是 Nginx 配置中的一条指令,它用于控制是否在响应头中设置 Vary: Accept-Encoding 头部。具体来说:
    gzip_vary on;:启用时,Nginx 会在响应头中加入 Vary: Accept-Encoding,表示不同的客户端可能会根据是否支持 gzip 压缩来收到不同的响应内容。这有助于缓存服务器(如 CDN)缓存压缩和未压缩的内容。
    gzip_vary off;:禁用时,Nginx 不会在响应头中加入 Vary: Accept-Encoding,这意味着缓存服务器不会区分压缩与未压缩的内容。这样做通常会减少缓存的复杂性,但可能会导致某些情况缓存不一致。

<sheet sheet-id="GD1Jyh" token="UzCBsee6ohkOUTtiOn7cpZRRnz6"></sheet>

常见压缩类型:

文本类(.html/.css/.js)

矢量图(.svg)

部分图片(.png/.jpg,但已压缩的图片效果有限)。

总结

<sheet sheet-id="gTfwS9" token="UzCBsee6ohkOUTtiOn7cpZRRnz6"></sheet>

日志分析

日志分类

<sheet sheet-id="qqRE9D" token="UzCBsee6ohkOUTtiOn7cpZRRnz6"></sheet>

参考地址:http://nginx.org/en/docs/http/ngx_http_log_module.html

access 访问日志

cat /usr/local/nginx/logs/access.log

命令作用:

执行结果:

关键参数:

注意事项:


**注意事项:**

作用:用于Nginx排错

error.log,默认记录配置启动错误信息和访问请求错误信息。


**关键参数:**

**注意事项:**

注意:GoAccess分析的结果往往是一个html网页,如果想直接预览,建议直接把内容放置于Nginx访问目录

-f:指定文件 --log-format:分析的文件格式



...


        }

        }
  }
...

注意事项:

参数说明


**注意事项:**




本章聚焦三大典型企业级场景,结合实战命令与结果解读,助你掌握日志分析的“进阶用法”。









说明:

**注意事项:**


或者

注意事项:


**注意事项:**



作用:利用Shell脚本对日志进行切割,把大的访问日志切割为一个一个小日志,方便后期存储以及查看分析


------------------华丽的分割线-------------------
#!/bin/bash
------------------华丽的分割线-------------------

关键参数:


**注意事项:**

命令说明:

说明:


**注意事项:**




在后端服务器上,执行



    ...



        }

        }
    }

    ...

<head>
</head>
<body>
    这是后端服务器。
</body>
</html>

注意事项:

在前端服务器上执行,

}

}

} } }


**注意事项:**

注意事项:

1、正向代理用户可以感知到,比较典型应用(科学上网)

2、反向代理用户无感知,比较典型的应用(请求转发,更多应用在于负载均衡技术)

时间:2018.6.-2020.9

发布产品类型:互联网动态站点商城

随着业务量骤增,之前单点服务器,已经不能够满足业务使用需要,单服务器宕机,服务器提供服务,因为流量太大,备也宕机,需要多台服务器,同时提供服务。

网络层面的负载均衡

ip+port接收请求,再转发到对应的机器

智能型负载均衡

根据虚拟的url地址,主机接收请求,再转向(反向代理)相应的处理服务器

角色IP主机名功能备注

**注意事项:**

命令说明:

说明:


**注意事项:**






在三台电脑上,都安装上Nginx

注意事项:

注意事项:

第一步,备份

第二步,去掉注释,空行

第三步,简单查看配置

...

}

} } } }


**注意事项:**






}


    }


        }

        }
        }
    }
}

注意事项:


回到浏览器,多次访问,会发现


...

}

}

}

} } } }


**注意事项:**

在Web01和Web02服务器上

...


    ...


    ...

}

在Web01和Web02服务器上,分别重启

注意事项:


**注意事项:**


注意事项:

注意事项:


> 
> 
> 
> 
> 
> 




注意事项:


**命令拆解:**

| 命令部分 | 重要程度 | 详细解释 |
|---|---|---|
| `--now` | 【普通】 | 要管理的 systemd 服务名称 `--now`,例如 `docker`、`nginx` 或 `sshd`。 |

**注意事项:**



请求时,一会正常一会不正常。有一台服务器并没有正常工作  
解决办法:一台服务器一台测试,看看具体哪个后端服务宕机

特殊算法解析:

作用:普及一些Nginx发行版本,方便以后进行选择!

http://tengine.taobao.org/


**命令拆解:**

| 命令部分 | 重要程度 | 详细解释 |
|---|---|---|
| `./configure` | 【普通】 | `./configure` 是这行命令的主程序,决定这条命令要调用哪个工具。 |
| `--prefix=/usr/local/tengine` | 【普通】 | 长参数 `--prefix` 的值是 `/usr/local/tengine`,用于精确控制命令行为。 |

**注意事项:**






安装步骤: