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

我仍然得到相同的錯誤。你知道我可以如何控制變量內容嗎? –