4.6. Provoz za reverzní proxy
V produkčním provozu běží Elza za webovým serverem v roli reverzní proxy
(Apache HTTPD nebo NGINX). Webový server zajišťuje HTTPS a předává
požadavky na HTTP port aplikace Elza (ve výchozím nastavení 8080, viz
server.port v kapitole Konfigurace aplikace).
Proxy musí předávat i spojení WebSocket: klient přijímá oznámení přes
cestu /stomp. Bez toho se aplikace sice načte, ale uživatelé nevidí
změny provedené ostatními ani průběh úloh na pozadí.
4.6.2. Adresa klienta
Za proxy vidí Elza všechny požadavky jako přicházející od proxy. Aby se do
bezpečnostního auditního logu (srcip, viz Autentizace a zabezpečení)
zapisovala adresa skutečného klienta, povolte přeposílané hlavičky:
elza:
security:
acceptForwardedHeaders: true
Elza pak převezme adresu klienta z první hodnoty X-Forwarded-For. Proxy
proto musí tuto hlavičku adresou klienta nahradit, nikoli k ní adresu
připojit; jinak by klient mohl poslat vlastní X-Forwarded-For a zvolit
si, jaká adresa se zapíše.
NGINX:
proxy_set_header X-Forwarded-For $remote_addr;(jako v příkladu výše), nikoli$proxy_add_x_forwarded_for.Apache HTTPD:
mod_proxyadresu klienta k hlavičce připojuje sám, proto nejprve odstraňte hlavičku poslanou klientem:RequestHeader unset X-Forwarded-For early
Pokud je za sebou více proxy (např. load balancer před webovým serverem), musí hlavičku nastavit první z nich a ostatní ji předat beze změny.
4.6.3. Elza pod cestou
Elzu lze provozovat i pod cestou stávajícího webu, například
https://www.archiv.example/elza. Proxy pak předává původní host,
protokol a prefix cesty v hlavičkách X-Forwarded-* a Elza je musí mít
povoleno přijímat:
elza:
security:
acceptForwardedHeaders: true
Varování
acceptForwardedHeaders zapínejte, jen pokud je Elza dostupná
výhradně přes proxy. Jinak by klient mohl poslat podvržené hlavičky
X-Forwarded-* přímo.
Příklad pro Apache HTTPD s přesměrováním na vnitřní server
10.0.0.27:
<VirtualHost *:443>
ServerName www.archiv.example
<Location "/elza">
RequestHeader set X-Forwarded-Prefix "/elza"
RequestHeader set X-Forwarded-Host "www.archiv.example"
RequestHeader set X-Forwarded-Proto "https"
</Location>
RewriteEngine On
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule "^/elza/(.*)$" "ws://10.0.0.27:8080/$1" [P,UnsafeAllow3F]
RewriteRule "^/elza/(.*)$" "http://10.0.0.27:8080/$1" [P,UnsafeAllow3F]
</VirtualHost>
Příznak UnsafeAllow3F je od Apache HTTPD 2.4.61 nutný pro URL se
zakódovaným otazníkem; ve starších verzích jej vynechte.