.. 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

   <VirtualHost *:443>
     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/"
   </VirtualHost>

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

   <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.
