Cześć, napisałem prostą apkę działającą jak czat, która wykorzystuje WebSocket i na localhost wszystko działa jak należy, jednak gdy próbuję się połączyć zdalnie z VPS to dostaję błąd w przeglądarce Firefox can’t establish a connection to the server at ws://<Adres IP>/chat-websocket/012/tjikvfl3/websocket.. Zgaduję że muszę zmienić plik konfiguracyjny na serwerze jednak pomimo wielu prób nic nie przynosi pożądanego efektu.
Konfiguracja java:
@Configuration
@EnableWebSocketMessageBroker
public class MessageBrokerConfig implements WebSocketMessageBrokerConfigurer {
@Value("localhost")
private String host;
@Value("61613")
private int port;
@Value("/chat-websocket")
private String endpoint;
@Value("/app")
private String destinationPrefix;
@Value("/topic")
private String stompBrokerRelay;
@Value("login")
private String login;
@Value("haslo")
private String password;
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint(endpoint).withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableStompBrokerRelay(stompBrokerRelay).
setRelayHost(host).
setRelayPort(port)
.setSystemLogin(login)
.setSystemPasscode(password)
.setClientLogin(login)
.setClientPasscode(password);
registry.setApplicationDestinationPrefixes(destinationPrefix);
}
}
Kod js do łączenia się z serwerem za pomocą protokołu WebSocket:
function connect() {
let socket = new SockJS('/chat-websocket');
stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
//różne funkcje do subskrypcji endpointów
});
}
Na serwerze wykorzystałem komendy:
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_wstunnel
Plik konfiguracyjny /etc/apache2/sites-enabled/000-default.conf (tutaj próbowałem różnych konfiguracji):
1)
<VirtualHost *:80>
Rewrite Engine On
RewriteCond %{QUEST_STRING} transport=polling [NC]
RewriteRule /(.*) http://localhost:8080/$1 [P]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://localhost:8080/$1 [P,L]
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
<VirtualHost>
<VirtualHost *:80>
Rewrite Engine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /chat-websocket/(.*) ws://localhost:8080/chat-websocket/$1 [P,L]
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
<VirtualHost>
<VirtualHost *:80>
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
<Location "/chat-websocket">
ProxyPass "ws://localhost:8080/chat-websocket"
<Location>
<VirtualHost>
Dodam że wcześniej dostawałem również w logach konsoli uruchomionego jara błąd: ERROR o.s.w.s.s.s.DefaultHandshakeHandler - Handshake failed due to invalid Upgrade header: null. Po zmianie pliku konfiguracyjnego tego błędu już nie ma, ale ciągle jest błąd w przeglądarce:
Lokalnie połączenie działa jak powinno:
- screenshot-20200501110308.png (18 KB) - ściągnięć: 57
- screenshot-20200501111549.png (129 KB) - ściągnięć: 88