Setup behind a reverse proxy which also serves the frontend

These examples assume you have an instance of the backend running on your server listening on port 3456. If you’ve changed this setting, you need to update the server configurations accordingly.

NGINX

Below are two example configurations which you can put in your nginx.conf:

You may need to adjust server_name and root accordingly.

gzip  on;
gzip_disable "msie6";

gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml;

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /path/to/vikunja/static/frontend/files;
        try_files $uri $uri/ /;
        index  index.html index.htm;
    }
    
    location /api/ {
        proxy_pass http://localhost:3456;
    }
}

without gzip

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /path/to/vikunja/static/frontend/files;
        try_files $uri $uri/ /;
        index  index.html index.htm;
    }
    
    location /api/ {
        proxy_pass http://localhost:3456;
    }
}

Apache

Put the following config in cat /etc/apache2/sites-available/vikunja.conf:

<VirtualHost *:80>
    ServerName localhost
   
    <Proxy *>
      Order Deny,Allow
      Allow from all
    </Proxy>
    ProxyPass /api http://localhost:3456/api
    ProxyPassReverse /api http://localhost:3456/api

    DocumentRoot /var/www/html
    RewriteEngine On
    RewriteRule ^\/?(config\.json|favicon\.ico|css|fonts|images|img|js|api) - [L]
    RewriteRule ^(.*)$ /index.html [QSA,L]
</VirtualHost>

Note: The apache modules proxy and proxy_http must be enabled for this.

For more details see the frontend apache configuration.