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


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

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


40
2017-07-13 22:28


मूल




जवाब:


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

मैंने कंक्रीट निकाला Ubuntu पर 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

23
2018-06-08 18:57



जब मैंने आपकी मार्गदर्शिका का पालन किया, तो एक ऐसा कदम था जो आपके पास नहीं था। एपीआर चेकआउट करने के बाद मुझे दौड़ना पड़ा ./buildconfig कॉन्फ़िगरेशन फ़ाइल बनाने के लिए। और कुछ निर्भरताएं थीं जिन्होंने मुझे स्थापित करने के लिए कहा था। - notbad.jpeg
यह wss पर ग्लासफ़िश 4 के साथ हुक अप करता है: (एसएसएल) - Archimedes Trajano
@ notbad.jpeg: आप शायद मतलब है ./buildconf (नहीं ./buildconfig) :-) - Erik Forsberg
बस मेरी प्रतिक्रिया ... यह उबंटू 12.04 से अपाचे 2.2.22-1ubuntu1.10 में स्थापित और लोड हो गया, लेकिन यह अंत में मेरे लिए काम नहीं करता था। प्रॉक्सी "अपग्रेड" हेडर को हटा रहा था (स्रोत कोड कहता है "आरएफसी 2616 13.5.1 कहता है कि हमें इन हेडर को स्ट्रिप करना चाहिए"), जो कि एक हेडर है, सर्वर सिर्फ एक हॉप नहीं, इसलिए यह मेरे लिए काम नहीं करता है, और मैंने इसे बदले में एक iptables डीएनएटी नियम के साथ बदल दिया है। - Peter


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

यदि आपको अपाचे के माध्यम से websockets चलाना है, तो कोशिश करें mod_pywebsocket। मैंने कोशिश की है, और यह काम करता है।

यहां कुछ विकल्प दिए गए हैं जिन्हें मैं पसंद करता हूं:


11
2017-07-23 18:01





ऐसा लगता है कि डिस्कनेक्ट प्लगइन और कुछ अतिरिक्त कोड के संयोजन के साथ यह अब संभव है:

http://blog.alex.org.uk/2012/02/16/using-apache-websocket-to-proxy-tcp-connection/ 


6
2018-03-23 14:51





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

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


3
2017-10-21 20:57



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


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


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

  1. के लिए backported स्रोत डाउनलोड करें mod_proxy_wstunnel मॉड्यूल यहाँ (या तो गिस्ट क्लोन करें या फ़ाइलों को व्यक्तिगत रूप से डाउनलोड करें)
  2. निर्माण करने के लिए आवश्यक सब कुछ स्थापित करें: yum install make gcc httpd-devel
  3. एक सेटअप करें आरपीएम पर्यावरण बनाएँ (मूल रूप से एक अप्रतिबंधित उपयोगकर्ता और कुछ निर्देशिका)
  4. कॉपी करें .cमें फिसल गया SOURCES पर्यावरण के उपफोल्डर और .specमें फिसल गया 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://-प्रोटोकॉल, लंबे मतदान के लिए अनुरोध को छोड़कर (जो वेबबॉकेट उपलब्ध नहीं होने पर फ़ॉलबैक तंत्र है) और क्लाइंट-लाइब्रेरी के लिए अनुरोध।


1
2018-05-03 13:42