O-tree is a web-based software that uses websockets. I have it working on http://server.example:81 and I want it to be in https://server.example. It almost works with

<Location />
    ProxyPreserveHost On
    RequestHeader set X-Forwarded-Proto "https"
    ProxyPass "ws://localhost:81/"
    ProxyPass "http://localhost:81/"

However I got an error about GET wss://server.example/create_demo_session. Hence I suppose I should somehow say "no https for ws, please". If I let out X-Forwarded-Proto-part, then the front page gives links to http://server.example instead of https://server.example.

1 Answer 1


You can differentiate between WSS and HTTPS requests and do different proxying for them. This is the rule I used when I built a music player with a Raspberry Pi:

RewriteEngine on
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://localhost:81/$1 [P,L]
RewriteRule /(.*) http://localhost:81/$1 [P,L]

The RewriteCond tests if the request is wss: and forwards those requests over ws:, other requests use the http: proxy rule.

  • I accepted this, as this is almost perfect now. For some reason I had to put this inside <Directory> block, but that is something related to our base settings in RHEL servers. I must use ...myserver/demo as address to get this working; otherwise it shows GET /index.html HTTP/1.1" 404 Not Found in the Otree output. Jan 2, 2023 at 19:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.