↩️️ Dostupnost webu
Případ
Prohlížeč po zadání odkazu na doménu zobrazí stránku úplně jinou nebo jako nedostupnou.
Příčiny
- chybné záznamy „A“ a „AAAA“ IP adres v DNS
- změny v DNS záznamech se ještě nepropsaly do DNS serverů
- závada na některém ze serverů v dotazovaném řetězci
Získání odpovědi z DNS
Příkazem dig se zobrazí odpověď DNS serveru pro danou doménu dle zvoleného typu záznamu:
| Typ DNS záznamu | Popis |
| A (default) | 👉 IPv4 adresa serveru |
| AAAA | 👉 IPv6 adresa serveru |
| MX | 👉 poštovní server (e-mail) |
| NS | 👉 autoritativní nameservery domény |
| TXT | 👉 textové řetězce (SPF, DKIM, verifikační klíče…) |
Zobrazení IPv4 adres:
💻 dig nazev.domeny.cz
💻 dig A nazev.domeny.cz
Zpbrazení IPv6 adres:
💻 dig AAAA nazev.domeny.cz
Zobrazení IPv4 a IPv6 adres od konkrétního IPv4 DNS serveru:
💡DNS IPv4: 1.0.0.1 ; 1.1.1.1 ; 8.8.4.4 ; 8.8.8.8 ; …
💻 dig @1.1.1.1 nazev.domeny.cz
💻 dig @1.1.1.1 AAAA nazev.domeny.cz
Zobrazení IPv4 a IPv6 adres od konkrétního IPv6 DNS serveru:
💡DNS IPv6: 2606:4700:4700::1001 ; 2606:4700:4700::1111 ; 2001:4860:4860::8844 ; 2001:4860:4860::8888 ; …
☝️Musí být na počítači povolený a průchodný IPv6 protokol.
💻 dig @2606:4700:4700::1111 nazev.domeny.cz
💻 dig @2606:4700:4700::1111 AAAA nazev.domeny.cz
Test spojení s webem napřímo, bez použití DNS serveru
Použije se napřímo –resolve s hostname, portem a IP webu a tím se vyhne neaktuálním záznamům v DNS cache (na počítači, u poskytovatele i v prohlížeči).
💻 curl -Iv --resolve nazev.domeny.cz:443:123.123.123.123 https://nazev.domeny.cz
Klíčový výstup:
… * Connected to nazev.domeny.cz (123.123.123.123) port 443 … * SSL certificate verify ok. … < HTTP/2 200 … nebo < HTTP/2 302 …
☝️Pokud není HTTP/2 s kódem 200 nebo 302, zaměřit se na webserver, jeho Hostname, IP, Port a existenci stránky.
☝️Pokud není SSL certificate verify ok, zaměřit se na shodu hostname v url odkazu s hostname uvedeným v certifikátu.
☝️Pokud IP webu neodpoví, příkaz visí (ukončí se přes „Ctrl c“) , je potřeba se zaměřit na shodu IP adresy a hostname webu.
✅ Pokud je test napřímo celkově ok, ale internet prohlížeč nezobrazuje požadovaný web, problém je v nějaké DNS cache:
- v prohlížeči
- v operačním sytému
- v mobilu
- na routeru
- v hotspotu
- u poskytovatele internetu
- u mobilního operátora
Test spojení s webem přes aktuálně použitý DNS server
💻 curl -Iv https://nazev.domeny.cz
Klíčový výstup:
… * Connected to nazev.domeny.cz (123.123.123.123) port 443 … * SSL certificate verify ok. … < HTTP/2 200 … nebo < HTTP/2 302 …
✅ Pokud je test přes aktuální DNS ok, ale internet prohlížeč nezobrazuje požadovaný web, problém je v DNS cache prohlížeče.
☝️Pokud není HTTP/2 s kódem 200 nebo 302, zaměřit se na webserver, jeho Hostname, IP, Port a existenci stránky.
☝️Pokud není SSL certificate verify ok, zaměřit se na shodu hostname v url odkazu s hostname uvedeným v certifikátu.
☝️Pokud IP webu neodpoví, příkaz visí (ukončí se přes „Ctrl c“) , je potřeba se zaměřit na aktuálně použitý DNS server.
Zjištění aktuálně použitého DNS serveru
💻 resolvectl status
Klíčový výstup (příklad s IP DNS serveru 1.1.1.1 a 8.8.8.8):
… Current DNS Server: 1.1.1.1 DNS Servers: 8.8.8.8 1.1.1.1 …
Zjištění stavu a vymazání lokaní DNS cache
Zjištění stavu DNS cache:
💻 sudo resolvectl statistics
Klíčový výstup (příklad s 5 záznamy):
… Current Cache Size: 5 …
Vymazaní DNS cache:
💻 sudo resolvectl flush-caches
Kontrola stavu DNS cache:
💻 sudo resolvectl statistics
Zobrazená hodnota má být 0:
… Current Cache Size: 0 …
Případ
Vygenerování certifikátu pro implementaci bez jeho automatického obnovování. Před jeho expirací (standardně na 90 dní) je potřeba vygenerovat nový.
Vygenerování certifikátu (1. část)
💻 sudo certbot certonly --manual --preferred-challenges=dns -d nazev.domeny.cz --config-dir ~/certbot/config --work-dir ~/certbot/work --logs-dir ~/certbot/logs
| sudo certbot | 👉 program Certbot, který vystaví certifikát přes s Let’s Encrypt |
| certonly | 👉 pouze certifikát, bez automatického nastavování webserveru |
| –manual | 👉 „Entrem“ akceptace ověření odkazem (např. po vložení TXT záznamu) |
| –preferred-challenges=dns | 👉 typ ověření domény DNS-01 challenge (přes TXT záznam v DNS) |
| -d nazev.domeny.cz | 👉 doména, pro kterou se má certifikát vystavit |
| –config-dir ~/certbot/config | 👉 kam uložit konfiguraci a informace o certifikátu |
| –work-dir ~/certbot/work | 👉 kam uložit dočasné pracovní soubory |
| –logs-dir ~/certbot/logs | 👉 kam uložit logy a případné chyby |
Saving debug log to /home/mi/certbot/logs/letsencrypt.log Requesting a certificate for nazev.domeny.cz - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please deploy a DNS TXT record under the name: _acme-challenge.nazev.domeny.cz. with the following value: zDja4kUw... Before continuing, verify the TXT record has been deployed. Depending on the DNS provider, this may take some time, from a few seconds to multiple minutes. You can check if it has finished deploying with aid of online tools, such as the Google Admin Toolbox: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.nazev.domeny.cz. Look for one or more bolded line(s) below the line ';ANSWER'. It should show the value(s) you've just added. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Press Enter to Continue
⚠️ nedávat „Enter“, zatím nepokračovat ⚠️
Definice certifikátu do DNS záznamu
Upravit nebo přidat DNS záznam do domény nazev.domeny.cz (zkráceně):
| Jméno | Typ | Hodnota | TTL |
| _acme-challenge.nazev | TXT | zDja4kUw… | 3600 |
Čekání na propsání DNS definice
Kontrola buď v internet prohlížeči: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.nazev.domeny.cz
dokud se neobjeví ve výpisu „zDja4kUw…“
nebo opakovaně příkazem:
💻 dig TXT _acme-challenge.nazev.domeny.cz @8.8.8.8
dokud se neobjeví ve výpisu „zDja4kUw…“
; <<>> DiG 9.18.30-0ubuntu0.24.04.2-Ubuntu <<>> TXT _acme-challenge.nazev.domeny.cz @8.8.8.8 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27867 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;_acme-challenge.nazev.domeny.cz. IN TXT ;; ANSWER SECTION: _acme-challenge.nazev.domeny.cz. 3600 IN TXT "zDja4kUw..." ;; Query time: 16 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) (UDP) ;; WHEN: Sun Sep 07 20:23:02 CEST 2025 ;; MSG SIZE rcvd: 114
Zakončení generování certifikátu (2. část)
Po propsání certifikátu stisknout „Enter“ pro doběhnutí generování:
... - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Press Enter to Continue
👉 „Enter“
Successfully received certificate. Certificate is saved at: /home/mi/certbot/config/live/nazev.domeny.cz/fullchain.pem Key is saved at: /home/mi/certbot/config/live/nazev.domeny.cz/privkey.pem This certificate expires on 2025-12-06. These files will be updated when the certificate renews. NEXT STEPS: - This certificate will not be renewed automatically. Autorenewal of --manual certificates requires the use of an authentication hook script (--manual-auth-hook) but one was not provided. To renew this certificate, repeat this same certbot command before the certificate's expiry date. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Definice na poskytovateli Webu
Na straně webu je potřeba nahrát soubory vygenerovaného certifikátu fullchain.pem a privkey.pem .
Instalace certoot pro nginx
💻 sudo apt install nginx certbot python3-certbot-nginx
Zobrazení informací o spravovaných certifikátech
💻 sudo certbot certificates
Rozpracované …✍️
↩️️ WordPress
Případ
Po změně domény nebo subdomény stále odkazy směřují na původní doménu, kdy přihlášení nebo odkazy nefungují správně.
Řešení
Je potřeba změnit ve WordPress databázi starou doménu na novou, především v tabulce wp_options, je-li v záznamech:
| option_name | popis |
| siteurl | URL instalace WordPressu (admin, skripty, login) |
| home | URL webu pro návštěvníky |
| blogname | Název webu |
| blogdescription | Popis/tagline webu |
| permalink_structure | Formát URL pro příspěvky a stránky |
| category_base | Základ URL pro kategorie |
| tag_base | Základ URL pro štítky |
| upload_path | Fyzická cesta k médiím |
| upload_url_path | URL cesta k médiím |
| page_on_front | ID stránky pro hlavní stránku |
| page_for_posts | ID stránky pro blogové příspěvky |
| widget_* | Nastavení widgetů, často obsahuje odkazy a texty |
Další tabulky k projití s možným záznamem staré domény:
wp_posts , wp_postmeta , wp_terms , wp_term_taxonomy , wp_term_relationships , wp_usermeta , wp_users
Případ
Nakopírování web stránek do jiného webu v jiné doméně, obojí ve WordPress a jeho nástrojem:
Export ze zdroje
Ve WordPress administraci zdrojového webu:
„Nástroje“ ⮕ „Export“ ⮕ „Kompletní obsah“ ⮕ „Stáhnout soubor s exportem“
Stáhne se soubor typu .xml
Přepsat obsah na novou doménu
V textovém editoru vyhledat názvy původní domény, nahradit novou doménou a uložit.
☝️V textovém editoru zachovat kódování a odřádkování jako má soubor exportu.
Odstranění stránek na cíli
Ve WordPress administraci cílového webu smazat stránky i z koše, jinak je Import nepřepíše:
„Stránky“ ⮕ (zaškrtnutím přes hromadné akce) „Odstranit“ ⮕ „Použít“ ⮕ „Koš“ ⮕ „Vysypat Koš“
Import stránek na cíli
Ve WordPress administraci cílového webu:
„Nástroje“ ⮕ „Import“ ⮕ („WordPress nástroj není-li ⮕ Instalovat“) ⮕ „WordPress Spustit import“ ⮕ „Browse…“ (vybrat upravený xml soubor exportu) ⮕ „Nahrát soubor a importovat“ ⮕ „- Vybrat -“ (přidělit stránkám uživatele) ⮕ „Stáhnout a importovat přílohy“ (zaškrtnout) ⮕ „Potvrdit“ (spustí se import)
Případ
Po importu stránek obsahující správnou doménu jsou tyto nedostupné „Not Found“.
Příčina
Možný problém s Permalinkem na nově vytvořeném WordPress webu a souboru .htaccess .
Řešení
Upravit nebo založit soubor .htaccess (je v rootu webu jako např. wp-content), aby obsahoval:
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
Potom znovu uložit (tak jak jsou) Permalinky:
„Nástroje“ ⮕ „Permalink Manager“ ⮕ „Save all the permalinks below“
WordPress si ukládá do dabáze historii úprav stránek, tzv. revize. Počet revizí lze přenastavit a nebo v tomto případě zrušit parametrm v konfiguračním souboru wordpressu.
Zrušení ukládání revizí
💻 mousepad wp-config.php
Přidat, změnit po zrušení revizí:…
…
define('WP_POST_REVISIONS', 0);
…
Zobrazení počtu revizí v SQL databáz
SQL příkazy:
SELECT COUNT(*) AS pocet_revizí FROM wp_posts WHERE post_type = 'revision';
Odstranění revizí z SQL databáze a úklid sirotčích metadat
SQL příkaz:
DELETE FROM wp_posts WHERE post_type = 'revision'; DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts p ON pm.post_id = p.ID WHERE p.ID IS NULL;
Optimalizace SQL databáze
Uvolněný prostor v databázi zůstává alokován a je vhodné ho setřást.
SQL příkazy:
OPTIMIZE TABLE wp_posts; OPTIMIZE TABLE wp_postmeta;
Zobrazení velikosti tabulek SQL databáze
SQL příkazy:
SELECT table_name, ROUND(data_length / 1024 / 1024, 2) AS data_MB, ROUND(index_length / 1024 / 1024, 2) AS indexy_MB, ROUND(data_length / 1024 / 1024 + index_length / 1024 / 1024, 2) AS celkem_MB FROM information_schema.tables WHERE table_schema = 'jmeno_tve_databaze' ORDER BY celkem_MB DESC;
↩️️ SQL databáze „mariadb“ pro web
Adminer je jednoduchý, ale mocný webový nástroj pro správu databází (MySQL/MariaDB, PostgreSQL, SQLite, …). Oproti phpMyAdmin je lehčí a rychlejší.
☝️Jelikož adminer je jen PHP skript s webovým rozhraním (sám o sobě neumí běžet), tak musí mít k sobě web server (apache2, nginx, …) a php.
Instalace se sdíleným web serverem
☝️Pokud je na serveru již web server s PHP, tak neinstalovat adminer z repozitářů, ale jako deb balíček (aby se automaticky nedoinstalovával apache2 s PHP).
Stažení instalačního balíčku a instalace:
💻 wget http://ftp.us.debian.org/debian/pool/main/a/adminer/adminer
💻 sudo dpkg -i ./adminer_5.3.0+dfsg-1_all.deb
Konfigurace přičleněním k webu
Zjištění php cerze:
💻 php -v
Výpis:
PHP 8.2.29 (cli) (built: Jul 3 2025 13:07:49) (NTS) Copyright (c) The PHP Group Zend Engine v4.2.29, Copyright (c) Zend Technologies with Zend OPcache v8.2.29, Copyright (c), by Zend Technologies
Zjištění typu dle běžícího webserveru:
💻 sudo systemctl status apache2
💻 sudo systemctl status nginx
nebo dle běžícího procesu:
💻 ps aux | grep -E 'nginx|apache2'
nebo z hlavičky stránky:
💻 curl -I http://localhost
Výpis:
HTTP/1.1 301 Moved Permanently Server: nginx/1.18.0 (Ubuntu) Date: Thu, 25 Sep 2025 11:51:12 GMT Content-Type: text/html Content-Length: 178 Connection: keep-alive Location: https://localhost/
Zjištění otevřených portů webserveru:
💻 sudo netstat -tulpn | grep ':80\|:443'
Přičlenění Admineru k webserveru
💻 sudo vi /etc/nginx/sites-available/web
Včlenit do web konfigurace:
# Adminer
location = /adminer {
rewrite ^ /adminer/adminer.php last;
}
location /adminer/ {
alias /usr/share/adminer/;
index adminer.php;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}Aktivovat změny:
💻 sudo nginx -t
💻 sudo systemctl reload nginx
Spuštění admineru
Do web prohlížeče zadat: https://localhost/adminer
SQL prostření:
💻 mysql -u nazev_uzivatele -p
SQL přikaz:
SHOW GRANTS FOR 'nazev_uzivatele'@'localhost';
