7

I got an error 500 when trying to access to ws://localhost:8080/ via my Apache2 server. This server runs OpenSuse Leap 42.1 and Apache 2.4.16.

These Apache2 modules are enabled: mod_proxy, mod_proxy_http, mod_proxy_wstunnel.

When the request is called from the local network, everything works fine. URL example: http://<myhost-ip-address>/api/ws/<some-url>. It returns status 101 and the response: Upgrade: websocket. It's OK.

The same kind of request from external network fails. URL example: ws://www.mysite.com/api/ws/<some-url>. It returns error 500.

The Apache access log contains: GET /api/ws/<some-url> HTTP/1.1" 500 ...

The Apache error log contains: [proxy:warn] AH01144: No protocol handler was valid for the URL /api/ws/<some-url>. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

My httpd.conf:

<VirtualHost *:80>
ServerName mysite.com
ServerAlias mysite.com
# Redirection for ws protocol
ProxyPreserveHost On
ProxyVia full
ProxyRequests OffHere
RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/api/ws/(.*)           [NC]
RewriteCond %{QUERY_STRING} transport=websocket     [NC]
RewriteRule /(.*)           ws://localhost:8080/$1  [P,L]
# Proxy pass
ProxyPass           /api/ws/            ws://localhost:8080/api/ws/
ProxyPassReverse    /api/ws/            ws://localhost:8080/api/ws/
# DocumentRoot
DocumentRoot /srv/www/vhosts/mysite.com
<Directory "/srv/www/vhosts/mysite.com">
    Options Indexes SymLinksIfOwnerMatch
    AllowOverride None
    ...
</Directory>
# URL as parameter
AllowEncodedSlashes NoDecode

I followed these previous answers (thank to that): websockets , node.js , socket-io , but with no luck.

Something must be wrong in my configuration. Any ideas?

1 Answer 1

3

Looks like you are missing mod_proxy_wstunnel module which is required for Websockets support.

It should be enabled like below in your httpd.conf

LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

Install the module & then it should work fine.

9
  • 1
    As I said, these Apache2 modules are enabled: mod_proxy, mod_proxy_http, mod_proxy_wstunnel. So mod_proxy_wstunnel has been enabled. That's why I don't understand ;)
    – jack-y
    Jun 9, 2016 at 9:32
  • ah ok. Did not notice that. But the error message says that the required module to process was not loaded Jun 9, 2016 at 9:41
  • Are you trying to access it as example.com/api/ws/<some-url> or ws://www.example.com/api/ws/<some-url> ?. I believe you will need to use http Jun 9, 2016 at 9:44
  • May be you're right. I access it as ws://www.example.com/api/ws/<some-url>. It is requested by the company. Is there a way to do it?
    – jack-y
    Jun 9, 2016 at 9:56
  • Not sure if there are such implementations available for running apache over ws:// . In normal scenario, you will access the ws server via http. May be you can try github.com/google/pywebsocket Jun 9, 2016 at 10:42

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .