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
相关产品推荐
相关产品推荐

