Mam :
Apache
(v2.4) na porcie 80 mojego serwera dlawww.domain1.com
, z włączonymi mod_proxy i mod_proxy_wstunnelnode.js + socket.io
na porcie 3001 tego samego serwera.
Dostęp www.domain2.com
(przez port 80) przekierowuje do 2. dzięki opisanej tu metodzie . Ustawiłem to w konfiguracji Apache:
<VirtualHost *:80>
ServerName www.domain2.com
ProxyPass / http://localhost:3001/
ProxyPassReverse / http://localhost:3001/
ProxyPass / ws://localhost:3001/
ProxyPassReverse / ws://localhost:3001/
</VirtualHost>
Działa na wszystko, z wyjątkiem części websocket: ws://...
nie są przesyłane tak, jak powinno, przez proxy.
Kiedy wchodzę na tę stronę www.domain2.com
, mam:
Impossible to connect ws://www.domain2.com/socket.io/?EIO=3&transport=websocket&sid=n30rqg9AEqZIk5c9AABN.
Pytanie: Jak sprawić, by serwer proxy Apache był również używany przez WebSockets?
RewriteCond %{QUERY_STRING} transport=websocket [NC]
nie działa poprawnie. Sugeruję użycieRewriteCond %{HTTP:Upgrade} =websocket [NC]
zamiast tego.Zamiast filtrować według adresu URL, możesz również filtrować według nagłówka HTTP. Ta konfiguracja będzie działać dla wszystkich aplikacji internetowych, które używają websockets, również jeśli nie używają one socket.io:
źródło
Może się przyda. Po prostu wszystkie zapytania wysyłane przez WS do węzła
źródło
Od wersji Socket.IO 1.0 (maj 2014) wszystkie połączenia rozpoczynają się od żądania odpytywania HTTP (więcej informacji tutaj ). Oznacza to, że oprócz przekazywania ruchu WebSocket musisz przekazywać dalej wszelkie
transport=polling
żądania HTTP.Poniższe rozwiązanie powinno poprawnie przekierować cały ruch związany z gniazdami, bez przekierowywania żadnego innego ruchu.
Włącz następujące mody Apache2:
Użyj tych ustawień w swoim pliku * .conf (np
/etc/apache2/sites-available/mysite.com.conf
.). Dodałem komentarze, aby wyjaśnić każdy element:Dodałem dodatkową sekcję dotyczącą routingu
/node
ruchu, która jest przydatna, zobacz tutaj, aby uzyskać więcej informacji.źródło
RewriteRule /path/(.*)
Z pomocą tych odpowiedzi w końcu otrzymałem zwrotne proxy dla Node-RED działające na Raspberry Pi z działającymi Ubuntu Mate i Apache2, używając tej konfiguracji witryny Apache2:
Musiałem też włączyć takie moduły:
źródło
U mnie działa po dodaniu tylko jednej linii w httpd.conf jak poniżej (pogrubiona linia).
Wersja Apache to 2.4.6 na CentOS.
źródło
Moja konfiguracja:
/api/ws
Jak wspomniano powyżej @Basj, upewnij się, że proxy a2enmod i ws_tunnel są włączone.
Oto zrzut ekranu pliku konfiguracyjnego Apache, który rozwiązał mój problem:
Odpowiednia część jako tekst:
Mam nadzieję, że to pomoże.
źródło
Wykonałem następujące czynności dla aplikacji Spring z zawartością statyczną, resztową i websocket.
Apache jest używany jako serwer proxy i punkt końcowy SSL dla następujących identyfikatorów URI:
Konfiguracja Apache
Używam tej samej konfiguracji vHost do konfiguracji SSL, nie muszę zmieniać niczego związanego z proxy.
Konfiguracja sprężynowa
źródło
Użyj tego łącza, aby uzyskać doskonałe rozwiązanie dla ws https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html
Musisz po prostu wykonać poniższy krok ..
Iść do
/etc/apache2/mods-available
Krok 1
Włącz
mode proxy_wstunnel.load
za pomocą poniższego poleceniaKrok 2
Iść do
/etc/apache2/sites-available
i dodaj poniższą linię w pliku .conf wewnątrz wirtualnego hosta
Uwaga: 8080 oznacza twój port z uruchomionym tomcat, ponieważ chcemy połączyć się
ws
tam, gdzie nasz plik War umieszczony w tomcat i tomcat służy do apachews
. Dziękuję CiMoja konfiguracja
źródło
Do transportu „odpytywania”.
Strona Apache:
Strona klienta:
źródło
Oprócz głównej odpowiedzi: jeśli masz więcej niż jedną usługę na tym samym serwerze, który korzysta z gniazd sieciowych, możesz to zrobić, aby je oddzielić, używając niestandardowej ścieżki (*):
Serwer węzłów:
Klient HTML:
Konfiguracja Apache:
(*) Uwaga: użycie wartości domyślnej
RewriteCond %{REQUEST_URI} ^/socket.io
nie byłoby specyficzne dla witryny internetowej, a żądania gniazd sieci Web byłyby mieszane między różnymi witrynami!źródło
DO ZROBIENIA:
Mieć zainstalowany Apache 2.4 (nie działa z 2.2)
a2enmod proxy
ia2enmod proxy_wstunnel.load
Zrób to w konfiguracji Apache,
po prostu dodaj dwie linie w swoim pliku, gdzie 8080 to twój uruchomiony port Tomcat
źródło