有时 nginx 返回 501 错误

有时 nginx 返回 501 错误

我遇到一个问题,nginx 对相同的请求返回 501 错误或 200 OK。我不知道为什么。

我猜 nginx 没有足够的上游连接。(我通过反向代理连接 nginx 和 tomcat。使用上游。)所以它返回 501。我知道在这种情况下它会返回 502 而不是 501。但我认为很奇怪“有时”nginx 对相同的请求返回 501 错误。不是“总是”。它们是完全相同的请求。相同的网址、标头和正文。

于是我尝试增加“keepalive_requests”、“keepalive_timeout”和“keepalive”(用于上游)。频率有所降低,但并未完全消除。

请帮我....

访问日志

10.xxx.35.46 - [24/Oct/2019:22:33:01 +0900] "GET /monitor/l7check HTTP/1.1" [-] - [501] 1120 0.001 "-" "-"
10.xxx.35.46 - [24/Oct/2019:22:33:06 +0900] "GET /monitor/l7check HTTP/1.1" [-] - [200] 31 0.002 "-" "-"

我找到了为什么 tomcat 返回 501 的原因!但我仍然不知道为什么会发生这种情况。

nginx 访问日志

10.33.xxx.xxx - [25/Oct/2019:16:21:19 +0900] "POST /ajax/test?ts=1571988079124 HTTP/1.1" [501] 1147 0.006 "https://test.com" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"

tomcat 访问日志

127.0.0.1 - - [25/Oct/2019:16:21:19 +0900] "01POST /ajax/test?ts=1571988079124 HTTP/1.1" 501 1147 "https://test.com" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"

可以看到,客户端请求的是POST方法,但是tomcat接收的却是01POST方法。

我尝试将代理方法设置为这样的请求方法。

proxy_method $request_method;

但它不起作用。它仍然发生。为什么 nginx(或 tomcat??) 会改变方法?

答案1

您使用 PHP-FPM 吗?那么您可能需要增加以下内容:

pm.max_children = 500
pm.max_requests = 1000

我经常看到 501 错误。max_childeren 的默认值是 50,这远远不够。

相关内容