0

我有一个公开的接口,如RESTful Web服务:如何为RESTful API配置nginx?

  • GET /api/v1/films/:id/thumb
  • PUT /api/v1/films/:id/thumb
  • ...

Web服务器由的NodeJS集群的背后nginx的反向代理。

我现在正在尝试配置nginx代理和客户端缓冲区。为此我设定的指令

location ~ /api/v1/films/(.*)/thumb { 
     proxy_buffers 6 500k; 
     proxy_busy_buffers_size 1m; 
     client_max_body_size 3m; 
     client_body_buffer_size 3m; 
     proxy_pass http://backend; 
    } 

这个配置做这项工作,但不能令人满意,因为它配置proxy_buffers 3mPUT要求是不必要的,资源的浪费和对GET一个client_max_body_size 3m

所以我正在寻找一种基于http方法除URI之外的配置路由的方法。

感谢大家愿意分享一些经验。

+0

您可以使用'map'命令来检查http方法。看看这个(页面)[http://nginx.org/en/docs/http/ngx_http_map_module.html] – abeyaz

回答

1

您可以将http方法映射到您想要的最大身体尺寸。这应该工作,例如:

map $request_method $max_size { 
    default  3m; 
    PUT   1m; 
    GET   1m; 
} 

location ~ /api/v1/films/(.*)/thumb { 
    proxy_buffers 6 500k; 
    proxy_busy_buffers_size 1m; 
    client_max_body_size $max_size; 
    client_body_buffer_size $max_size; 
    proxy_pass http://backend; 
} 
+0

谢谢,我只是尝试了你的建议,但nginx正在调用名称“client_max_body_size”指令无效值。我不明白为什么,有什么想法? –

+0

你可以尝试引用'1m','3m'等值吗? – abeyaz

+0

我仍然得到相同的错误。你知道我可以如何控制变量内容吗? –