.. Zdroj: elza/docs/admin-guide/source/06-reverse-proxy.rst, elza e87a93d6d1
.. _Admin_InstallRevProxy:
============================
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 :doc:`04-konfigurace`).
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í.
Elza na vlastním doménovém jménu
================================
Příklad pro ``https://elza.archiv.example``.
Apache HTTPD
------------
Vyžaduje moduly ``mod_proxy``, ``mod_proxy_http`` a
``mod_proxy_wstunnel``.
.. code-block:: apache
ServerName elza.archiv.example
# SSLEngine, certifikáty ...
ProxyPreserveHost On
ProxyRequests Off
ProxyTimeout 60
ProxyPass "/stomp" "ws://aplikacni-server.interni:8080/stomp"
ProxyPassReverse "/stomp" "ws://aplikacni-server.interni:8080/stomp"
ProxyPass "/" "http://aplikacni-server.interni:8080/"
ProxyPassReverse "/" "http://aplikacni-server.interni:8080/"
NGINX
-----
.. code-block:: nginx
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name elza.archiv.example;
ssl_certificate /etc/cert/server-chain.pem;
ssl_certificate_key /etc/cert/server-key.pem;
client_max_body_size 100m;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
``client_max_body_size`` musí povolit největší nahrávání povolené Elzou
(``elza.upload.max_request_size``, ve výchozím nastavení 100 MB).
.. _Admin_InstallRevProxy_Sub:
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:
.. code-block:: yaml
elza:
security:
acceptForwardedHeaders: true
.. warning::
``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``:
.. code-block:: apache
ServerName www.archiv.example
RequestHeader set X-Forwarded-Prefix "/elza"
RequestHeader set X-Forwarded-Host "www.archiv.example"
RequestHeader set X-Forwarded-Proto "https"
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]
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.