ส่วนเสริมนี้สำหรับ@Andrew Moss 'เป็นวิธีการกำหนดค่าการVirtualHost
ทำงานกับ socket.io 1.0 อย่างถูกต้อง! อย่าลังเลที่จะข้ามส่วนเกี่ยวกับ CentOS!
หากคุณติดอยู่บน CentOS 6 นี่คือวิธีการ:
- ดาวน์โหลดแหล่งข้อมูลย้อนกลับสำหรับ
mod_proxy_wstunnel
โมดูลที่นี่ (คัดลอก Gist หรือดาวน์โหลดไฟล์ทีละรายการ)
- ติดตั้งทุกสิ่งที่จำเป็นในการสร้าง:
yum install make gcc httpd-devel
- ตั้งค่าสภาพแวดล้อม RPM Build (โดยทั่วไปคือผู้ใช้ที่ไม่มีสิทธิ์และบางไดเร็กทอรี)
- คัดลอก
.c
-file ลงในSOURCES
โฟลเดอร์ย่อยของสภาพแวดล้อมและ.spec
-file ลงในSPECS
โฟลเดอร์ย่อย
- วิ่ง
rpmbuild -ba mod_proxy_wstunnel.spec
- แพ็คเกจนี้อยู่ใน
SRPMS
โฟลเดอร์ย่อย
- ติดตั้งแพ็คเกจ:
rpm -i /path/to/package.rpm
- กำไร
นอกจากนี้ยังจะโหลดโดยอัตโนมัติโมดูลใน Apache service httpd restart
ดังนั้นคุณก็ต้องเริ่มต้นใหม่กับ
การตั้งค่า a VirtualHost
เพื่อให้บริการเซิร์ฟเวอร์ Socket.io และไคลเอนต์สคริปต์ (ซึ่งโดยค่าเริ่มต้นพร้อมใช้งานhttp://your.server/socket.io/socket.io.js
) จะซับซ้อนกว่าเล็กน้อยใน Apache 2.2 เนื่องจากBug ในmod_proxy
โมดูล :
รับกฎการเขียนซ้ำต่อไปนี้:
RewriteRule ^/ws(.*)$ ws://localhost:9000/ws [P]
mod_rewrite
ปฏิบัติต่อ filepath นี้เพื่อให้บันทึกการเข้าถึงแสดง:
[26/Sep/2013:09:46:07 -0400] "GET /ws://localhost:9000/ws HTTP/1.1" 400 317
ดังนั้นคุณไม่สามารถใช้ws
-protocol ในกฎการเขียนซ้ำได้เนื่องจากจะเปลี่ยนเป็นการร้องขอ HTTP GET ภายใน
มีวิธีแก้ปัญหาคือ:
<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>
สิ่งนี้ทำให้แน่ใจได้ว่าทุกสิ่งที่ส่ง/socket.io
ไปยังws://
-protocol ยกเว้นคำร้องขอการทำโพลแบบยาว (ซึ่งเป็นกลไกทางเลือกเมื่อ WebSockets ไม่พร้อมใช้งาน) และคำขอสำหรับไคลเอนต์ - ไลบรารี
./buildconfig
เพื่อสร้างไฟล์กำหนดค่า และมีการอ้างอิงสองสามอย่างที่บอกให้ฉันติดตั้ง