Polar55 je webhosting přívětivý k vývojářům, a proto máte samozřejmě přístup i k terminálu, a to přes SSH i přímo přes cPanel.
Používání terminálu může působit trochu děsivě a málokdo ví, jak začít. S umělou inteligencí je to ale mnohem jednodušší. Stačí zkopírovat příkazy, které vám poskytne, do terminálu a poté jí předat výsledek. Následně vám může navrhnout další příkaz podle toho, co chcete prozkoumat.
V tomto návodu vám ukážeme několik příkladů využití terminálu. Je však důležité zdůraznit, že skutečně efektivní to bude tehdy, když necháte umělou inteligenci vytvářet příkazy i analyzovat jejich výsledky.
Prozkoumejte vysoké využití CPU a možný provoz botů
Využívá váš webhosting hodně CPU nebo je váš web pomalý? Příčinou mohou být automatizovaní boti nebo velké množství opakovaných požadavků na váš web.
Pomocí terminálu v cPanelu můžete prozkoumat provoz na svých webech. Terminál najdete v cPanelu v části Advanced → Terminal. Níže uvedené příkazy data pouze čtou a na vašem hostingovém účtu nic nemění.
Najděte nejaktivnější identifikátory User-Agent
User-Agent je identifikační řetězec, který prohlížeč nebo bot odesílá spolu s požadavkem. Následující příkaz ukáže, které identifikátory User-Agent provedly za posledních 60 minut nejvíce požadavků s odpovědí HTTP 200:
grep -hE "$(for i in $(seq 0 59); do LC_ALL=C date -d "$i minutes ago" '+%d/%b/%Y:%H:%M'; done | paste -sd'|' -)" \
~/access-logs/* 2>/dev/null \
| awk -F'"' '$3 ~ /^ 200 / {
ua=$6;
if (ua=="") ua="-";
print ua
}' \
| sort | uniq -c | sort -nr | head -100
Příklad výsledku:
1662 Mozilla/5.0 ... Edg/156.0.0.0
810 Mozilla/5.0 ... Chrome/156.0.0.0 Mobile
479 WP Rocket/Preload
96 Mozilla/5.0 ... bingbot/2.0
Číslo vlevo udává počet požadavků. Pokud některý identifikátor User-Agent výrazně vyčnívá, můžete prozkoumat, ze kterých IP adres provoz pochází.
Poznámka: Velké množství požadavků nemusí být nutně podezřelé. Například WP Rocket může při vytváření mezipaměti generovat mnoho požadavků. Identifikátory User-Agent lze navíc podvrhnout. Příkaz zobrazuje pouze odpovědi HTTP 200, nikoli například HTTP 403 nebo 429.
Najděte IP adresy konkrétního identifikátoru User-Agent
Zkopírujte identifikátor User-Agent, který chcete prozkoumat, a vložte jej mezi uvozovky za UA=. Zde používáme jako příklad Microsoft Edge:
UA='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36 Edg/156.0.0.0'
grep -hE "$(for i in $(seq 0 59); do LC_ALL=C date -d "$i minutes ago" '+%d/%b/%Y:%H:%M'; done | paste -sd'|' -)" \
~/access-logs/* 2>/dev/null \
| awk -F'"' -v ua="$UA" '
$3 ~ /^ 200 / && $6 == ua {
split($1,a," ")
print a[1]
}
' \
| sort | uniq -c | sort -nr | head -20
Příklad výsledku:
865 192.0.2.10
591 198.51.100.20
1 203.0.113.30
Zde vidíte, že většina požadavků pochází ze dvou IP adres.
Zablokujte IP adresu přes cPanel
Pokud jste prozkoumali provoz a usoudili jste, že některá IP adresa způsobuje problémy, můžete ji zablokovat přes cPanel:
- Přihlaste se do cPanelu.
- Otevřete Security → IP Blocker.
- Zadejte IP adresu, kterou chcete zablokovat.
- Klikněte na Add.
- V případě potřeby postup opakujte pro další IP adresy.
Blokování můžete později zrušit na stejném místě. Pamatujte, že IP adresa může patřit také legitimnímu návštěvníkovi nebo sdílenému internetovému připojení.
Zjistěte, která doména má největší návštěvnost
Pokud máte na stejném účtu cPanel více webů, můžete zjistit, která doména obdržela za posledních 60 minut nejvíce požadavků. Při vysokém zatížení CPU vám to může pomoci určit web, který byste měli prozkoumat podrobněji.
python3 - <<'PY'
import glob
import json
import os
import re
import subprocess
from collections import Counter
from datetime import datetime, timedelta
now = datetime.now().astimezone()
start = now - timedelta(minutes=60)
counts = Counter()
domains = {}
# Získání správného mapování domén z cPanelu
try:
result = subprocess.run(
['uapi', '--output=json', 'DomainInfo', 'domains_data'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True,
timeout=15
)
if result.returncode == 0:
response = json.loads(result.stdout)
data = response.get('result', {}).get('data') or {}
for category in ('addon_domains', 'sub_domains'):
for item in data.get(category) or []:
if not isinstance(item, dict):
continue
internal = item.get('servername')
public = item.get('domain')
if internal and public:
domains[internal] = public
main = data.get('main_domain') or {}
if isinstance(main, dict):
internal = main.get('servername')
public = main.get('domain')
if internal and public:
domains[internal] = public
except (OSError, ValueError, subprocess.TimeoutExpired):
pass
# Procházení přístupových protokolů za posledních 60 minut
seen = set()
for path in glob.glob(os.path.expanduser('~/access-logs/*')):
try:
if not os.path.isfile(path):
continue
stat = os.stat(path)
identity = (stat.st_dev, stat.st_ino)
# Zamezení opakovanému čtení souboru přes více pevných odkazů
if identity in seen:
continue
seen.add(identity)
name = os.path.basename(path)
name = re.sub(r'-ssl_log$', '', name)
# Zobrazení správného názvu domény z cPanelu
domain = domains.get(name, name)
with open(path, errors='replace') as logfile:
for line in logfile:
match = re.search(r'\[([^\]]+)\]', line)
if not match:
continue
try:
timestamp = datetime.strptime(
match.group(1),
'%d/%b/%Y:%H:%M:%S %z'
)
except ValueError:
continue
if start <= timestamp <= now:
counts[domain] += 1
except OSError:
continue
print('POŽADAVKY PODLE DOMÉNY – POSLEDNÍCH 60 MINUT')
print()
for domain, count in counts.most_common():
print('{:8} {}'.format(count, domain))
PY
Příklad výsledku:
POŽADAVKY PODLE DOMÉNY – POSLEDNÍCH 60 MINUT
4821 web-a.cz
936 web-b.cz
124 web-c.cz
V tomto příkladu má web-a.cz výrazně větší návštěvnost než ostatní weby.
Velké množství požadavků však nemusí znamenat vysoké využití CPU. Jediný náročný požadavek ve WordPressu může server zatížit více než mnoho požadavků obsloužených z mezipaměti. Tato čísla jsou proto orientační a nejde o přímé měření využití CPU.
Prozkoumejte využití diskového prostoru a najděte největší soubory
Dochází vám na webhostingu místo na disku? Pomocí terminálu můžete najít největší soubory ve svém účtu. To je užitečné zejména při hledání starých záloh, velkých souborů protokolů a dalších souborů, které už možná nepotřebujete.
Najděte 20 největších souborů
find ~ -type f -printf '%s %p\n' 2>/dev/null \
| sort -nr | head -20 \
| awk '{printf "%.1f MB %s\n", $1/1048576, $2}'
Příklad výsledku:
1850.4 MB /home/user/backups/backup-old.zip
724.2 MB /home/user/public_html/wp-content/backup.zip
312.8 MB /home/user/public_html/error_log
Buďte trpěliví: Dokončení příkazu může trvat několik minut, zejména pokud váš účet obsahuje mnoho souborů.
Tento příkaz je užitečný pro hledání možností, jak uvolnit místo na webhostingu. Nic nemaže.
Důležité: Nikdy nemažte soubory, pokud nevíte, k čemu slouží. Před odstraněním si je případně prohlédněte ve správci souborů cPanelu.