Hi all,
I'm running a NodeJS server on Ubuntu 18.04 behind an apache proxy.
For anyone looking for the config for an apache proxy look no further :)
After a lot of time spent searching for a solution, this is the solution I found.
*Note:
You'll need the following apache modules enabled:
- ssl
- proxy
- proxy_http
- proxy_html
- proxy_wstunnel
(or just run 'sudo a2enmod ssl proxy proxy_http proxy_html proxy_wstunnel')
<VirtualHost *:80>
ServerName servername.xyz
#redirect all requests received from port 80 to the HTTPS variant (force ssl)
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>
<VirtualHost *:443>
ServerName servername.xyz
#enable SSL
SSLEngine On
SSLCertificateFile /PATH/TO/CERT/FILE (note: i'm using the fullchain.pem file which is generated using LetsEncrypt's certbot cli)
SSLCertificateKeyFile /PATH/TO/PRIVATE/KEY/FILE
#setup the proxy to forward websocket requests properly (note: this proxy automatically converts the secure websocket (wss)
#to a normal websocket and vice versa, so there's no need to change the colyseus library or the server for that matter)
RewriteEngine On
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC,OR]
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
RewriteRule .* ws://127.0.0.1:APP-PORT-HERE%{REQUEST_URI} [P,QSA,L]
#setup the proxy to forward all https requests to http backend (also automatic conversion from https to http and vice versa)
ProxyPass "/" "http://127.0.0.1:APP-PORT-HERE/"
ProxyPassReverse "/" "http://127.0.0.1:APP-PORT-HERE/"
</VirtualHost>
I hope this post can be of any help :)