Fixing Certbot error: ACME challenge unauthorized 404 on Nginx reverse proxy

Root Cause Diagnosis Let’s Encrypt’s HTTP-01 validator requests http://<domain>/.well-known/acme-challenge/<token> on port 80. It gets a 404 when Nginx routes that request to the wrong place. Either the catch-all location / proxies it to an upstream app that has no such route, or Nginx serves it from a document root that differs from the –webroot-path Certbot … Read more

cPanel to CyberPanel Manual User Backup Restore Without Corrupted Tarball Issues

Root Cause Diagnosis CyberPanel’s Backup > Restore Backup page only accepts CyberPanel-format archives, so a cPanel backup-*.tar.gz or cpmove-*.tar.gz has to go through the separate importer script, /usr/local/CyberCP/plogical/cPanelImporter.py. That script extracts the file with a plain tar -xf and then reads userdata/main from the extracted tree. Most “corrupted tarball” errors therefore mean the archive was … Read more

How to Enable HTTP/2 on Secondary Domain Vhosts in CyberPanel Without GUI Reset

Root Cause Diagnosis CyberPanel provisions HTTP/2 at the listener level in OpenLiteSpeed (/usr/local/lsws/conf/httpd_config.conf), but each additional domain — whether added as a new website or a child domain — gets its own SSL context inside its vhost.conf under a vhssl block. That per-vhost block carries its own protocol negotiation setting (enableSpdy, the legacy directive name … Read more

aaPanel Docker manager bridge network conflicting with local host IP subnets

Docker’s default docker0 bridge uses 172.17.0.0/16, and user-defined networks (including those created by docker-compose stacks deployed from aaPanel’s Docker manager) are allocated sequentially from 172.18.0.0/16 upward through 172.31.0.0/16, then 192.168.0.0/20 blocks. When the host, VPN, or LAN uses an overlapping range, the kernel installs a directly connected route for the bridge that takes precedence over … Read more

Fix: Apache graceful restart failing due to lingering defunct workers

Root Cause Diagnosis A defunct (Z state) process is a child that has already exited but has not been reaped by its parent via wait(), so kill -9 has no effect on it. On apachectl graceful (SIGUSR1), the parent httpd retires the old generation and expects to reap each old child as it exits. If … Read more

Resolving CyberPanel Blank Login Screen After MariaDB Package Upgrade

Root Cause Diagnosis CyberPanel’s admin panel (CyberCP) reads and writes session, user, and two-factor data through a Django ORM that expects a specific MariaDB schema version. When the underlying MariaDB-server package is upgraded independently — through yum update, dnf update, or apt upgrade outside of CyberPanel’s own upgrade script — the server binary jumps to … Read more

Nginx proxy_pass Stripping Authorization Bearer Header: Fix and Config Syntax

Root Cause Diagnosis Nginx does not strip the Authorization header by design in proxy_pass — the header loss is almost always caused by one of three upstream conditions: an uwsgi_pass/fastcgi_pass directive silently dropping it (PHP-FPM’s fastcgi_param does not forward Authorization unless explicitly mapped), a broken or missing proxy_set_header inheritance across nested location blocks, or Nginx’s built-in HTTP Basic Auth module (ngx_http_auth_basic_module) consuming the header before it reaches the backend. … Read more

Resolving MySQL Error 1040 “Too Many Connections” on a 1GB VPS with aaPanel

Root Cause Diagnosis Error 1040 means Threads_connected reached max_connections, and the server rejects every new client until a slot frees. On a 1GB VPS the limit is usually reached because slow queries or sleeping connections from PHP-FPM workers pile up faster than they close. Raising max_connections alone often makes it worse: each connection can allocate per-thread buffers, so a high … Read more

How to unban IP locked out by aaPanel Fail2ban via SSH terminal commands

Root Cause Diagnosis Fail2ban tails the SSH auth log (/var/log/auth.log on Debian/Ubuntu, /var/log/secure on RHEL-family). When one IP exceeds maxretry failures within findtime, it inserts a firewall rule (iptables, nftables, ipset, or firewalld) that drops that IP for bantime. Bans are also written to the Fail2ban SQLite database and reinstated on service restart, so restarting the service does not clear them. If you … Read more

Setting up strict Let’s Encrypt renewal with Cloudflare API token without global key

Root Cause Diagnosis Certbot’s dns-cloudflare plugin accepts two credential types: the legacy Global API Key (dns_cloudflare_email + dns_cloudflare_api_key), which grants full account control, and a scoped API token (dns_cloudflare_api_token). Many setups still use the Global Key because older tutorials default to it, so a leaked cloudflare.ini exposes every zone, DNS record, and setting on the account. Renewals also fail when a … Read more