내 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이 제대로 설정되어 있지 않습니다. 사실 그래서 SSL 확인을 위한 이메일 주소를 추가하기 위해 iRedAdmin에 액세스하려고 합니다. 그러나 이것은 이전에는 확실히 작동했는데 왜 지금은 작동이 중지되었는지 잘 모르겠습니다.
IPTables에 액세스할 수 있는지 확인하기 위해 일시적으로 IPTable을 비활성화하려고 시도했지만 문제는 아닌 것 같습니다(따라서 포트 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)
정확히 무엇을 핑하기를 원하는지 잘 모르겠습니다. 현재 https에 액세스하려는 서버에 로그인되어 있습니다.
아직도 iredbase의 내용을 확인해야 합니까?
답변1
스크립트 시간 초과를 해결하는 일반적인 방법에는 두 가지가 있습니다. 즉, 스크립트를 더 빠르게 만들거나 시간 초과를 우회하거나 연장할 수 있습니다. 스크립트를 더 빠르게 만드는 것이 더 좋다는 데 모두가 동의하지만 때로는 그렇게 할 수 없거나 방법을 모르는 경우도 있습니다. 공개 프로덕션 스크립트에서는 시간 초과나 백그라운드 처리 메커니즘으로 이동하지 않고 충분히 빠르게 작업을 수행하기 위해 모든 노력을 기울입니다(귀하의 요청이 접수되었으며 약 1시간 후에 연락드리겠습니다).
그러나 개발 및 특정 내부 응용 프로그램 범주에서는 긴 요청이 허용됩니다.
웹 서버는 스크립트에 세 가지 유형의 시간 초과를 적용합니다.
- 완료하는 데 걸린 총 시간
- 진행 시간 초과: 이는 스크립트가 일부 출력을 전송했지만 중지될 때 발생합니다.
- 첫 번째 바이트 또는 모든 헤더: 웹 서버가 헤더를 수신하지 못하고 브라우저로 보내는 경우, 브라우저는 서버가 응답하지 않는 것으로 간주하고 타임아웃되므로, 이런 일이 발생하면 웹 서버는 거기에 의미 있는 스크립트를 종료합니다.
이는 일반적으로 조정 가능하지만 첫 번째 바이트 시간 초과를 조정하지 않고(그러면 브라우저가 시간 초과되어 아무것도 해결되지 않기 때문에) 대신 헤더가 전송될 때까지 기다리지 않으려고 합니다. 이는 일반적으로 스크립트의 출력 버퍼링을 비활성화하거나 버퍼를 주기적으로 플러시하여 수행됩니다. 그런 다음 디버그 출력을 추가하면 실제로 시간을 소비하는 위치를 확인할 수 있습니다.
나는 대부분의 응용 프로그램이 스크립트에 없다는 것을 알았습니다. 이로 인해 언어 시작(포함)이 너무 길어서 실용적이지 않을 수 있습니다. 이 경우 요청이 좋은 경우 mod_python 또는 fast_cgi와 같은 시작이 발생합니다.