You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx 1.27.0 针对Strapi 4.25.0 /upload/路径单独提升上传文件大小的配置问题

Nginx 1.27.0 针对Strapi 4.25.0 /upload/路径单独提升上传文件大小的配置问题

嘿,我完全懂你的顾虑——全局设置client_max_body_size确实会给所有请求开绿灯,确实存在被滥用发起DDOS攻击的风险。针对Strapi的上传路径单独配置才是更稳妥的方案,我来帮你调整下配置:

首先,在你的HTTPS server块里,给/upload相关路径单独加一个location块,把client_max_body_size放在这个块里就可以精准生效了。注意Strapi的上传接口可能涉及/upload下的子路径,所以用^~ /upload来优先匹配这类请求:

server {
    # Listen HTTP
    listen 80;
    server_name myapi.tld;
    access_log /var/log/nginx/myapi/myapi.log;
    error_log /var/log/nginx/myapi/myapi.error.log;

    # Redirect HTTP to HTTPS
    return 301 https://$host$request_uri;
}

server {
    # Listen HTTPS
    listen 443 ssl;
    server_name myapi.tld;
    
    ssl_certificate path_to_cert;
    ssl_certificate_key path_to_key;
    include /etc/letsencrypt/options-ssl-nginx.conf; # 补全你的证书配置文件路径
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # 单独给Strapi上传路径设置文件大小限制
    location ^~ /upload {
        client_max_body_size 100M; # 按需设置大小,比如100MB,可根据需求调整
        proxy_pass http://localhost:1337; # 替换成你的Strapi实际运行地址
        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 X-Forwarded-Proto $scheme;
    }

    # 其他请求的默认代理配置
    location / {
        proxy_pass http://localhost:1337;
        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 X-Forwarded-Proto $scheme;
    }
}

给你拆解下关键细节:

  • ^~ /upload:这个匹配规则会优先处理所有以/upload开头的请求,确保它们走我们专门配置的规则,不会被其他正则匹配的location覆盖。
  • client_max_body_size 100M:这里设置你允许的最大上传文件体积,按需改成200M、500M都可以。
  • 记得把proxy_pass里的地址换成你Strapi实际的运行地址——比如本地1337端口,或者容器内部的地址。

另外还要提醒下,Strapi本身的上传配置也要同步调整,不然Nginx放行后Strapi可能会拦下来。在Strapi的config/middlewares.js里,检查strapi::bodyparser的参数,确保文件大小限制和Nginx保持一致:

module.exports = {
  // ...
  middleware: {
    'strapi::bodyparser': {
      enabled: true,
      config: {
        formLimit: '100M',
        jsonLimit: '100M',
        textLimit: '100M',
        formidable: {
          maxFileSize: 100 * 1024 * 1024, // 对应100MB,和Nginx配置一致
        },
      },
    },
  },
  // ...
};

这样两边配置同步后,就能顺利上传大文件,还不用承担全局配置的安全风险啦~

备注:内容来源于stack exchange,提问作者derelektrischemoench

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 11:59:37