ws protocol and apache mod_proxy_wstunnel configuration: error 500

10,930

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.

Share:
10,930

Related videos on Youtube

jack-y
Author by

jack-y

Updated on September 18, 2022

Comments

  • jack-y
    jack-y almost 2 years

    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?

  • jack-y
    jack-y about 8 years
    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 ;)
  • serverliving.com
    serverliving.com about 8 years
    ah ok. Did not notice that. But the error message says that the required module to process was not loaded
  • jack-y
    jack-y about 8 years
    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?
  • serverliving.com
    serverliving.com about 8 years
    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
  • jack-y
    jack-y about 8 years
    Thanks @serverliving! I'll try and tell you what it has given very soon.
  • adamteale
    adamteale over 7 years
    @jack-y did you ever resolve this? I have been trying to work this out now for nearly 2 weeks!
  • jack-y
    jack-y over 7 years
    @adamteale Unfortunately no. I spent a lot of time finding a solution, but without success. I moved on. Hope you will be luckier.
  • adamteale
    adamteale over 7 years
    I think I am halfway there (i've had some great help from the apache mailing list) - however I am now getting an error saying that the server is not responding with an Upgrade Header. I'll let you know when I get it solved