2012-04-26 13 views
25

tôi muốn thay thế mô-đun nút-http-proxy của mình bằng mô-đun nginx proxy_pass. Có thể với phiên bản nginx phát hành mới, như tôi đã đọc, rằng nó hỗ trợ HTTP/1.1 ra khỏi hộp. Tôi thấy một số chủ đề đấu tranh với vấn đề đó, rằng websockets không được hỗ trợ bởi nginx.nginx 1.2.0 - socket.io - HTTP/1.1 - Kết nối websocket proxy

Trong trường hợp của tôi, tôi đang chạy một vài dự án nút trong nền và muốn định tuyến kết nối websocket của tôi từ cổng 80 đến 8000-8100, tùy thuộc vào miền. Có cách nào để làm proxy websocket/reverse proxy mà không sử dụng addon tcp_module không?

Tôi đã cố gắng thiết lập luồng ngược dòng trong nginx.conf với proxy_passing, nhưng nếu tôi cố kết nối với cổng 80 qua websocket, tôi sẽ gặp lỗi cổng 502.

Bất kỳ ai phải đối mặt với cùng một vấn đề? Có ai có ví dụ làm việc cho nginx + spcket.io, proxy trên cổng 80 không?

+0

Sử dụng tiện ích bổ sung đó là cách gốc. – Dayo

+0

Có, điều này là có thể. Để khắc phục sự cố, sẽ rất hữu ích nếu bạn đưa nginx.conf của mình vào. – nil

Trả lời

34

Không, điều này vẫn chưa thực hiện được; nginx 1.2 kết hợp các công cụ từ nhánh phát triển 1.1.x mà thực sự bao gồm proxy đảo ngược HTTP/1.1. Các kết nối Websocket được thiết lập bằng cách sử dụng tiêu đề "Nâng cấp" HTTP/1.1, nhưng thực tế là nginx hỗ trợ loại tiêu đề này không có nghĩa là nó hỗ trợ websockets (websockets là một giao thức khác, không phải HTTP). (Tôi cố gắng này bản thân mình bằng cách sử dụng chi nhánh 1.1.x (mà tôi tìm thấy là đủ ổn định cho mục đích của tôi) và nó không hoạt động mà không có sự tcp_module)

Websockets có thể sẽ được hỗ trợ trong 1.3.x (http://trac.nginx.org/nginx/roadmap) .

lựa chọn thay thế của bạn là:

  • tiếp tục sử dụng nút-http-proxy
  • sử dụng nginx mà không cần đun tcp; socket.io sẽ không sử dụng ổ cắm web nhưng một số thứ khác (ví dụ: bỏ phiếu dài)
  • nginx với mô-đun tcp: trong trường hợp này tôi nghĩ bạn cần một cổng bổ sung cho mô-đun này (không bao giờ tự mình thử)
  • đặt thứ khác vào phía trước như một proxy ngược: Tôi sử dụng HAProxy (hỗ trợ websockets) trước nginx và nút. Nginx bây giờ chỉ đơn giản là hành động như một fileserver tĩnh, không phải là một proxy. Varnish là một tùy chọn khác, nếu bạn muốn thêm bộ nhớ đệm.
+0

Thx để làm rõ Matthias. Đối với tôi, nginx hỗ trợ websocket proxy một cách tự nhiên nếu nó đi kèm với HTTP1/1 trên tàu. Tôi biết rằng giao thức HTTP không phải của nó, nhưng vẫn còn đường nối tôi cần phải làm một số bài tập về nhà :) – ayk

+0

Theo văn bản này, Nginx 1.3 đã được phát hành và hỗ trợ websockets. Đó là một cấu hình khá đơn giản mà tôi đã [viết về] (http://metacogni.tv/blog/2013/02/19/websockets-with-nginx-plus-ssl-also/) Hy vọng điều đó sẽ hữu ích. – Octaflop

0

Liên quan đến NginX với mô-đun TCP có một số sự cố mà tôi gặp phải. Nhưng một trong những khó khăn nhất là cố gắng chạy websockets của bạn với nginx trên cổng 80 trên EC2 dụ.

Tôi đã mô tả toàn bộ cấu hình here