---
title: Reverse Proxy
description: Setting up a reverse proxy for hyperglass
---

import { Cards, Callout } from "nextra/components";

[Caddy](https://caddyserver.com) is recommended, but any reverse proxy ([NGINX](https://www.nginx.com), [Apache2](https://httpd.apache.org)) will work.

## Caddy

<Cards>
    <Cards.Card
        title="Install Caddy"
        target="_blank"
        href="https://caddyserver.com/docs/install"
        arrow
    />
</Cards>

```shell copy
cp /opt/hyperglass/.samples/Caddyfile /etc/caddy/Caddyfile
```

Change the `lg.example.com` and `person@example.com` values to match your hyperglass FQDN and email address (the email address is for automatic SSL certificate generation via Let's Encrypt).

<Callout type="info">
    If you prefer to use other Let's Encrypt validation methods or your own SSL certificate, modify
    your `/etc/hyperglass/Caddyfile` in accordance with the [Caddy
    docs](https://caddyserver.com/docs/caddyfile-tutorial).
</Callout>

Restart the Caddy service: `systemctl restart caddy{:shell}`

## NGINX

```shell copy
cp /opt/hyperglass/.samples/hyperglass.nginx /etc/nginx/sites-available/hyperglass
ln -s /etc/nginx/sites-available/hyperglass /etc/nginx/sites-enabled/hyperglass
```

Change the `lg.example.com` value to match your hyperglass FQDN.

Change the `<path to cert chain>` and `<path to key>` values to match the path to your certificate and private key files.

```nginx {4,9,10,17,19} title="NGINX"
server {
  listen 80;
  listen [::]:80;
  server_name lg.example.com;
  return 301 https://$host$request_uri;
}
server {
  listen [::]:443 ssl ipv6only=on;
  listen 443 ssl;
  ssl_certificate <path to cert chain>
  ssl_certificate_key <path to key>

  client_max_body_size 2M;

  server_name lg.example.com;

  root /etc/hyperglass/static;

  location / {
    try_files $uri $uri/ /ui /ui/$uri =404;
    index /ui/index.html;
  }

  location /openapi.json {
      try_files $uri @proxy_to_app;
  }

  location /custom/ {
      try_files $uri $uri/ /custom;
  }

  location /images/ {
      try_files $uri $uri/ /images;
  }

  location /api {
      try_files $uri @proxy_to_app;
  }

  location @proxy_to_app {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    # for ipv6
    proxy_pass http://[::1]:8001;
    # for ipv4
    # proxy_pass http://127.0.0.1:8001;
  }

}
```
