Provoz webové aplikace za proxy

10. května 2022

Přibývá webaplikací provozovaných za proxy. Konfigurace takových aplikací je složitější. A obzvlášť nutné je to udělat správně, pokud aplikace zpracovává z HTTP hlaviček nějaké informace, které potřebuje ke správnému provozu. A tak je potřeba mít správně nakonfigurovaný proxy server a také aplikaci, protože bez toho aplikace nemusí fungovat nebo bude fungovat špatně nebo tam může být potencionální bezpečnostní problém. Jak takový proxy server a ukázkovou aplikaci nakonfigurovat vám popíši v tomto článku.

K čemu slouží proxy server

Proxy server je software, který překládá a případně upravuje požadavky mezi klientem a serverem s aplikací. Odděluje tak vnější a vnitřní síť. Proxy server může být realizován i jako samostatné zařízením.

V případě webových aplikací je to webová proxy. Konkrétně se budeme bavit o reverzní proxy.

Proxy server může zajišťovat specializovaná aplikace jako je HAProxy, Varnish, Treafik a Squid. Nebo jako reverzní proxy jde nakonfigurovat web server Apache či Nginx.

Reverzní proxy server se používá dneska (rok 2022) často proto, že díky omezí dostupných veřejných IPv4 adres je jedna IPv4 adresa směřována na server, kde běží proxy a ta pak přeposílá požadavky na jednotlivé servery ve vnitřní síti, které mají privátní IP adresy. Také bývá na proxy ukončováno HTTPS spojení. Více v článku zabezpečené HTTP.
HAProxy je používána často k tomu že umí balancovat provoz a omezit výpadky při upgradech serverů a deploy(nasazení) nových verzí aplikací.
Před rokem 2000 se používala webová proxy jako cache, ale to dávalo smysl jenom do doby statického webu.
V korporátech se proxy používá na podrobné zkoumaní provozu - toho co uživatelé navštěvují .

Nastavení proxy serveru

Reverzní proxy server musí být v první řadě nastaven tak, aby přijímal danou komunikaci pro danou doménu. Následně se nastavuje, kam se má daný provoz směrovat a jak se má případně komunikace upravit.

Nginx

Ukázka nastavení proxy pro web server Nginx:

server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name www.example.com;

        location / {
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Forwarded-Port  $server_port;
                proxy_set_header X-Forwarded-Host  $host;
                proxy_pass http://IP-aplikace:80;
        }
}        

Apache

Ukázka nastavení web serveru Apache jako reverzní proxy:

        ServerName example.com
        ServerAlias www.example.com
        ProxyPreserveHost On
        ProxyRequests On
        #ProxyErrorOverride On
        ProxyPass / http://192.168.100.93/
        ProxyPassReverse / http://192.168.100.93/
        
        RequestHeader set X-Forwarded-Port "443"
        RequestHeader set X-Forwarded-Proto "https"

Nastavení aplikace

Nette

Pokud používáte pro vývoj webových aplikací PHP framework Nette, je potřeba doplnit konfigurační neon soubor o následují nastaveni:

http:
	proxy: IP-proxy/IP-rozsah-proxy
Místo IP-proxy/IP-rozsah-proxy doplňte IP proxy případně IP rozsah vaší lokální sítě, kde provozujete infrastrukturu.

Wordpress

Může se stát, že i wordpress provozujete za proxy. Měl jsem tu čest s nějakým starým wordpressem a problém jsem vyřešil následovně. Do souboru wp-config.php jsem doplnil:

if (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
        $_SERVER['HTTPS'] = 'on';
}

Obdobně to lze řešit i v jakékoli jiné staré PHP aplikaci. Zajímavé pro vás bude i video jak provozovat staré PHP aplikace.

Video návod

Informatice o tom jak proxy funguje a jak nastavit aplikaci v Nette může shlédnou i jako video:

PDF prezentace k této přednášce jsou na mém webu s nabídkou IT služeb.

Zdroje

Zdroje kde se můžete dozvědět více podrobností:

Články na podobné téma

Migrace mail schránek
Docker multistage build
Zálohování dat zapnutím počítače
Podman
Import Windows do virtualizace Proxmox
Docker a PHP mail
Virtualizace Proxmox
Docker a Cron
Lenovo ThinkPad X1 Carbon: zprovoznění LTE modemu EM7544
Yocto Project: Build vlastního operačního sytému pro embedded zařízení
Příprava linuxového serveru pro běh webové aplikace v jazyce Python
Jak řešit špatný výkon sdílených souborů u Dockeru
Jak začít správně používat Docker
Instalace Linuxu na dedikovaný server HPE ProLiant DL320e
Jak provést zátěžový test webové aplikace
Proč používat filesystém JFS
Jak bootovat z 4TB disku s GTP pomocí UEFI
Jak nainstalovat operační systém Magei Linux bez DVD mechaniky
Souborový systém Btrfs
Raspberry PI
Jak zprovoznit vzdálené přehrávání přes síť na televizi s DLNA
Upgrade Mandriva Linuxu za běhu
Poznámky ke GNU/Linux
WINE - spouštíme programy pro Windous pod Linuxem
Operační systém GNU/Linux

Odběr novinek

Pokud máte zájem dostávat příležitostně na email novinky.
Můžete se vyplněním emailu registrovat k odběru novinek.


+