记一次nginx缓存

发表于:2023-07-12 21:36技术,运维热度:80喜欢:0

背景

书接上回,nextjs 打包预览的问题解决了,
结果腾讯云的轻量应用服务器服务器 一执行npm run build 就会死机
无奈 本地build 完成 再scp到项目的服务器的.next文件夹 然后执行部署
nginx配置还是老配置

location / {
  proxy_pass http://127.0.0.1:3301;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header REMOTE-HOST $remote_addr; 
}

同一份文件,本地预览正常,服务器上通过nginx代理,还是老页面

排查

当把我服务器上的3301端口的服务停用,震惊的一幕发生了

网页竟然还能访问,并且还是老的报错

更改ngxin的代理端口为3302 nextjs的启动端口也为3302 一切就正常了

所以怀疑是nginx缓存

查阅当前server的配置,并没有配置缓存

查阅nginx配置 找到proxy.conf

找到以下代理配置

proxy_temp_path /www/server/nginx/proxy_temp_dir;
proxy_cache_path /www/server/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:20m inactive=1d max_size=5g;
client_body_buffer_size 512k;
proxy_connect_timeout 60;
proxy_read_timeout 60;
proxy_send_timeout 60;
proxy_buffer_size 32k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_cache cache_one;

chatGPT解释

这是一个Nginx的配置文件中的一部分,它用于配置Nginx作为代理服务器的一些参数和选项。让我逐行解释这些配置项的含义:

1. `proxy_temp_path /www/server/nginx/proxy_temp_dir;`
   - 这个指令指定了用于存储临时文件的目录路径。Nginx会在处理代理请求时使用这个目录来存储临时文件。

2. `proxy_cache_path /www/server/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:20m inactive=1d max_size=5g;`
   - 这个指令配置了代理缓存的路径和一些相关的参数。它指定了用于存储代理缓存文件的目录路径,并设置了缓存目录的层级结构。
   - `keys_zone=cache_one:20m` 创建了一个名为 "cache_one" 的缓存区域,该区域可以存储最大20MB的缓存索引信息。
   - `inactive=1d` 设置缓存文件在一天内没有被访问时被认为是不活跃的,并可能被清理掉。
   - `max_size=5g` 设置缓存目录的最大尺寸为5GB。

3. `client_body_buffer_size 512k;`
   - 这个指令设置客户端请求体的缓冲区大小为512KB。它决定了Nginx可以一次性接收的客户端请求体的最大大小。

4. `proxy_connect_timeout 60;`
   - 这个指令设置向后端代理服务器建立连接的超时时间为60秒。

5. `proxy_read_timeout 60;`
   - 这个指令设置从后端代理服务器读取响应的超时时间为60秒。

6. `proxy_send_timeout 60;`
   - 这个指令设置向后端代理服务器发送请求的超时时间为60秒。

7. `proxy_buffer_size 32k;`
   - 这个指令设置代理缓冲区的大小为32KB。它决定了Nginx将响应从后端代理服务器读取到的数据存储在内存中的最大大小。

8. `proxy_buffers 4 64k;`
   - 这个指令设置了用于存储代理缓冲区的内存块的数量和大小。在这个例子中,Nginx会使用4个64KB大小的内存块来存储响应数据。

9. `proxy_busy_buffers_size 128k;`
   - 这个指令设置代理忙碌缓冲区的大小为128KB。当后端代理服务器的响应速度比Nginx的响应速度慢时,Nginx会临时存储响应数据到这个缓冲区。

10. `proxy_temp_file_write_size 128k;`
    - 这个指令设置临时文件写入大小为128KB。当代理响应的数据量超过代理缓冲区的容量时,Nginx会将多余的数据写入临时文件。

11. `proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;`
    - 这个指令配置了Nginx在与后端代理服务器的通信过程中遇到特定情况时,如错误、超时、无效头部或特定HTTP状态码(500、503、404),应该如何处理。它指示Nginx在遇到这些情况时进行重试或返回错误页面。

12. `proxy_cache cache_one;`
    - 这个指令指定了被代理的请求是否应该被缓存。在这个例子中,"cache_one" 是之前创建的缓存区域的名称,表示使用该缓存区域来缓存经过代理的请求的响应结果。

请注意,这只是配置文件的一部分,还可能包含其他指令和上下文信息。完整的Nginx配置文件可以包含更多的指令和块以满足具体需求。

查看缓存大小 确实有 34M的内容

rm -rf proxy_cache_dir/* 

再访问页面 页面 502 正常了

重新启动3301端口的服务 页面就可以正常访问了