2012-04-30 46 views
9

Tôi gặp sự cố khi kết nối qua WSS với máy chủ của mình. Tôi đã theo dõi bài viết sau để thiết lập nginx với websockets: http://www.letseehere.com/reverse-proxy-web-socketsCấu hình Nginx cho WSS

Sau đây là cấu hình nginx của tôi phục vụ Play! ứng dụng:

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

Trong khi các máy chủ có thể truy cập vào http://socket.domain.com, https://socket.domain.com, ws: //socket.domain.com nhưng không WSS: //socket.domain.com

Trả lời

3

Tôi đã ít nhất giải quyết nó cho ngắn hạn bằng cách sử dụng stunnel (tham khảo bài viết này: http://www.darkcoding.net/software/proxy-socket-io-and-nginx-on-the-same-port-over-ssl/).

Stunnel có thể chuyển đổi HTTPS thành HTTP và bằng mã thông báo đó WSS thành WS. Nginx phục vụ các ứng dụng ổ cắm chạy trên cổng 9000 như thường lệ:

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

Bây giờ điều duy nhất tôi cần phải lo lắng là làm thế nào để tăng thời gian chờ cho websockets trên nginx, kết nối dường như được phá vỡ mỗi 75 giây (mặc định cho nginx).

+0

Làm thế nào để giải quyết vấn đề thời gian chờ này? Bất cứ điều gì thanh lịch hơn là thiết lập thời gian chờ cho một số lượng lớn? –

3

tôi đã có thể đặt cùng một hướng dẫn viên tại Q & Một định dạng đó cho bạn thấy làm thế nào để làm tất cả những điều này với các module nginx, dễ dàng hơn nhiều;)

NGINX to reverse proxy websockets AND enable SSL (wss://)?

Bạn sẽ cần phải xây dựng lại Nginx và hãy làm theo các cấu hình trong câu hỏi trên.

+0

Miền đang ngoại tuyến. –

+0

Đó là stackoverflow.com, không chắc tôi có hiểu vấn đề không? – crockpotveggies

Các vấn đề liên quan