Skip to content

Klaus behind a reverse proxy

fin444 edited this page Oct 26, 2023 · 7 revisions

If you have a reverse proxy in front of the actual klaus instance, the easiest way to set it up is to use the WSGI application obtained by the make_app function (see Quickstart).

If the proxy functions as a SSL/TLS termination proxy (i.e. HTTPS is provided between the browser and reverse proxy but HTTP is used between the reverse proxy and klaus), you'll have to add the X-Scheme header.

Apache example

This assumes you want to mount klaus at http://code.publichost.com/code/. If you don't use a prefix, you can omit the X-Script-Name header.

<Location /code>
   ProxyPass http://localhost:1337
   ProxyPassReverse http://code.publichost.com/
   RequestHeader set X-Script-Name /code
</Location>

For the TLS/SSL termination proxy setup, add the X-Scheme header:

<Location /code>
   …
   RequestHeader set X-Scheme https
</Location>

Nginx example

This assumes you want to mount klaus at http://code.publichost.com/code/. If you don't use a prefix, you can omit the X-Script-Name header.

location ^~ /code/ {
    proxy_pass http://localhost:8080/;
    proxy_pass_request_headers on;
    proxy_set_header Host code.publichost.com;
    proxy_set_header X-Script-Name /code;
}

Nginx + uWSGI example

Reference: uWSGI documentation

This assumes you want to mount klaus under the /code prefix.

location /code/ {
  include uwsgi_params;
  uwsgi_pass unix:/path/to/uwsgi.sock;
}

Use uwsgi ... --manage-script-name --mount /code=/path/to/klaus.wsgi or add the mount and manage-script-name options to your uWSGI configuration file.

If you want to use klaus at the root of your web server, you can simply run uwsgi ... --wsgi-file /path/to/klaus.wsgi.

Caddy Example

This assumes you want to mount klaus under the /code/ prefix, and use HTTPS.

handle_path /code/* {
  reverse_proxy localhost:8080 {
    header_up X-Script-Name /code
    header_up X-Forwarded-Proto https
  }
}