अपाचे 2 को प्रॉक्सीवॉयरकेट पर कॉन्फ़िगर करना?


40

WebSocket प्रोटोकॉल HTTP प्रोटोकॉल का एक विस्तार है। हालाँकि, Apache2 के प्रॉक्सी मॉड्यूल को इसके बारे में पता नहीं लगता है, और महत्वपूर्ण हेडर को फेंक देता है, कॉल को एक मानक HTTP कॉल में परिवर्तित करता है।

क्या Apache2 बनाने का कोई तरीका है या तो (1) समझे WebSocket या (2) बस आँख बंद करके जो कुछ भी हो जाता है?

जवाबों:


23

अब Apache ट्रंक में एक मॉड्यूल है जिसे mod_proxy_wstunnel कहा जाता है जो mod_proxy (ProxyPass / ProxyPassReverse) को WebSocket ट्रैफ़िक से गुजरने की अनुमति देता है। किसी ने Apache 2.4 / 2.2 को बैक-पोर्टिंग mod_proxy_wstunnel के बारे में एक ब्लॉग पोस्ट लिखा और ऐसा करने के लिए एक पैच प्रदान किया।

मैंने उबंटू पर mod_proxy_wstunnel (उबंटू सर्वर 11.10 और अपाचे 2.2.20 के साथ परीक्षण) स्थापित करने के लिए ठोस निर्देश दिए और उन्हें अपने ब्लॉग पर पोस्ट किया। मैंने उन्हें नीचे कॉपी किया है:

# Check apache version (should be 2.2.20 as of writing, if not adjust the next step)
dpkg -s apache2

# Checkout apache source
svn checkout http://svn.apache.org/repos/asf/httpd/httpd/tags/2.2.20/ httpd-2.2.20

# Get patch and apply it
wget http://cafarelli.fr/gentoo/apache-2.2.24-wstunnel.patch
cd httpd-2.2.20
patch -p1 < ../apache-2.2.24-wstunnel.patch

# Build Apache 
svn co http://svn.apache.org/repos/asf/apr/apr/branches/1.4.x srclib/apr
svn co http://svn.apache.org/repos/asf/apr/apr-util/branches/1.3.x srclib/apr-util
./buildconf
./configure --enable-proxy=shared --enable-proxy_wstunnel=shared
make

# Copy the module and recompiled mod_proxy (for new symbols) to the ubuntu apache installation and update the permissions to match the other modules
sudo cp modules/proxy/.libs/mod_proxy{_wstunnel,}.so /usr/lib/apache2/modules/
sudo chmod 644 /usr/lib/apache2/modules/mod_proxy{_wstunnel,}.so
echo -e "# Depends: proxy\nLoadModule proxy_wstunnel_module /usr/lib/apache2/modules/mod_proxy_wstunnel.so" | sudo tee -a /etc/apache2/mods-available/proxy_wstunnel.load

# Enable the module (also make any configuration changes you need)
sudo a2enmod proxy_wstunnel
sudo service apache2 restart

2
जब मैंने आपके गाइड का अनुसरण किया, तो एक कदम था जो आपके पास नहीं था। एप्रन चेकआउट करने के बाद मुझे ./buildconfigकॉन्फ़िगर फाइल बनाने के लिए दौड़ना पड़ा । और कुछ निर्भरताएं थीं जो मुझे स्थापित करने के लिए कहती थीं।
notbad.jpeg

यह ग्लासफिश 4 ​​ओवर वेस के साथ हुक करता है: (एसएसएल)
आर्किमिडीज ट्रेजानो

1
@ notbad.jpeg: आप शायद मतलब ./buildconf (./buildconfig नहीं) :-)
एरिक Forsberg

1
बस मेरी प्रतिक्रिया ... यह Ubuntu 12.04 से Apache 2.2.22-1ubuntu1.10 में स्थापित और लोड है, लेकिन यह अंत में मेरे लिए काम नहीं किया। प्रॉक्सी "अपग्रेड" हेडर को हटा रहा था (स्रोत कोड कहता है "RFC2616 13.5.1 का कहना है कि हमें इन हेडर को स्ट्रिप करना चाहिए"), जो एक हेडर है जो सर्वर को उम्मीद करता है, न कि केवल एक हॉप, इसलिए यह मेरे लिए काम नहीं करता है, और मैंने इसकी जगह iptables DNAT नियम से ले लिया है।
पीटर

11

नहीं है इंगित करने के लिए कुछ भी नहीं है अपाचे httpd कभी भी जल्द ही उन्हें समर्थन करेंगे।

यदि आपको अपाचे के माध्यम से वेबस्कॉक चलाना है, तो mod_pywebsocket प्रयास करें । मैंने इसे आजमाया है, और यह काम करता है।

यहाँ कुछ विकल्प हैं जो मुझे पसंद हैं:



3

कृपया http://github.com/disconnect/apache-websocket पर एक नज़र डालें

Apache-websocket मॉड्यूल एक Apache 2.x सर्वर मॉड्यूल है जिसका उपयोग Apache 2.x सर्वर द्वारा WebSocket प्रोटोकॉल का उपयोग करके अनुरोधों को संसाधित करने के लिए किया जा सकता है।


मैंने उपरोक्त गीथूब परियोजना को देखा। यह प्रॉक्सी के रूप में कार्य नहीं करता है। उद्धरणThe module consists of a plugin architecture ...
गुत्थी

1

यह जोड़ने के लिए @Andrew मॉस 'के उत्तर के रूप में कैसे सही ढंग VirtualHostसे socket.io 1.0 के साथ काम करने के लिए कॉन्फ़िगर करने के लिए है! CentOS के बारे में भाग को छोड़ने के लिए स्वतंत्र महसूस करें!


यदि आप CentOS 6 पर अटक गए हैं, तो यह कैसे करना है:

  1. यहांmod_proxy_wstunnel मॉड्यूल के लिए बैकपोर्टेड स्रोत डाउनलोड करें (या तो जियोस्ट क्लोन करें या व्यक्तिगत रूप से फाइलें डाउनलोड करें)
  2. बनाने के लिए आवश्यक सब कुछ स्थापित करें: yum install make gcc httpd-devel
  3. सेटअप एक RPM बिल्ड पर्यावरण (मूल रूप से एक आम उपयोगकर्ता और कुछ निर्देशिका)
  4. कॉपी .cमें -file SOURCESपर्यावरण के सबफ़ोल्डर और .specमें -file SPECSसबफ़ोल्डर।
  5. रन rpmbuild -ba mod_proxy_wstunnel.spec
  6. पैकेज अब SRPMSसबफ़ोल्डर में है
  7. पैकेज स्थापित करें: rpm -i /path/to/package.rpm
  8. फायदा

यह स्वचालित रूप से अपाचे में मॉड्यूल को लोड करेगा, इसलिए आपको बस इसके साथ पुनरारंभ करना होगा service httpd restart


की स्थापना एक VirtualHostवास्तव में सेवा करने के लिए Socket.io सर्वर और ग्राहक-स्क्रिप्ट (जो डिफ़ॉल्ट उपलब्ध के तहत कर रहा है http://your.server/socket.io/socket.io.js) में थोड़ा और अधिक एक की वजह से, अपाचे 2.2 पर जटिल है में बग mod_proxyमॉड्यूल :

निम्नलिखित लिखित नियम को देखते हुए:

RewriteRule    ^/ws(.*)$  ws://localhost:9000/ws  [P]

mod_rewrite यह एक फ़ाइलपथ मानता है ताकि प्रवेश लॉग दिखाता है:

[26/Sep/2013:09:46:07 -0400] "GET /ws://localhost:9000/ws HTTP/1.1" 400 317

इसलिए, आप पुनःप्रयोग-नियम में -प्रोटोकॉल का उपयोग नहींws कर सकते , क्योंकि यह आंतरिक रूप से 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 में जाती हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.