Comment tester le proxy nginx délais d'attente
Cible:
Je voudrais tester tous les proxy Nginx paramètres de délai d'attente dans le scénario très simple. Ma première approche a été de créer vraiment simple serveur HTTP et de mettre certains délais d'attente:
- Entre écouter et accepter de tester proxy_connect_timeout
- Entre accepter et lire le test proxy_send_timeout
- Entre lire et envoyer pour tester proxy_read_timeout
Test:
1) le Serveur de 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) de configuration de Nginx:
J'ai étendu Nginx configuration par défaut en définissant explicitement proxy_connect_timeout et l'ajout de proxy_pass pointe sur mon serveur HTTP local:
location / {
proxy_pass http://localhost:8888;
proxy_connect_timeout 200;
}
3) Observation:
proxy_connect_timeout - Même si un réglage à 200 et de dormir uniquement 130s entre écouter et accepter les Nginx retourne 504 après ~60s qui pourrait être en raison de la valeur par défaut proxy_read_timeout valeur. Je ne comprends pas comment proxy_read_timeout pourrait affecter de connexion sorte de stade précoce (avant de l'accepter). Je m'attends à 200 ici. Veuillez expliquer!
proxy_send_timeout - je ne suis pas sûr si mon approche de test proxy_send_timeout est correct, je pense que je ne comprends toujours pas ce paramètre correctement. Après tout, le délai entre accepter et lire ne force pas proxy_send_timeout.
proxy_read_timeout - il semble être assez simple. Réglage du délai entre la lecture et de l'écriture fait le travail.
Donc je suppose que mes hypothèses sont fausses et que probablement je ne comprends pas proxy_connect et proxy_send délais d'attente correctement. Certains peuvent-ils expliquer à moi, en utilisant le test ci-dessus si possible (ou modifier si nécessaire).
OriginalL'auteur mkorszun | 2013-06-24
Vous devez vous connecter pour publier un commentaire.
Selon les docs le délai de connexion ne peut pas être plus de 75 secondes, ce qui peut expliquer pourquoi il est d'expirer plus tôt que prévu. Pas positif, cependant. Je n'ai jamais vraiment fait de travailler avec le faible niveau de python bibliothèque de sockets de sorte qu'il peut être d'accepter la connexion dans la piscine à un niveau bas avant de vous appeler.s.accept() dans votre programme.
Envoyer délai d'attente fonctionne en mesurant le temps entre deux blocs de données à partir vers le serveur en amont. Puisque vous êtes l'envoi de la totalité de la réponse d'un coup, je suppose que dans votre application, vous frappez le délai d'attente encore une fois, plutôt que d'envoyer un délai d'attente. Si vous envoyez un morceau, puis d'attendre le passé envoyer délai pour envoyer le reste de la réponse et de fermer la connexion, vous devez frapper la envoyer délai d'attente.
OriginalL'auteur Michael Pratt