.. _Admin_InstallRevProxy:

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


.. _Admin_InstallRevProxy_Sub:

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: :ref:`Admin_InstallRevProxy`. 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:

.. code-block:: yaml

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



Apache HTTPD
================

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

.. code-block:: apache

  <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 :token:`10.2.0.27`:

.. code-block:: apache

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

.. code-block:: apache

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


NGINX
==========


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

.. code-block:: nginx
    
    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;
    }
    


