Ziel:Wie nginx Proxy testen Timeouts
ich alle Nginx Proxy-Timeout-Parameter in sehr einfaches Szenario testen möchten. Mein erster Ansatz war wirklich einfachen HTTP-Server zu erstellen und setzt einige Timeouts:
- Zwischen hören und akzeptieren proxy_connect_timeout
- Zwischen akzeptieren und proxy_send_timeout
- Zwischen Lese zu testen lesen zu testen und senden Test proxy_read_timeout
Test:
1) Server-Code (Python):
import socket
import os
import time
import threading
def http_resp(conn):
conn.send("HTTP/1.1 200 OK\r\n")
conn.send("Content-Length: 0\r\n")
conn.send("Content-Type: text/xml\r\n\r\n\r\n")
def do(conn, addr):
print 'Connected by', addr
print 'Sleeping before reading data...'
time.sleep(0) # Set to test proxy_send_timeout
data = conn.recv(1024)
print 'Sleeping before sending data...'
time.sleep(0) # Set to test proxy_read_timeout
http_resp(conn)
print 'End of data stream, closing connection'
conn.close()
def main():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('', int(os.environ['PORT'])))
s.listen(1)
print 'Sleeping before accept...'
time.sleep(130) # Set to test proxy_connect_timeout
while 1:
conn, addr = s.accept()
t = threading.Thread(target=do, args=(conn, addr))
t.start()
if __name__ == "__main__":
main()
2) Nginx Konfiguration:
I Nginx Standardkonfiguration explizit proxy_connect_timeout Einstellung und das Hinzufügen von proxy_pass deutet auf meinem lokal erweitert HTTP-Server:
location/{
proxy_pass http://localhost:8888;
proxy_connect_timeout 200;
}
3) Obse rvation:
proxy_connect_timeout - Auch wenn es zu 200s Einstellung und nur 130s zwischen hören schlafen und akzeptieren Nginx 504 kehrt nach ~ 60s, die proxy_read_timeout Wert, weil der Standard sein könnte. Ich verstehe nicht, wie proxy_read_timeout Verbindung in so frühen Stadium beeinflussen könnte (bevor akzeptieren). Ich würde 200 hier erwarten. Bitte erkläre!
proxy_send_timeout - Ich bin nicht sicher, ob mein Ansatz proxy_send_timeout zu testen ist richtig - ich glaube, ich richtig noch diesen Parameter nicht verstehen. Schließlich zwingt die Verzögerung zwischen akzeptieren und lesen Proxy_send_timeout nicht.
proxy_read_timeout - es scheint ziemlich einfach zu sein. Das Einstellen der Verzögerung zwischen Lesen und Schreiben erledigt den Job.
Also ich denke, meine Annahmen sind falsch und wahrscheinlich verstehe ich nicht proxy_connect und proxy_send timeouts richtig. Können mir einige die Möglichkeit geben, den obigen Test zu benutzen, wenn möglich (oder wenn nötig, zu ändern).
Ja, Sie haben Recht ungefähr 75s proxy_connect_timeout Limit. Wie auch immer, ich habe auch probiert, proxy_connect_timeout auf 30s zu setzen und die Verzögerung zu 50s zu hören/zu akzeptieren - ich bekomme 200, was ein bisschen unerwartet ist !!! Wenn ich die Verzögerung auf 65s vergrößere und proxy_read_timeout auf 75s setze, erhalte ich 504 nach ~ 60s. – mkorszun