? What does this error mean?
Paste the error message or log line you're seeing. We'll match it against common patterns and explain what it means.
0 Is this a Plesk server?
Plesk is a hosting control panel — it changes where files live, where logs are stored, and how services are managed. Find out before you start, because the commands below differ.
Quickest way to tell
- Try opening
https://<server-ip-or-hostname>:8443in a browser. If a Plesk login screen appears, it's Plesk. - SSH to the server and run the command below. If the directory exists, it's Plesk.
ls /usr/local/psa/version 2>/dev/null && echo "PLESK" || echo "no plesk"
If unsure, just ask the customer: "Do you log into a control panel called Plesk to manage the website, or do you connect by SSH directly?"
1 Does the domain resolve to an IP?
DNS is the system that turns a domain name (like example.com) into the IP address of the server hosting it. If DNS isn't returning an IP, the customer's browser can't even reach the server — nothing else matters until this works.
Quick DNS check
Check the A record
dig +short example.com A
87.106.96.230.Check name servers
dig +short example.com NS
If no name servers come back, the domain may have lapsed or the registrar isn't delegating it. Ask the customer to check their domain registrar.
Trace the chain from the root
dig +trace example.com
This walks DNS from the root servers down. Useful when the answer is cached or you suspect a delegation issue.
If DNS works → go to step 2. If not, the problem is at the DNS layer — there's no point checking firewall, ports, or logs yet.
- Domain expired? A lapsed domain often returns no records at all. Check the registrar's WHOIS or admin panel.
- Wrong name servers? If
NSrecords don't point at the host's name servers, the records you set up will never be authoritative. - Recent change not propagated? Updates can take up to 24 hours. Use a public resolver like
dig @8.8.8.8 example.comto bypass local caching. - DNS resolves to the wrong IP? Old A record from a previous host. Update it at the registrar to point at the current server.
2 Is the server actually reachable?
DNS gave us an IP. Now: does the server answer at that IP at all? If the server is offline or the network is broken, every other check will fail.
Quick reachability check (ping + HTTP)
Ping the server
ping -c 4 <server-ip>
Some hosts block ping at the firewall. A failed ping doesn't always mean the server is down — but a successful ping is a strong "yes, it's alive".
Trace the route
traceroute <server-ip>
Shows the hops between you and the server. If it stops short, you've found roughly where traffic is being dropped.
If the server is reachable → go to step 3.
- Cloud security group / external firewall. AWS, Azure, DigitalOcean and others have a firewall in front of the server. The OS-level firewall on the server is a separate layer.
- Is the server actually running? Check the cloud console / Plesk billing portal. The VM may have been stopped, suspended, or hit a billing issue.
- Routing problem? Try reaching the server from a different network (your phone on mobile data) to rule out a local ISP issue.
3 Are the right ports open?
A web server listens on ports 80 (HTTP) and 443 (HTTPS). If a firewall is blocking those, the server is technically up but no one can reach the site.
Quick port check (from this server, public-internet view)
From your machine — is the port reachable?
curl -I https://example.com --connect-timeout 5
"Connection refused" means nothing is listening. "Connection timed out" usually means a firewall is silently dropping packets.
On the server — what's actually listening?
ss -tlnp | grep -E ':80|:443'
You should see nginx, apache2, or httpd listening on both :80 and :443. If nothing's listed, no web server is running — jump to step 4.
Check the firewall
sudo ufw status
sudo iptables -L -n | head -50
plesk bin firewall --get-rules
Look for rules that DROP or REJECT tcp/80 or tcp/443. On a cloud host (AWS, DigitalOcean, etc.), also check the cloud provider's security group — that's a separate firewall in front of the server.
If ports are open and listening → go to step 4.
- Listening on
127.0.0.1only. Check the IP inss -tlnpoutput — if the web server is bound to127.0.0.1:80instead of0.0.0.0:80, no one outside the server can reach it. - Cloud security group blocks it. The OS firewall is open, but the cloud provider's firewall is dropping the traffic.
- Different port entirely. Some apps run on
:8080or:8000and rely on a reverse proxy that's now broken.
4 Is the web server running?
If ss showed nothing on :80/:443, the web server (NGINX or Apache) isn't running. This is one of the most common causes of an outage.
Find out which web server is installed
which nginx apache2 httpd 2>/dev/null
Check service status
systemctl status nginx
systemctl status apache2
Test the config before restarting
sudo nginx -t
sudo apache2ctl configtest
Restarting with a broken config takes the site fully offline. Always test first.
Restart safely
sudo systemctl reload nginx
plesk repair web -y
In Plesk, the "repair web" command rebuilds the config for all subscriptions and restarts services.
If the web server is up → go to step 5.
- Config syntax error. The output of
nginx -torapache2ctl configtestnames the file and line. Fix that first. - Disk full. Services often fail to start if they can't write a PID or log file. Jump to step 5.
- Port already in use. Another process grabbed :80 or :443 — check
ss -tlnp | grep :80. - Recent package update. An OS update may have replaced a config file. Check
journalctl -u nginx --since "1 hour ago".
5 Has the server run out of disk space?
A full disk silently breaks websites. Logs can't be written, sessions can't be created, databases refuse writes — and the symptoms look like a hundred unrelated problems.
Check disk usage
df -h
If any partition (especially / or /var) shows 100% Used, that's almost certainly your problem.
Check inodes — the often-missed sibling
df -i
An inode is a slot for a file. You can be at 100% IUse% with disk free if a directory has millions of small files (a runaway log, session files, mail spool). Same effect — the system can't create new files.
Find what's eating the disk
sudo du -sh /var/* 2>/dev/null | sort -h | tail -10
Common culprits: /var/log (a runaway log file), /var/lib/mysql (a database without a quota), or in Plesk /var/www/vhosts/<domain>/logs.
If disk and inodes are healthy → go to step 6.
- Runaway log file. Find the largest file with
sudo find /var/log -size +500M. Rotate or truncate it, then fix what's writing so much. - Failed backup writing forever. Check
/var/lib/psa/dumpson Plesk for orphaned backup attempts. - Spam mail queue. A compromised mail account can fill the queue fast — check
postqueue -p | tail.
6 PHP / application layer
The web server is up but the page shows a blank screen, a 500 error, or "PHP Fatal error". The web server is fine — the application running behind it isn't.
Page content scan
Fetches the page and looks for common error markers: WordPress DB errors, default Apache/NGINX/Plesk pages, "site suspended", maintenance mode, directory listings, etc.
Is PHP-FPM running?
systemctl status php8.2-fpm
systemctl status plesk-php84-fpm
Plesk runs its own PHP versions under /opt/plesk/php/ with services named plesk-php74-fpm, plesk-php83-fpm, etc. Each subscription can use a different version.
Check the PHP version a site is using
plesk bin site --info example.com | grep -i php
Run PHP from the command line to catch syntax errors
php -l /path/to/file.php
If PHP is healthy and the site still misbehaves → read the logs.
- Out of memory. Check
dmesg | grep -i "killed process"for OOM kills. Likely a memory issue, not PHP itself. - Worker pool exhausted. Symptom: site hangs under modest load. Increase
pm.max_childrenin the FPM pool config. - Wrong PHP version selected. In Plesk, the subscription may be set to a PHP version that's no longer installed. Check PHP Settings on the subscription.
7 Read the error logs
The logs almost always tell you exactly what's wrong — once you know where to look. There are usually three log layers, and the order to check them is: web server access log → web server error log → application/PHP error log.
Plesk log locations
sudo tail -100 /var/www/vhosts/<domain>/logs/error_log
sudo tail -100 /var/www/vhosts/<domain>/logs/access_ssl_log
sudo tail -100 /var/log/plesk-php84-fpm/error.log
Plain Linux log locations
sudo tail -100 /var/log/nginx/error.log
sudo tail -100 /var/log/apache2/error.log
sudo tail -100 /var/log/php8.2-fpm.log
Watch live as you reproduce the error
sudo tail -f /var/log/nginx/error.log
Ask the customer to refresh the page while you watch. The line that appears at that moment is the one to read.
Common log lines and what they mean
| You see… | Likely meaning |
|---|---|
connect() to unix:/run/php/php-fpm.sock failed | PHP-FPM isn't running, or the socket path in NGINX config is wrong. |
Permission denied on a file path | Web server user (www-data / nginx) doesn't have read access to the file. |
No space left on device | Disk or inodes full → back to step 5. |
SSL_do_handshake() failed | TLS issue → step 8. |
upstream prematurely closed connection | The app behind NGINX (PHP-FPM, Node, etc.) crashed mid-request. |
504 Gateway Time-out | Upstream is too slow (database query, external API). Check what the app is doing. |
- Wrong log file. Plesk has per-domain logs in
/var/www/vhosts/<domain>/logs/that are separate from the global ones. NGINX-as-reverse-proxy in front of Apache means errors might be in either. - Log level too low. Default is usually
warnorerror. Temporarily raise todebugin the NGINX/Apache config to capture more. - App logs to its own file. Many CMSes (WordPress, Laravel) write to their own log inside the application directory —
wp-content/debug.log,storage/logs/laravel.log. - Try the lookup tool above. Paste an exact log line into the error message lookup at the top of this page.
8 SSL / TLS issues
"Your connection is not private", padlock with a warning, or the page works on http:// but not https://. Three things go wrong with TLS: the certificate is expired, the certificate is for the wrong domain, or the chain is incomplete.
Quick TLS / certificate check
What does the certificate actually say?
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -subject -issuer -dates
You'll get the certificate's subject (which domain it's valid for), issuer (who signed it), and validity dates.
Is the chain complete?
curl -vI https://example.com 2>&1 | grep -E '(SSL|certificate|verify)'
"unable to get local issuer certificate" means the server is sending its certificate but not the intermediate cert that links it to a trusted root. Browsers will warn — fix by reinstalling the cert with the full chain.
Renew Let's Encrypt (Plesk)
plesk bin extension --exec letsencrypt cli.php --renew -d example.com
Renew Let's Encrypt (certbot, plain Linux)
sudo certbot renew --force-renewal --cert-name example.com
- Mixed content. The page loads over HTTPS but pulls images, scripts, or stylesheets over HTTP. Browsers block these. Check the browser's developer console (Network tab).
- HSTS pinned old cert. If a previous visit pinned strict transport security, browsers may refuse the new cert until the pin expires. Test in incognito / a different browser.
- Let's Encrypt renewal fails repeatedly. Usually because port 80 is blocked (HTTP-01 challenge needs it open) or DNS for the domain doesn't point at the server.
9 Plesk-specific gotchas
Issues that only appear when Plesk is in the mix.
Subscription suspended
A suspended subscription returns a Plesk-branded "this site is suspended" page. The site looks broken to the customer, but everything below is working perfectly.
plesk bin subscription --info example.com | grep -i status
plesk bin subscription --activate example.com
Hosting settings disabled
In Plesk → Subscriptions → <domain> → Hosting Settings, "Web hosting" can be toggled off without deleting the site. Looks identical to a network outage.
Repair the web stack
plesk repair web example.com
Rebuilds the per-domain NGINX/Apache config from Plesk's database. Fixes most "everything looks right but it doesn't work" cases.
Reload all services
plesk repair installation
Where to look in the Plesk UI
- Tools & Settings → Services Management — start/stop NGINX, Apache, PHP-FPM, MySQL.
- Tools & Settings → Server Health Monitor — quick view of CPU, memory, disk per partition.
- Subscription → Logs — per-domain access and error logs without needing SSH.
- Subscription → SSL/TLS Certificates — issue, renew, or replace certificates.
Quick reference: HTTP status codes
What the customer's browser is getting. The first digit tells you who's at fault.
| Code | Means | Where to look |
|---|---|---|
| 200 | OK — page loaded. | Site is working. |
| 301 / 302 | Redirect. | Check the redirect chain — could be a loop. |
| 403 | Forbidden — server understood, refused. | File permissions, .htaccess, or web app auth. |
| 404 | Not found. | Wrong document root, missing file, or broken rewrite rule. |
| 500 | Generic server error. | Always read the application/PHP error log — step 7. |
| 502 | Bad gateway. | Web server is up; the thing behind it (PHP-FPM, Node) is down. |
| 503 | Service unavailable. | Server is overloaded, in maintenance mode, or out of workers. |
| 504 | Gateway timeout. | App is too slow — usually a stuck database query or external API call. |