# HAProxy Proxying

As Strapi does not handle SSL directly and hosting a Node.js service on the "edge" network is not a secure solution it is recommended that you use some sort of proxy application such as Nginx, Apache, HAProxy, Traefik, or others. In the following examples you will find some sample configurations for HAProxy, naturally these configs may not suit all environments and you will likely need to adjust them to fit your needs.

# Configuration

In the following examples are acting as an "SSL termination" proxy, meaning that HAProxy is only accepting the requests on SSL and proxying to other backend services such as Strapi or other web servers. HAProxy cannot serve static content and as such it is usually used to handle multi-server deployments in a failover or load-balance situation. The following examples are based around everything existing on the same server, but could easily be tweaked for multi-server deployments.

# Strapi server

In order to take full advantage of a proxied Strapi application, Strapi should be configured so it's aware of the upstream proxy. Like with the following configurations there are 3 matching examples. Additional information can be found in the server configuration and admin configuration documentations.

✏️ NOTE

These examples use the default API Prefix of /api. This can be changed without the need to directly modify the Nginx configuration (see the API prefix documentation).

✋ CAUTION

If the url key is changed in the ./config/admin.js or ./config/server.js files, the admin panel needs to be rebuilt with yarn build or npm run build.

# HAProxy

The following examples are either proxying all requests directly to Strapi or are splitting requests between Strapi and some other backend web server such as Nginx, Apache, or others.

The following are 2 example HAProxy configurations:

  • Sub-domain based such as api.example.com
  • subfolder based with both the API and Admin on the same subfolder such as example.com/test/api and example.com/test/admin

✏️ Subfolder split is not supported

Using subfolder split (eg: https://example.com/dashboard and https://example.com/api) are not supported nor recommended with Strapi. It's advised that you either use subdomains (eg: https://api.example.com) or subfolder unified (eg: https://example.com/strapi/dashboard and https://example.com/strapi/api).

✋ HAProxy SSL Support

If you are not familiar with HAProxy and using SSL certificates on the bind directive, you should combine your SSL cert, key, and any CA files into a single .pem package and use it's path in the bind directive. For more information see HAProxy's bind documentation (opens new window). Most Let's Encrypt clients do not generate a file like this so you may need custom "after issue" scripts to do this for you.

# Redirecting landing page to admin panel

If you do not wish to have the default landing page mounted on / you can create a custom ./public/index.html using the following sample code to automatically redirect to your admin panel.

✋ CAUTION

This sample configuration expects that the admin panel is accessible on /admin. If you used one of the above configurations to change this to /dashboard you will also need to adjust this sample configuration.

Path — ./public/index.html

<html>
  <head>
    <meta http-equiv="refresh" content="0;URL='/admin'" />
  </head>
</html>
1
2
3
4
5