返回标头之前脚本超时:iredadmin.py

返回标头之前脚本超时:iredadmin.py

我正在尝试访问我的 iRedMail 后端https://domain.com/iredadmin

但是,它总是超时并出现 500 错误。

我检查错误日志,看到以下内容:

[Sat Apr 11 16:53:41 2015] [error] [client IP.ADDRESS.GOES.HERE] Script timed out before returning headers: iredadmin.py
[Sat Apr 11 16:57:56 2015] [error] [client IP.ADDRESS.GOES.HERE] Script timed out before returning headers: iredadmin.py
[Sat Apr 11 16:58:31 2015] [error] [client IP.ADDRESS.GOES.HERE] Script timed out before returning headers: iredadmin.py
[Sat Apr 11 17:04:50 2015] [error] [client IP.ADDRESS.GOES.HERE] Script timed out before returning headers: iredadmin.py
[Sat Apr 11 17:05:25 2015] [error] [client IP.ADDRESS.GOES.HERE] Script timed out before returning headers: iredadmin.py
[Sat Apr 11 17:10:16 2015] [error] [client IP.ADDRESS.GOES.HERE] Script timed out before returning headers: iredadmin.py
[Sat Apr 11 18:33:27 2015] [error] [client IP.ADDRESS.GOES.HERE] Script timed out before returning headers: iredadmin.py
[Sat Apr 11 18:34:50 2015] [error] [client IP.ADDRESS.GOES.HERE] Script timed out before returning headers: iredadmin.py
[Sat Apr 11 18:40:38 2015] [error] [client IP.ADDRESS.GOES.HERE] Script timed out before returning headers: iredadmin.py

这以前曾有效过,所以我想我做了一些破坏它的事情。我的猜测是与 SSL 有关的。我的服务器上没有正确设置 SSL - 事实上,这就是我尝试访问 iRedAdmin 的原因 - 添加用于 SSL 确认的电子邮件地址。然而,这以前绝对有效,所以我不确定为什么它现在停止工作。

我尝试暂时禁用 IPTables 以查看是否可以访问它 - 但这似乎不是问题(所以我的猜测是端口 443 没有被阻止)。

有人见过这个错误吗?可能是什么原因造成的?我在任何地方都找不到有关该问题的任何文档。

编辑 - 额外请求的信息:

剧本:

import os
import sys

rootdir = os.path.abspath(os.path.dirname(__file__))
sys.path.insert(0, rootdir)
from libs import iredbase

# Initialize webpy app.
app = iredbase.app

if __name__ != '__main__':
    # Run app under Apache + mod_wsgi.
    application = app.wsgifunc()
else:
    # Starting webpy builtin http server.
    app.run()

如果配置:

eth0      Link encap:Ethernet  HWaddr 04:01:17:63:25:01
          inet addr:162.243.99.103  Bcast:162.243.99.255  Mask:255.255.255.0
          inet6 addr: fe80::601:17ff:fe63:2501/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:157212578 errors:0 dropped:0 overruns:0 frame:0
          TX packets:23981088 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:13992866807 (13.9 GB)  TX bytes:9214954428 (9.2 GB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:24601180 errors:0 dropped:0 overruns:0 frame:0
          TX packets:24601180 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:3826034358 (3.8 GB)  TX bytes:3826034358 (3.8 GB)

不确定您到底想要我 ping 的内容 - 我当前已登录到我尝试访问 https 的服务器。

您还需要查看 iredbase 的内容吗?

答案1

有两种解决脚本超时的通用方法,您可以使脚本更快,或者绕过或延长超时。每个人都同意,如果你让脚本更快,那就更好,但有时你不能或不知道如何做。在公共制作脚本中,我会尽一切努力使事情足够快,不会超时或转到后台处理机制(您的请求已收到,我们将在大约一个小时内给您答复)。

但在开发和某些内部应用程序类别中,长请求是可以接受的

Web 服务器对脚本施加三类超时。

  1. 完成总时间
  2. 进度超时:当脚本发送一些输出但停止时会发生这种情况。
  3. 第一个字节或所有标头:如果网络服务器没有收到标头并将其发送到浏览器,则浏览器认为服务器没有响应并超时,因此当这种情况发生时,网络服务器终止脚本是有意义的。

这些通常是可调整的,但我不会调整第一个字节超时(因为这样浏览器将超时,而不解决任何问题),而是努力不等待发送标头。这通常可以通过禁用脚本的输出缓冲或定期刷新缓冲区来实现。然后通过添加调试输出,您可以看到您实际将时间花在哪里。

我确实注意到,您的应用程序的大部分内容不在您的脚本中,这使得语言启动(包含)可能太长而无法实用,在这种情况下,像 mod_python 或 fast_cgi 这样的启动发生在请求将是一个好主意。

相关内容