You need to enable JavaScript to run this app. Ubuntu上Nginx搭配uWSGI部署Flask访问静态图片报404咨询
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu上Nginx搭配uWSGI部署Flask访问静态图片报404咨询

问题根因

现有Nginx配置没有对静态图片请求做单独处理,所有请求都会被全量转发给后端uWSGI进程,而Flask内置的静态文件路由规则和你需要的 /myproject/static/ 访问路径不匹配,导致图片请求返回404。

可直接落地的配置方案

将现有Nginx server块替换为如下内容:

server {
    listen 80;
    server_name _;

    # 拦截所有静态资源请求,由Nginx直接读取本地文件返回
    location ^~ /myproject/static/ {
        # 路径映射:将URL中的静态资源前缀对应到服务器实际存储目录
        alias /myproject/static/;
        # 静态文件基础缓存配置,降低重复请求开销
        expires 7d;
        add_header Cache-Control "public";
    }

    # 原有动态请求转发逻辑保留,非静态路径请求仍交给uWSGI处理
    location / {
        include uwsgi_params;
        uwsgi_pass unix:/root/myproject_sock/myproject.sock;
    }
}
配置说明
  • 用^~修饰符标记静态路径块:匹配到/myproject/static/开头的请求时,Nginx会优先直接处理本地文件,不会把请求转发给uWSGI
  • 用alias而非root做路径映射:如果误用root /myproject/,Nginx会自动拼接完整路径为/myproject/myproject/static/xxx.jpg,出现路径重复匹配的错误,alias可以精准把URL前缀替换为实际磁盘路径,刚好和你的图片存储位置对齐
  • 保留原有动态请求块:所有接口、页面类的动态请求,仍然按照原逻辑通过unix socket转发给uWSGI,不影响现有Flask应用的功能
  • 本配置不需要修改Flask应用本身的代码,重载配置后即可通过 http://你的服务器IP/myproject/static/images/first_image.jpg 正常访问对应图片资源
上线前校验步骤
  • 执行sudo nginx -t检查Nginx配置语法是否有错误
  • 确认无报错后,执行sudo systemctl reload nginx重载配置生效,无需重启Nginx服务
  • 校验目录权限:确保Ubuntu下Nginx运行用户(默认为www-data)对/myproject、/myproject/static、/myproject/static/images三层目录有读、进入权限,对图片文件有读权限,避免出现403禁止访问的问题

内容的提问来源于stack exchange,提问作者shantanu rahut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 01:36:06