Skip to content

Using Flood behind a web server (Nginx)

flying-sausages edited this page Jan 26, 2021 · 8 revisions

In order to use Flood behind a reverse proxy:

  • Forward /api requests to Flood's NodeJS backend server.
  • Serve static assets.
  • Redirects client routes (/overview, /register and /login) to index.html.

Alternatively you may let Flood's server handle all requests. However, if you want better performance, serve static assets from the web server.

This tutorial assumes that Flood is running at 127.0.0.1:3000. This is configurable by --host and --port arguments.

This tutorial assumes that Flood is installed in /usr/lib/node_modules/flood and as such assets are located in:

/usr/lib/node_modules/flood/dist/assets

Serve from the root

For example:

subdomain.your-domain.com

Your nginx config should contain these rules:

server_name subdomain.your-domain.com;
root /usr/lib/node_modules/flood/dist/assets;

location /api {
  proxy_pass http://127.0.0.1:3000;
}

location / {
  try_files $uri /index.html;
}

Serve from a nested route

Often people want to expose multiple web applications with a single nginx config. This is possible using Flood's --baseuri option.

For example, when --baseuri=/flood, you may access Flood at:

your-domain.com/flood/
                     

Flood frontend uses relative path so there has to be a slash at the end when you access the nested route.

You may configure your web server to redirect users from /flood to /flood/. It is not covered by this tutorial.

Your nginx config should contain these rules:

server_name your-domain.com;

location /flood/api {
  proxy_pass http://127.0.0.1:3000;
}

location /flood/ {
  alias /usr/lib/node_modules/flood/dist/assets/;
  try_files $uri /flood/index.html;
}

Disable caching for API endpoints

API requests should not be cached. You can disable caching in nginx by adding these lines in your location /api block:

proxy_buffering off;
proxy_cache off;

Compression

Static assets of Flood are large. Compression can save bandwidth and make the page loading faster.

Note that to enable compression, you must serve static assets from web server.

gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript image/x-icon;

You may also use other compression methods such as brotli.

HTTP Basic Auth

You may opt to use HTTP basic auth. To avoid double authentication, use auth=none option of Flood and pre-configure client connection settings.

https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication

satisfy any;
allow 192.168.1.0/24; # Allows unauthenticated access from local network
deny all;

auth_basic "Private Server";
auth_basic_user_file /etc/nginx/.passwords.list;