【问题标题】:How to configure nginx for a RESTful API?如何为 RESTful API 配置 nginx?
【发布时间】:2018-02-23 09:05:43
【问题描述】:

我有一个 RESTful Web 服务,它公开了一个接口,例如:

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

Web Server 由 nginx 反向代理后面的 nodejs 集群组成。

我现在正在尝试配置 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;
    }

此配置完成了这项工作,但并不令人满意,因为它为PUT 请求配置了proxy_buffers 3m,这是不必要且浪费资源的,而为GET 配置了client_max_body_size 3m

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

感谢所有愿意分享一点经验的人。

【问题讨论】:

标签: rest nginx asp.net-web-api nginx-location nginx-reverse-proxy


【解决方案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;
}

【讨论】:

  • 谢谢,我刚刚尝试了您的建议,但 nginx 正在调用名称"client_max_body_size" directive invalid value。我不明白为什么,有什么想法吗?
  • 你能尝试引用像 '1m', '3m' 这样的值吗?
  • 我仍然遇到同样的错误。你知道我如何控制变量内容吗?
  • 根据docs,它必须工作。你也可以尝试引用像 '$max_size' 这样的变量吗?
  • 你也可以将 1m 和 3m 替换为 1024 和 3072 仅作为数字吗?
猜你喜欢
  • 2015-03-21
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 2020-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多