2012-04-30 81 views
9

Tengo un problema al conectar WSS a mi servidor. Seguí el siguiente artículo para configurar nginx con websockets: http://www.letseehere.com/reverse-proxy-web-socketsConfiguración de Nginx para WSS

¡La siguiente es mi configuración nginx que sirve para Play! aplicación:

#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; 
     } 
    } 
} 

Mientras que el servidor es accesible en http://socket.domain.com, https://socket.domain.com, ws: //socket.domain.com pero no WSS: //socket.domain.com

Respuesta

3

al menos lo he resuelto por el corto plazo mediante el uso de stunnel (refiriéndose a este artículo: http://www.darkcoding.net/software/proxy-socket-io-and-nginx-on-the-same-port-over-ssl/).

Stunnel puede convertir HTTPS a HTTP y con ese símbolo WSS a WS. Nginx sirvió a la aplicación de socket que se ejecuta en el puerto 9000 como de costumbre:

/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; 
#  } 
# } 
#} 

Ahora, de lo único que tengo que preocuparme es de cómo aumentar el tiempo de espera para websockets en nginx, la conexión parece estarse rompiendo cada 75 segundos (por defecto para nginx).

+0

¿Cómo solucionar este problema de tiempo de espera? ¿Algo más elegante que establecer el tiempo de espera en un gran número? –

Cuestiones relacionadas