Web Server Errors
nginx, Apache, IIS and Caddy: binding, permissions, rewrites and TLS.
Understanding WebServer errors
Web server errors are usually about permissions, binding, or configuration that was never loaded. A common trap: the server runs as an unprivileged user (www-data, nginx), so it needs execute permission on every directory in the path to a file, not just read permission on the file itself. Another: editing a config file changes nothing until the server is reloaded and the file is actually included.
How to debug WebServer errors
- Validate configuration before reloading:
nginx -t,apachectl configtest,caddy validate. This catches syntax errors without dropping traffic. - Dump the fully resolved configuration with
nginx -Tto see what is actually in effect, including every include. - Read the error log, not the access log, for 5xx causes. nginx names the failing upstream and the exact filesystem path it could not open.
- For permission errors, test as the server user:
sudo -u www-data cat /path/to/file. Check execute bits on every parent directory. - For binding failures, find the current listener with
ss -tulpn | grep :80. Ports below 1024 need privileges or a capability such asCAP_NET_BIND_SERVICE.
Tools worth reaching for
nginx -t / nginx -Tapachectl configtestss -tulpntail -f error.logsudo -u www-data
All 20 WebServer errors
- Apache: .htaccess: Option Indexes not allowedDirectory listing (Options Indexes) is disabled in main config but requested in .htaccess.
- Apache: AH00161: server reached MaxRequestWorkers setting, consider raising NewEvery Apache worker is busy, so new connections wait in the listen queue and the site slows down or hangs. Raising the…
- Apache: AH00558: Could not reliably determine the server's FQDN NewServerName is not set, so Apache guessed from the system hostname. It is a warning and the server starts, but the…
- Apache: AH01071: Got error 'Primary script unknown' NewThe message is PHP-FPM's, relayed by Apache: the script path Apache sent over FastCGI does not exist, or cannot be…
- Apache: AH01630: client denied by server configuration Newmod_authz_core decided the request was not allowed for that directory, so it never reached the file and the response…
- Apache: Invalid command 'Order', perhaps misspelled or defined by a module NewOrder, Allow and Deny moved into mod_access_compat in 2.4, so configuration written for 2.2 no longer parses unless…
- Apache: mod_rewrite not enabledURL rewriting rules in .htaccess are not working because the mod_rewrite module is not loaded in Apache.
- Caddy: 502 Bad Gateway (reverse proxy)Caddy's reverse proxy cannot reach the upstream backend. The backend service may be down or listening on a different…
- IIS: HTTP Error 500.19 - Internal Server ErrorIIS cannot read the web.config file due to syntax errors, missing modules, or insufficient permissions.
- nginx: [emerg] a duplicate default server for 0.0.0.0:443 NewOnly one server block per listening address may carry default_server, and nginx refuses to start rather than choose…
- nginx: [emerg] cannot load certificate "/etc/ssl/my.crt": BIO_new_file() failed Newnginx could not open the certificate file at all, before reading a byte of it, so this is about the file and not the…
- nginx: [warn] conflicting server name "example.com" on 0.0.0.0:80, ignored NewTwo server blocks on the same address and port both claim the same server_name, so nginx keeps the first one it read…
- nginx: 1024 worker_connections are not enough NewEach worker has a fixed number of connection slots and a proxied request uses two of them, one to the client and one…
- Nginx: 413 Request Entity Too LargeThe request body exceeds Nginx's client_max_body_size directive. Default is 1MB.
- Nginx: bind() to 0.0.0.0:80 failedNginx cannot bind to port 80 because it is already in use by another process (Apache, another Nginx, etc.).
- Nginx: could not build server_names_hash, increase the bucket size NewNginx sizes a hash table for server names at startup and one of your names is too long for the default bucket, which…
- Nginx: no shared cipher (SSL)The client and Nginx have no common SSL/TLS cipher suite. Usually caused by overly restrictive ssl_ciphers…
- Nginx: open() failed (13: Permission denied)Nginx worker process cannot read the requested file or write to log files due to filesystem permissions.
- nginx: rewrite or internal redirection cycle while internally redirecting to NewLogged alongside a 500 when a try_files fallback or a rewrite sends nginx back into a location that falls back again…
- nginx: the "listen ... http2" directive is deprecated, use the "http2" directive NewSince nginx 1.25.1, HTTP/2 is switched on with its own http2 directive rather than a parameter on listen. The old form…
Other categories
- AI 35Rate limits, context windows, GPU memory and model-serving failures.
- Ansible 18Unreachable hosts, become passwords, undefined variables and Jinja2 failures.
- API 20Auth headers, payload limits, versioning, idempotency and webhook signatures.
- Apple 20Command line tools, dyld, Homebrew permissions, notarisation and Keychain.
- Auth 20OIDC, SAML, Auth0, Okta, Keycloak, passkeys and MFA failures.
- BigData 17Spark, Kafka, Airflow, Snowflake, Flink and Databricks failures.
- C# 18NuGet restore, null references, EF Core migrations, async deadlocks and Blazor…
- C++ 20Segfaults, linker errors, memory corruption and template deduction failures.
- Caching 20Cache stampedes, stale content, Varnish and CloudFront failures.
- CI/CD 18GitHub Actions, GitLab CI, Jenkins, CircleCI: permissions, runners and…
- Client 21CORS, mixed content, module resolution, memory limits and framework runtime…
- Cloud 25IAM permissions, quotas, service limits and credential failures.
- Dart 20Null safety, pub version solving and build toolchain problems.
- Database 41Connections, deadlocks, constraints, replication and memory limits.
- DNS 20NXDOMAIN, SERVFAIL, timeouts, propagation and delegation problems.
- Docker 27Daemon connectivity, disk space, image pulls, ports and architecture mismatches.
- Elixir 18GenServer timeouts, supervision failures and Mix compilation problems.
- Email 20Delivery failures, relay denial, authentication, SPF, DKIM and DMARC.
- Frontend 23Hydration mismatches, bundler resolution, layout shift and font loading.
- Git 20Merge conflicts, rejected pushes, detached HEAD, LFS and repository corruption.
- Go 19Nil map assignment, concurrent map access, context cancellation and deadlocks.
- GraphQL 19Validation, depth limits, N+1 queries and fragment problems.
- gRPC 17Status codes, deadlines, message limits, TLS and HTTP/2 transport failures.
- HTTP 494xx client errors, 5xx server errors, redirects, headers and protocol problems.
- ICMP 23Destination unreachable, time exceeded, fragmentation needed and redirects.
- Ingress 20404 default backend, missing TLS secrets, IngressClass and path matching.
- Java 19Class loading, dependency resolution, connection pools and JVM version…
- JavaScript 42npm resolution, async pitfalls, hydration, memory limits and runtime type…
- Kubernetes 34CrashLoopBackOff, ImagePullBackOff, OOMKilled, RBAC, scheduling and storage.
- Logging 18Log4j, Logback, Fluentd, Logstash and CloudWatch ingestion problems.
- MessageQueue 20Kafka, RabbitMQ, SQS, NATS and Celery: lag, rebalancing and poison messages.
- Mobile 20Gradle, CocoaPods, Xcode signing, Metro bundler and toolchain mismatches.
- Monitoring 18Prometheus scrapes, Grafana data sources, OpenTelemetry exporters and agent…
- Network 35Refused connections, timeouts, resets, MTU problems and port exhaustion.
- Performance 19GC pauses, thread pool starvation and event loop blocking.
- PHP 20Memory limits, execution timeouts, autoloading, Composer and PDO connections.
- Proxy 20nginx, Envoy, HAProxy, Traefik, Caddy and Cloudflare upstream failures.
- Python 35Imports, virtual environments, encoding, concurrency and dependency conflicts.
- Regex 17Catastrophic backtracking, back references, escaping and engine differences.
- Ruby 20Bundler, migrations, native extensions, encoding and asset compilation.
- Rust 19Borrow checker, ownership moves, trait bounds and lifetime mismatches.
- Scala 17Dependency resolution, binary compatibility and type inference failures.
- Security 25JWT validation, CSRF, OAuth grants, SELinux, SSH host keys and CSP.
- Serverless 20Lambda timeouts, package size limits, VPC networking and cold starts.
- Shell 19Command not found, permissions, quoting, expansion and Makefile syntax.
- Storage 19S3 permissions, NFS mounts, quotas, signed URLs and volume attachment.
- Svelte 20Store subscriptions, load functions and server/client boundaries.
- System 26Disk space, systemd units, file descriptors, OOM killer and scheduled jobs.
- Terraform 18State locks, provider auth, drift, dependency cycles and plan-time unknowns.
- Testing 18Jest, pytest, JUnit, Cypress and Playwright: fixtures, snapshots and timeouts.
- TLS 24Untrusted authorities, expiry, hostname mismatch, chains and cipher negotiation.
- TypeScript 19Assignability, missing declarations, strict null checks and generic constraints.
- Virtualization 20VirtualBox, VMware, Hyper-V, WSL, KVM and hypervisor conflicts.
- Web3 17Gas estimation, nonce management and reverted transactions.
- WebAssembly 17Compile errors, memory bounds and host binding mismatches.
- Windows 20Installer failures, missing runtimes, update errors and permission problems.