Ajax 发布期间随机出现 Nginx 408 错误

Ajax 发布期间随机出现 Nginx 408 错误

我正在使用 jQuery 将一些表单数据发布到我的 Nginx 服务器,但有时会失败并出现 408 错误。当错误发生时,显然处理已发布数据的 php 脚本根本无法到达,因为我在第一行放了一些日志记录函数。最奇怪的是,对于相同的表单数据,脚本有时有效,有时无效。我不明白为什么。

浏览器:Microsoft Edge 101.0.1210.32

jQuery:1.12.4,发布数据的代码如下:

$.ajax({
    url: 'save.php',
    dataType: 'json',
    type: 'post',
    contentType: 'application/json',
    data: JSON.stringify( { "comment": comment,"id":id} ),
    processData: false
});

Nginx 日志:

[03/May/2022:15:11:01 +0700] "POST /save.php HTTP/1.1" 408 0 ...

Nginx 配置:

client_max_body_size 10M;
client_body_buffer_size 2048k;
client_header_timeout 60s;
client_body_timeout 60s;
keepalive_timeout 60s;

答案1

可以定义额外的日志格式 - 专门用于调试。在nginx.conf在部分http

http {
  # ... other config lines

  log_format request_body_log '$remote_addr $remote_user [$time_local] "$request" status:$status bytes_sent:$bytes_sent gzip_ratio:$gzip_ratio connection_requests:$connection_requests request_length:$request_length connection-serial-number:$connection request_time:$request_time "$http_user_agent" "$http_referer" request_body:"$request_body"';

  # ... 
}

要启用定位功能:

location / {
  # ...   
  if ($request_method = POST) {
    access_log /var/www/html/logs/nginx_request_body.log request_body_log;
  }
}

这在日志中提供了有关每个 http 请求的大量信息。
附言此示例适用于较旧的版本,也许您的 nginx 版本有差异。

答案2

解决方案:我们降级了 docker 版本,现在容器(MTU 1500)位于主机网络上,默认 MTU 为 1496。

相关内容