Câu trả lời này thêm vào câu trả lời của @Andrew Moss về cách định cấu hình chính xác VirtualHost
để hoạt động với socket.io 1.0! Hãy bỏ qua phần về CentOS!
Nếu bạn bị kẹt trên CentOS 6, đây là cách thực hiện:
- Tải xuống nguồn backported cho
mod_proxy_wstunnel
mô-đun tại đây (sao chép Gist hoặc tải xuống các tệp riêng lẻ)
- Cài đặt mọi thứ cần thiết để xây dựng:
yum install make gcc httpd-devel
- Thiết lập môi trường RPM Build (về cơ bản là người dùng không có đặc quyền và một số thư mục)
- Sao chép
.c
-file vào SOURCES
thư mục con của môi trường và .spec
-file vào SPECS
thư mục con.
- Chạy
rpmbuild -ba mod_proxy_wstunnel.spec
- Gói hiện nằm trong
SRPMS
thư mục con
- Cài đặt gói:
rpm -i /path/to/package.rpm
- Lợi nhuận
Điều này cũng sẽ tự động tải mô-đun trong Apache, vì vậy bạn chỉ cần khởi động lại nó với service httpd restart
.
Việc thiết lập VirtualHost
để thực sự phục vụ máy chủ Socket.io và tập lệnh máy khách (theo mặc định có sẵn bên dưới http://your.server/socket.io/socket.io.js
) phức tạp hơn một chút trên Apache 2.2, do có lỗi trong mod_proxy
mô-đun :
Cho quy tắc viết lại sau đây:
RewriteRule ^/ws(.*)$ ws://localhost:9000/ws [P]
mod_rewrite
coi đây là một filepath để nhật ký truy cập hiển thị:
[26/Sep/2013:09:46:07 -0400] "GET /ws://localhost:9000/ws HTTP/1.1" 400 317
Vì vậy, bạn không thể sử dụng ws
-protatio trong quy tắc viết lại , vì điều đó bên trong sẽ biến thành yêu cầu HTTP GET.
Có một cách giải quyết mặc dù:
<VirtualHost *:80>
ServerName your.server
# Proxy socket.io Websocket
RewriteEngine On
# socket.io 1.0+ starts all connections with an HTTP polling request
RewriteCond %{QUERY_STRING} transport=polling [NC]
RewriteRule /(.*) http://localhost:8081/$1 [P]
ProxyRequests Off
# Explicitly send the request for the client-script to HTTP:
ProxyPass /socket.io/socket.io.js http://localhost:8081/socket.io/socket.io.js
ProxyPassReverse /socket.io/socket.io.js http://localhost:8081/socket.io/socket.io.js
# Anything else goes to the WebSocket protocol:
ProxyPass /socket.io/ ws://localhost:8081/socket.io/
ProxyPassReverse /socket.io/ ws://localhost:8081/socket.io/
# Any additional stuff (the actual site) comes here
ProxyPass / http://localhost:8081/
ProxyPassReverse / http://localhost:8081/
</VirtualHost>
Điều này đảm bảo rằng tất cả mọi thứ gửi đến /socket.io
đi vào ws://
-protocol, ngoại trừ yêu cầu dài phiếu (mà là một cơ chế dự phòng khi WebSockets không có sẵn) và yêu cầu cho khách hàng thư viện.
./buildconfig
để tạo tập tin cấu hình. Và có một vài phụ thuộc mà nó bảo tôi cài đặt.