2017-07-18 3 views
0

Nous exécutons notre serveur dans l'instance AWS EC2 M4.xlarge et nous constatons un comportement inexpliqué avec les connexions websocket.
Problème: Nos clients (en cours d'exécution websocket client python pour se connecter) qui sont connectés au serveur websocket tornade derrière nginx, sont ALL étant abandonné en même temps et pour la même raison de ping/pong TimedOut après un certain temps (entre 3-6 heures) d'être connecté. Vous ne savez pas si nous configurons une configuration de manière incorrecte.Tornade derrière Nginx pour websockets - timeout

Voici la configuration de notre sysctl.conf:

net.core.somaxconn = 65536 net.ipv4.tcp_max_tw_buckets = 1440000 net.ipv4.tcp_fin_timeout = 15
/etc/nginx/nginx.conf:

user www-data; 
worker_processes auto; 
pid /run/nginx.pid; 
events { 
    worker_connections 65000; 
    multi_accept on; 
} 
http { 
    sendfile on; 
    tcp_nopush on; 
    tcp_nodelay on; 
    keepalive_timeout 15; 
    keepalive_requests 100000; 
    types_hash_max_size 2048; 
    include /etc/nginx/mime.types; 
    default_type application/octet-stream; 
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE 
    ssl_prefer_server_ciphers on; 
    access_log /var/log/nginx/access.log; 
    error_log /var/log/nginx/error.log; 
    gzip on; 
    gzip_disable "msie6"; 
    include /etc/nginx/conf.d/*.conf; 
    include /etc/nginx/sites-enabled/*; 
} 

Ceci est notre configuration pour le serveur d'applications.

upstream ourserver { 
    server 127.0.0.1:9999; 
} 
server { 
    listen 80; 
    listen [::]:80 ipv6only=on; 
    return 301 https://$host$request_uri; 
} 
server { 
    listen 443 default_server; 
    listen [::]:443 default_server ipv6only=on; 
    server_name **DNS**; 
    ssl on; 
    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; 
    ssl_ciphers HIGH:!aNULL:!MD5; 
    ssl_certificate /etc/ssl/certs/ssl-bundle.crt; 
    ssl_certificate_key /etc/ssl/private/my.key; 
    client_max_body_size 10m; 
    client_body_buffer_size 128k; 
    client_header_buffer_size 1k; 
    keepalive_timeout 15s; 
    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;"; 
    location /secure/ { 
     proxy_pass http://ourserver; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
     proxy_read_timeout 86400; 
    } 
    location/{ 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header Host $http_host; 
     proxy_redirect off; 
     proxy_pass http://ourserver; 
     proxy_read_timeout 120s; 
     proxy_connect_timeout 120s; 
    } 
} 

Toute aide est grandement appréciée.

Répondre

0

Mon on_message avait un appel de blocage qui prend entre 20ms et 200ms en raison d'un appel DB. Ce délai se propage aux événements restants, ce qui a finalement conduit à des abandons de socket par les clients.