如何为Nginx命名location中的特定路由设置client_max_body_size
Nginx 路由请求体大小限制配置方案
核心思路
- 先在 server 或 http 级别设置全局请求体大小为无限制(或足够大的值),让大部分路由默认不受限制
- 为
/api/photo/upload单独创建精确匹配的 location 块,设置 10MB 的请求体大小限制后转发到命名 location@nodejs - 其他
/api/*路由直接转发到@nodejs,继承全局的无限制规则
完整配置示例
server { listen 80; server_name www.mywebsite.com; # 全局默认:不限制请求体大小(也可设为 100M 这类大值) client_max_body_size 0; # 精确匹配图片上传路由,单独应用10MB限制 location = /api/photo/upload { client_max_body_size 10M; proxy_pass @nodejs; include proxy_params; # 复用统一的代理参数配置(如Host、IP转发头等) } # 匹配其他/api开头的路由,无请求体大小限制 location /api/ { proxy_pass @nodejs; include proxy_params; } # 命名location:统一处理所有Node.js转发请求 location @nodejs { proxy_pass http://localhost:3000; # 替换为你的Node.js服务地址 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; } }
关键细节说明
client_max_body_size 0;表示完全不限制请求体大小,若担心无限制风险,可设为100M这类远大于业务需求的数值- 精确匹配
location = /api/photo/upload优先级最高,会优先拦截上传请求,确保10MB限制仅作用于该路由 - 所有路由最终统一转发到
@nodejs,保证业务逻辑由Node.js统一处理,避免配置分散
内容的提问来源于stack exchange,提问作者davidesp
相关产品推荐
相关产品推荐

