使用 nginx 上传文件会导致 408 / EAGAIN



我有一个在 Ubuntu 服务器 18.04 上运行的 php 应用程序,使用 laravel forge 进行配置。除了使用多部分/表单数据 html 表单上传图像外,一切正常。这会导致错误连接超时。

查看nginx,我在尝试上传文件时发现了以下消息:

[pid 12937] setsockopt(16, SOL_TCP, TCP_NODELAY, [1], 4) = 0
[pid 12937] accept4(11, {sa_family=AF_INET, sin_port=htons(58384), sin_addr=inet_addr("MY_IP")}, [112->16], SOCK_NONBLOCK) = 16
[pid 12937] accept4(11, 0x7ffc48f7dd00, [112], SOCK_NONBLOCK) = -1 EAGAIN (Resource temporarily unavailable)
[pid 12937] recvfrom(16, "26", 1, MSG_PEEK, NULL, NULL) = 1

"EAGAIN"消息表示没有可供套接字使用的连接。但是,我觉得这很奇怪,因为我是唯一一个向该服务器发送请求的人,并且nginx"worker_connections"设置为768。

更新:我发现此问题仅在我使用插入以太网的工作笔记本电脑时才存在。办公室里的任何其他机器都可以正常工作,我的工作笔记本电脑也可以通过WiFi正常工作。所以这不是服务器端问题,而是必须与我的以太网连接有关。我已经与笔记本电脑上没有这个问题的同事交换了以太网电缆,这不会改变任何事情。

如您所知,408 请求超时消息是当对服务器的请求花费的时间超过服务器分配的超时窗口时返回到客户端的 HTTP 状态代码。

如果出现此错误 (408(,则可以在服务器上检查以下项目:

  • php-fpm配置(不限制请求(
  • nginx.conf中检查以下项目:
    • client_body_timeout
    • client_header_timeout
    • keepalive_timeout

如果您仍然有问题,可以阅读这篇文章: 408请求超时:它是什么以及如何解决它

您可以确保服务器端没有限制,输出是什么?

ulimit -a

> 408 是客户端超时,这意味着您的浏览器或客户端正在关闭连接。它不是服务器,而是如果您使用的是自定义客户端,则需要调整客户端。

如果您使用的是标准浏览器,那么处理这种情况的最佳方法是抛出一个客户端 JS,该 JS 不断发送保持活动请求,确保浏览器不会使连接超时。

为了进行调试,请尝试通过转到network.http.connection-timeout来摆弄 Firefox 浏览器中的超时about:config

如果解决了这个问题,那么实现一个保持连接

最新更新