Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
it:server:http-reverzni-proxy-server [2023/01/16 10:33] – Petr Nosek | it:server:http-reverzni-proxy-server [2025/04/10 16:42] (aktuální) – Petr Nosek | ||
---|---|---|---|
Řádek 13: | Řádek 13: | ||
<code bash> | <code bash> | ||
- | sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests rewrite | + | sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests rewrite |
sudo systemctl restart apache2 | sudo systemctl restart apache2 | ||
</ | </ | ||
Řádek 75: | Řádek 75: | ||
- | ==== problém ==== | + | ==== problém |
Problém byl, že u Node REDu apache nefungoval jak má. Po chvíli Node RED vypisoval hlášení: "Lost connection.." | Problém byl, že u Node REDu apache nefungoval jak má. Po chvíli Node RED vypisoval hlášení: "Lost connection.." | ||
Řádek 114: | Řádek 114: | ||
</ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ==== úpravy pro Nextcloudpi ==== | ||
+ | |||
+ | Nejprve jsem do konfiguračního souboru Apache zadal tyto řádky: | ||
+ | |||
+ | < | ||
+ | RewriteRule ^/ | ||
+ | RewriteRule ^/ | ||
+ | </ | ||
+ | |||
+ | Poté je podle [[https:// | ||
+ | |||
+ | <code php> | ||
+ | ' | ||
+ | array ( | ||
+ | 11 => ' | ||
+ | 12 => ':: | ||
+ | 13 => ' | ||
+ | 14 => ' | ||
+ | 15 => ' | ||
+ | ), | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | </ | ||
+ | |||
+ | |||
+ | **Bohužel jsem zjistil, že konfigurace nebyla dostačující.** Webové rozhraní fungovalo, ale když jsem se snažil použít klienta na automatickou synchronizaci, | ||
+ | |||
+ | |||
+ | ==== PiHole ==== | ||
+ | |||
+ | Pro konfiguraci Pi Hole bylo nutné do Apache zadat tyto řádky: | ||
+ | |||
+ | < | ||
+ | ProxyPass /pihole/ http:// | ||
+ | ProxyPassReverse /pihole/ http:// | ||
+ | </ | ||
+ | |||
+ | |||
+ | Stejně služba nefungovala jak má, protože se mi nevypisovala uložená data. Pak jsem narazil na tuto diskusi s řešením: https:// | ||
+ | |||
+ | Řešení popisuje, že je potřeba přizpůsobit nastavení lighttpd v docker kontejneru. V docker konterjneru přidat do souboru /// | ||
+ | |||
+ | < | ||
+ | setenv.add-environment = ( " | ||
+ | </ | ||
+ | |||
+ | Řešení bude funkční pouze do chvíle aktualizaci kontejneru. Proto jsem do docker compose souboru přidal tento řádek: | ||
+ | |||
+ | < | ||
+ | volumes: | ||
+ | - / | ||
+ | </ | ||
+ | |||
+ | Nejprve ale bylo potřeba na disku vytvořit soubor / | ||
+ | |||
+ | |||
+ | Pak jsem ale našel lepší řešení v [[https:// | ||
+ | |||
+ | <code yaml> | ||
+ | pihole: | ||
+ | container_name: | ||
+ | image: pihole/ | ||
+ | ports: | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | environment: | ||
+ | - TZ=Etc/UTC | ||
+ | - WEBPASSWORD=supertajneheslo | ||
+ | - INTERFACE=eth0 | ||
+ | - VIRTUAL_HOST=192.168.1.20 | ||
+ | volumes: | ||
+ | - ./ | ||
+ | - ./ | ||
+ | #- ./ | ||
+ | dns: | ||
+ | - 127.0.0.1 | ||
+ | - 1.1.1.1 | ||
+ | cap_add: | ||
+ | - NET_ADMIN | ||
+ | restart: unless-stopped | ||
+ | |||
+ | </ | ||
+ | |||
+ | V závěru jsem objevil ještě jeden problém. Pi Hole po přihlášení přesměrovává na IP_ADRESA_SERVER/ | ||
+ | |||
+ | < | ||
+ | RewriteRule ^(.*)/ | ||
+ | ProxyPass /admin/ http:// | ||
+ | ProxyPassReverse /admin/ http:// | ||
+ | </ | ||
+ | |||
+ | |||
+ | Setkal jsem se s problémem, když jsem pihole nemohl nastartovat, | ||
+ | |||
+ | < | ||
+ | dnsproxy=no | ||
+ | </ | ||
+ | |||
+ | A pak restartovat connection managera: | ||
+ | |||
+ | <code bash> | ||
+ | systemctl restart connman | ||
+ | </ | ||
+ | |||
+ | |||
+ | Další tipy k samotnému Pi Hole: | ||
+ | |||
+ | {{youtube> | ||
+ | |||
+ | A tady odkaz na servery s blocklisty: | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | |||
+ | ==== Redmine ==== | ||
+ | |||
+ | Potřeboval jsem nasadit Redmine pomocí Dockeru. Databáze MySQL běží na hostitelském počítači také v Dockeru, ale naslouchá pouze na `127.0.0.1`. Aby se Redmine mohl připojit k databázi, použil jsem nástroj `socat`, který přeposílá porty. Apache běží také jako kontejner a slouží jako reverzní proxy. | ||
+ | |||
+ | === Konfigurace Redmine kontejneru === | ||
+ | |||
+ | Vytvořil jsem následující `docker-compose.yml`: | ||
+ | |||
+ | <code yaml> | ||
+ | redmine: | ||
+ | container_name: | ||
+ | image: redmine | ||
+ | restart: always | ||
+ | ports: | ||
+ | - ' | ||
+ | environment: | ||
+ | REDMINE_DB_MYSQL: | ||
+ | REDMINE_DB_PORT: | ||
+ | REDMINE_DB_USERNAME: | ||
+ | REDMINE_DB_PASSWORD: | ||
+ | REDMINE_DB_DATABASE: | ||
+ | REDMINE_SECRET_KEY_BASE: | ||
+ | volumes: | ||
+ | - ' | ||
+ | </ | ||
+ | |||
+ | Redmine se připojuje na IP `172.17.0.1`, | ||
+ | |||
+ | === Socat pro přesměrování TCP portu === | ||
+ | |||
+ | Použil jsem službu `systemd`, která při startu systému spustí `socat`: | ||
+ | |||
+ | <code ini> | ||
+ | / | ||
+ | |||
+ | [Unit] | ||
+ | Description=MySQL TCP forwarder for Docker | ||
+ | After=network-online.target docker.service | ||
+ | Wants=network-online.target docker.service | ||
+ | |||
+ | [Service] | ||
+ | ExecStartPre=/ | ||
+ | ExecStart=/ | ||
+ | Restart=on-failure | ||
+ | RestartSec=3 | ||
+ | |||
+ | [Install] | ||
+ | WantedBy=multi-user.target | ||
+ | </ | ||
+ | |||
+ | Tento skript vytvoří forward: všechny požadavky na `172.17.0.1: | ||
+ | |||
+ | * `socat` slouží jako jednoduchý TCP forwarder. | ||
+ | * Využívá `fork`, takže zvládne více spojení najednou. | ||
+ | * Před spuštěním hlavního příkazu čeká, než bude možné IP `172.17.0.1` bindnout. | ||
+ | |||
+ | === MySQL uživatel a přístup === | ||
+ | |||
+ | Při vytváření uživatele v MySQL jsem musel explicitně uvést IP adresu `127.0.0.1`. Pokud bych použil `localhost`, | ||
+ | |||
+ | Například: | ||
+ | |||
+ | <code sql> | ||
+ | CREATE USER ' | ||
+ | GRANT ALL PRIVILEGES ON db-name.* TO ' | ||
+ | </ | ||
+ | |||
+ | === Nastavení firewallu === | ||
+ | |||
+ | Redmine běží v jiné Docker síti a má vlastní IP adresu. V mém případě to byla `172.19.0.2`. Aby se kontejner mohl připojit na port 33060, bylo třeba povolit tento provoz ve firewallu: | ||
+ | |||
+ | <code bash> | ||
+ | ufw allow from 172.19.0.2/ | ||
+ | </ | ||
+ | |||
+ | IP adresu kontejneru lze zjistit příkazem: | ||
+ | |||
+ | <code bash> | ||
+ | docker inspect -f ' | ||
+ | </ | ||
+ | |||
+ | Tímto jsem zajistil funkční připojení Redmine k databázi běžící na hostitelském systému. | ||
+ | |||
+ | |||
+ | === Nastavení Apache === | ||
+ | |||
+ | Jelikož Redmine běží v Dockeru na portu `127.0.0.1: | ||
+ | |||
+ | Použil jsem následující konfiguraci virtuálních hostů v Apache: | ||
+ | |||
+ | <code apache> | ||
+ | < | ||
+ | ServerName redmine.example.com | ||
+ | ServerAlias redmine.example.com | ||
+ | |||
+ | ServerAdmin info@example.com | ||
+ | Redirect permanent "/" | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | < | ||
+ | |||
+ | ServerName redmine.example.com | ||
+ | ServerAlias redmine.example.com | ||
+ | ServerAdmin info@example.com | ||
+ | |||
+ | Protocols h2 http/1.1 | ||
+ | |||
+ | # Reverse proxy konfigurace | ||
+ | ProxyPreserveHost On | ||
+ | ProxyPass / http:// | ||
+ | ProxyPassReverse / http:// | ||
+ | |||
+ | # SSL konfigurace | ||
+ | SSLEngine on | ||
+ | |||
+ | SSLCertificateFile | ||
+ | SSLCertificateKeyFile | ||
+ | SSLCertificateChainFile / | ||
+ | SSLCACertificateFile | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Tato konfigurace: | ||
+ | |||
+ | * Přesměrovává HTTP požadavky na HTTPS. | ||
+ | * Používá SSL certifikáty vystavené nástrojem [dehydrated](https:// | ||
+ | * Pomocí `ProxyPass` a `ProxyPassReverse` přesměrovává provoz na Redmine běžící na `localhost: | ||
+ | * `ProxyPreserveHost On` zajišťuje, | ||
+ | |||
+ | Tímto způsobem lze přistupovat k Redmine z prohlížeče pomocí domény `https:// | ||
+ | |||
+ | |||
Řádek 216: | Řádek 473: | ||
</ | </ | ||
- | |||
- | ===== limit, který jsem nevyřešil ===== | ||
- | |||
- | Pokud máme doménu, tak je to všechno v pořádku. Každou službu můžeme zařadit pod subdoménu. V mém případě tedy Node RED běží pod doménou garmin.cn a portainer pod portainer.garmin.cn. | ||
- | |||
- | Problém ovšem nastává, když jsem v lokální síti a nevyužívám lokální [[it: | ||
- | |||
- | Jedna služba přes reverzní proxy obsadí IP adresu: 192.168.1.20 a už není možné pracovat se složkama alá 192.168.1.20/ |