.. _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
  
    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/"
  
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
  
    ServerName www.archiv-xy.cz
    
    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]
    
  
Od verze Apache HTTP 2.4.61 je nutné navíc povolit rewrite pro parametry za otazníkem.
.. code-block:: apache
  
    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]
  
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;
    }