# 4.6. Provoz pomocí reverzní proxy

Aplikace Elza je často provozována za reverzní proxy. Ta umožňuje její běh na zabezpečený běh na adrese archivu (například: https://elza.archiv-xy.cz, případně: https://www.archiv-xy.cz/elza). V rovině reverzní proxy lze využít Apache HTTPD nebo NGINX.

## 4.6.1. Provoz na jiném než kořenovém URL

Aplikaci je možné provozovat i na jiném než kořenovém URL, například: https://www.archiv-xy.cz/elza. V takovém případě je nutné pomocí reverzní proxy směrovat požadavky z webového serveru do aplikace Elza, více viz: Provoz pomocí reverzní proxy. Na straně Elza je nutné navíc povolit akceptaci hlaviček X-Forwarded-…. obsahujícími informace o původním URL. V yaml konfiguraci je nutné aktivovat volbu elza.security.acceptForwardedHeaders=true.

Příklad konfigurace:

    elza:
      .......
      security:
        acceptForwardedHeaders:true
      .......

## 4.6.2. Apache HTTPD

Příklad konfigurace pro https://elza.archiv-xy.cz

    <VirtualHost elza.archiv-xy.cz:443>
      ServerName elza.archiv-xy.cz
      ProxyPreserveHost On
      ProxyRequests Off

      ProxyTimeout 60

      ProxyPass "/stomp" "ws://vnitrni-server.archiv.cz:8080/stomp"
      ProxyPassReverse "/stomp" "wss://elza.archiv-xy.cz/stomp"

      ProxyPass "/" "http://vnitrni-server.archiv:8080/"
      ProxyPassReverse "/" "https://elza.archiv-xy.cz/"

    </VirtualHost>

Příklad konfigurace pro https://www.archiv-xy.cz/elza s využitím rewrite filtru a přesměrováním požadavku na vnitřní server `10.2.0.27`:

    <VirtualHost www.archiv-xy.cz:443>
      ServerName www.archiv-xy.cz

      <Location "/elza">

      RequestHeader set X-Forwarded-Prefix "/elza"
      RequestHeader set X-Forwarded-Host "www.archiv-xy.cz"
      RequestHeader set X-Forwarded-Proto "https"

      RewriteEngine On

      RewriteCond %{HTTP:Upgrade} websocket               [NC]
      RewriteRule   "/elza/(.*)$"  "ws://10.2.0.27:8080/$1" [P]
      RewriteRule   "/elza/(.*)$"  "http://10.2.0.27:8080/$1" [P]

      </Location>

    </VirtualHost>

Od verze Apache HTTP 2.4.61 je nutné navíc povolit rewrite pro parametry za otazníkem.

    <VirtualHost www.archiv-xy.cz:443>
      ServerName www.archiv-xy.cz

      RewriteEngine On

      RewriteCond %{HTTP:Upgrade} websocket               [NC]
      RewriteRule   "/elza/(.*)$"  "ws://10.2.0.27:8080/$1" [P,UnsafeAllow3F]
      RewriteRule   "/elza/(.*)$"  "http://10.2.0.27:8080/$1" [P,UnsafeAllow3F]
    </VirtualHost>

## 4.6.3. NGINX

Příklad konfigurace pro https://elza.archiv-xy.cz

    server {
      listen 443 ssl;
      listen [::]:443 ssl;

      server_name elza.archiv-xy.cz;

      access_log /var/log/nginx/reverse-access.log;
      error_log /var/log/nginx/reverse-error.log;

      location / {
        # redirect all HTTP traffic to localhost:8080
        proxy_pass http://localhost:8080;

        # WebSocket support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
      }

      ssl_certificate /etc/cert/servercertwithchain.pem;
      ssl_certificate_key /etc/cert/serverkeydec.pem;
    }