9

我们有一个在 Nginx 上运行的 API,应该返回 JSON 对象。这个服务器有很多负载,所以我们做了很多性能改进。

API 从客户端接收一个 ID。服务器有一堆代表这些 ID 的文件。因此,如果 ID 作为文件被发现,则该文件的内容(即 JSON)将由后端返回。如果文件不存在,则不调用后端,Nginx 简单地为此发送 404,因此我们节省了性能(无需运行后端系统)。

现在我们偶然发现了一个问题。由于我们仍然需要支持旧系统,我们不能为客户分发 404 页面,因为这会导致问题。我想出的是返回一个空的 JSON 字符串,而不是 ( {}) 和一个 'fake' 200 状态码。这需要一个高性能的解决方案才能仍然能够处理所有负载。

这有可能吗,如果可以,怎么做?

4

2 回答 2

18
error_page 404 =200 @empty_json;

location @empty_json {
     return 200 "{}";
}

参考:

于 2013-11-12T14:48:28.930 回答
2

您始终可以在文档根目录中创建一个名为 eg 的文件,该文件empty.json仅包含一个空对象{}

然后在你的 nginx 配置中,在你的 location 块中添加这一行

try_files $uri /empty.json;

(阅读有关try_files的更多信息)

这将检查客户端请求的文件是否存在,如果不存在则只显示 empty.json。这会产生一个 200 HTTP OK 并向{}请求的客户端显示一个。

于 2013-11-12T13:23:41.747 回答