Instead of using xpra's builtin proxy
server, the apache http
server can be configured as a single point of entry, on a single
port.
Just like xpra's proxy, the apache proxy can provide multiple sessions,
potentially on multiple remote backend servers.
This works well with both the html5 client and the
regular xpra client with ws:// and wss://
URLs.
cat > /etc/httpd/conf.modules.d/20-proxy.conf << EOF
<Location "/xpra1">
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
RewriteRule .* ws://localhost:20001/%{REQUEST_URI} [P]
ProxyPass ws://localhost:20001
ProxyPassReverse ws://localhost:20001
</Location>
<Location "/xpra2">
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
RewriteRule .* ws://localhost:20002/%{REQUEST_URI} [P]
ProxyPass ws://localhost:20002
ProxyPassReverse ws://localhost:20002
</Location>
EOF
Start the xpra servers defined in the apache configuration above:
xpra seamless --bind-tcp=0.0.0.0:20001 --start=xterm
xpra seamless --bind-tcp=0.0.0.0:20002 --start=xterm
(beware: authentication is turned off for simplicity)
Then you can simply open your browser at these locations
(/xpra1 and /xpra2 in the example config):
xdg-open http://localhost/xpra1/
Or using the regular command line client using a websocket connection:
xpra attach ws://localhost/xpra1/
xpra attach ws://localhost/xpra2/