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;
}