LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

Nginx设置了反向代理时如何开启缓存网站的图片/CSS/JS文件和注意事项

admin
2025年8月21日 9:12 本文热度 75

:Nginx设置了反向代理时如何开启缓存网站的图片/CSS/JS文件和注意事项

这是我的完整代码,启用后网站的“jpg|jpeg|png|gif|ico|css|js”文件全部都无法显示,请帮忙看看问题出在哪:

# 代理站点

server {

listen 80;

server_name oa22.cn *.oa22.cn; # 匹配所有二级域名

# 缓存静态文件

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {

expires 30d; # 设置文件在客户端缓存30天

add_header Cache-Control "public";

access_log off; # 可选,关闭访问日志以减少日志文件大小

}

location / {

proxy_pass http://172.16.11.154:80;  # 内部Web服务器地址

proxy_http_version 1.1;

proxy_connect_timeout 360s;          # 若后端启动慢,可适当延长

proxy_read_timeout 360s;             # 后端响应超时时间

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;  # 传递客户端真实IP

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 追加IP到XFF头部

}

}


根据您提供完整的配置代码,现在我看到了问题的关键所在。您的配置确实存在一个逻辑问题。

问题分析

您的配置中存在两个 location 块:

  1. location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ - 用于处理图片请求

  2. location / - 用于处理所有其他请求并代理到后端服务器

问题在于:当Nginx收到一个图片请求(如 /images/logo.png)时,它会匹配到第一个 location 块(图片处理块),但在这个块中,您没有指定如何处理这些请求 - 没有 proxy_pass,也没有 root 指令。因此,Nginx不知道从哪里获取这些图片文件,导致请求无法被正确处理。

解决方案

您有两个选择来解决这个问题:

方案一:在图片 location 块中也添加代理指令(推荐)

这是最简单直接的解决方案,确保图片请求也能被代理到后端服务器。

server {

    listen 80;

    server_name oa22.cn *.oa22.cn;

    

    # 缓存静态文件

    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {

        # 添加代理指令

        proxy_pass http://172.16.11.154:80;

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        

        # 缓存设置

        expires 30d;

        add_header Cache-Control "public";

        access_log off;

    }

    

    location / {

        proxy_pass http://172.16.11.154:80;

        proxy_http_version 1.1;

        proxy_connect_timeout 360s;

        proxy_read_timeout 360s;

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }

}

方案二:使用 try_files 尝试代理或提供本地文件

如果您希望Nginx首先尝试从本地提供静态文件(如果存在),否则代理到后端,可以使用这种方法:

server {

    listen 80;

    server_name oa22.cn *.oa22.cn;

    

    # 设置根目录(用于本地静态文件)

    root /path/to/your/static/files;

    

    # 缓存静态文件

    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {

        # 先尝试提供本地文件,如果没有则代理到后端

        try_files $uri @proxy;

        

        # 缓存设置

        expires 30d;

        add_header Cache-Control "public";

        access_log off;

    }

    

    location @proxy {

        proxy_pass http://172.16.11.154:80;

        proxy_http_version 1.1;

        proxy_connect_timeout 360s;

        proxy_read_timeout 360s;

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }

    

    location / {

        proxy_pass http://172.16.11.154:80;

        proxy_http_version 1.1;

        proxy_connect_timeout 360s;

        proxy_read_timeout 360s;

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }

}

推荐使用方案一

对于您的使用场景(纯反向代理),方案一更加简单和直接。您只需要在图片处理的 location 块中添加 proxy_pass 和相关代理头设置即可。

修改后的完整配置

server {

    listen 80;

    server_name oa22.cn *.oa22.cn;

    

    # 缓存静态文件

    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {

        proxy_pass http://172.16.11.154:80;

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        

        expires 30d;

        add_header Cache-Control "public";

        access_log off;

    }

    

    location / {

        proxy_pass http://172.16.11.154:80;

        proxy_http_version 1.1;

        proxy_connect_timeout 360s;

        proxy_read_timeout 360s;

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }

}

测试和重载配置

修改后,请执行以下命令:

# 测试配置语法

sudo nginx -t


# 重载配置

sudo systemctl reload nginx

现在,图片请求应该能够正常代理到后端服务器,并且响应头中会包含缓存指令。


该文章在 2025/8/21 11:36:02 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved