2012-04-30 2 views
9

Sto riscontrando un problema nella connessione tramite WSS al mio server. Ho seguito il seguente articolo per configurare nginx con websocket: http://www.letseehere.com/reverse-proxy-web-socketsNginx config per WSS

Quanto segue è la mia configurazione di nginx che serve un gioco! applicazione:

#user nobody; 
worker_processes 1; 

error_log logs/error.log; 
#error_log logs/error.log notice; 
#error_log logs/error.log info; 

#pid  logs/nginx.pid; 

events { 
    worker_connections 1024; 
} 

tcp { 

    upstream websockets { 
     ## Play! WS location 
     server 127.0.0.1:9000; 
    }  

    server { 
     listen 80; 
     listen 8000; 
     server_name socket.domain.com; 

     tcp_nodelay on; 
     proxy_pass websockets; 
     proxy_send_timeout 300; 
    } 

    # virtual hosting 
    #include /usr/local/nginx/vhosts/*; 
} 

http { 

    server { 
     listen 443 ssl; 
     server_name socket.artoo.in; 

     ssl_certificate  /usr/local/nginx/key/socket.domain.com.crt; 
     ssl_certificate_key /usr/local/nginx/key/socket.domain.com.key; 

     ssl_session_timeout 5m; 

     ssl_protocols SSLv2 SSLv3 TLSv1; 
     ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; 
     ssl_prefer_server_ciphers on; 

     location/{ 
      proxy_pass http://127.0.0.1:9000; 
     } 
    } 
} 

Mentre il server è accessibile su http://socket.domain.com, https://socket.domain.com, WS: //socket.domain.com ma non WSS: //socket.domain.com

risposta

3

ho risolto, almeno per il breve termine usando stunnel (facendo riferimento a questo articolo: http://www.darkcoding.net/software/proxy-socket-io-and-nginx-on-the-same-port-over-ssl/).

Stunnel può convertire HTTPS in HTTP e da tale token WSS in WS. Nginx servito l'applicazione presa in esecuzione sulla porta 9000 come al solito:

/etc/stunnel/stunnel.conf

[https] 
accept = 443 
connect = 80 
TIMEOUTclose = 0 

/usr/local/nginx/conf/nginx.conf

#user nobody; 
worker_processes 1; 

error_log logs/error.log; 
#error_log logs/error.log notice; 
#error_log logs/error.log info; 

#pid  logs/nginx.pid; 

events { 
    worker_connections 1024; 
} 

tcp { 

    upstream websockets { 
     ## Play! WS location 
     server 127.0.0.1:9000; 
     check interval=3000 rise=2 fall=5 timeout=1000; 
    }  

    server { 
     listen 80; 
     listen 8000; 
     server_name socket.artoo.in; 

     tcp_nodelay on; 
     proxy_pass websockets; 
     proxy_send_timeout 300; 

    } 

    # virtual hosting 
    #include /usr/local/nginx/vhosts/*; 
} 

#http { 
# 
# server { 
#  listen 443 ssl; 
#  server_name socket.artoo.in; 
# 
#  ssl_certificate  /usr/local/nginx/key/socket.domain.com.crt; 
#  ssl_certificate_key /usr/local/nginx/key/socket.domain.com.key; 
# 
#  ssl_session_timeout 5m; 
# 
#  ssl_protocols SSLv2 SSLv3 TLSv1; 
#  ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; 
#  ssl_prefer_server_ciphers on; 
# 
#  location/{ 
#   proxy_pass http://127.0.0.1:9000; 
#  } 
# } 
#} 

Ora l'unica cosa di cui mi devo preoccupare è come aumentare il timeout per i websocket su nginx, la connessione sembra spezzarsi ogni 75 secondi (default per nginx).

+0

Come risolvere questo problema di timeout? Qualcosa di più elegante che impostare un timeout su un numero enorme? –