Tôi đang cố gắng định cấu hình Apache 2.4 để ủy quyền kết nối websocket cho socket.io đến máy chủ websocket của node.js, sử dụng mod_proxy_wstunnel. Chúng tôi đã làm việc tốt với socket.io 0.9, nhưng với bản phát hành 1.0, họ đã thay đổi điểm cuối của socket thành tham số truy vấn và bây giờ tôi gặp sự cố khi định cấu hình apache bằng các hướng dẫn proxy chính xác.
Tất cả các yêu cầu đến /socket.io/?EIO=N&transport=websocket
(trong đó N là bất kỳ chữ số nào, thường là 2) cần được chuyển tiếp đến ws://localhost:8082/socket.io/
, nhưng tất cả các yêu cầu khác cần phải được chuyển tiếp đến http://localhost:8082/socket.io/
.
Tôi đã thử các biến thể của cả hai cấu hình sau:
ProxyPass /socket.io/?EIO=2&transport=websocket http://localhost:8082/socket.io/?EIO=2&transport=websocket
ProxyPassReverse /socket.io/?EIO=2&transport=websocket http://localhost:8082/socket.io/?EIO=2&transport=websocket
ProxyPass /socket.io/ http://localhost:8082/socket.io/
ProxyPassReverse /socket.io/ http://localhost:8082/socket.io/
.
RewriteRule /socket.io/?EIO=([0-9]+)&transport=websocket ws://localhost:8082/socket.io/ [QSA,P]
ProxyPass /socket.io/ http://localhost:8082/socket.io/
ProxyPassReverse /socket.io/ http://localhost:8082/socket.io/
Tôi đã tập hợp từ googling của mình rằng ProxyPass và Vị trí không thể nhắm mục tiêu chuỗi truy vấn, vậy có lựa chọn nào khác ở đây không? Các đường dẫn được mã hóa cứng vào socket.io, vì vậy, không thể thay đổi toàn bộ thư viện, tôi không thể thay đổi chúng.