Troubleshooting
Find and fix common problems with the Panel and Wings.
Matching an Error
Paste an error message or log line below. If it matches a known problem, you see the cause and the fix. Every problem it knows is also covered on this page or the page it links to.
Match an error to its fix
Common problems
Reading Error Logs
When the Panel shows an unexpected error, check its log first. To show the last 100 lines of today's log, run:
tail -n 100 /var/www/pterodactyl/storage/logs/laravel-$(date +%F).logFor Wings, read its service log on the node:
journalctl -u wings -n 100 --no-pagerTo collect the details support usually asks for, such as versions, main configuration values, and recent log lines, run wings diagnostics on the node. It asks whether to include your Panel's address and the logs, and whether to review the report before upload. Answer yes to the review so you can check it first.
Finding the Error
Each error in the Panel's log starts with a line that has the date and time in brackets, followed by a long stack trace. The dated line describes the problem, for example:
[2026-09-29 10:15:02] production.ERROR: file_put_contents(/var/www/pterodactyl/storage/framework/views/...): Failed to open stream: Permission deniedHere the web server cannot write to storage, which usually means wrong file permissions. You can ignore the stack trace below the line.
To show only these lines, without stack traces, run:
tail -n 1000 /var/www/pterodactyl/storage/logs/laravel-$(date +%F).log | grep "\[$(date +%Y)"Include these lines when you ask for help. Remove any passwords or keys first.
The Panel Shows a Blank Page
If the Panel loads a blank page, open your browser's developer console to see the error.
An extension can stop pages from loading. To check, set PTERODACTYL_EXTENSIONS_ENABLED=false in .env, run php artisan config:clear, and reload. If the Panel works again, find the faulty extension with php artisan p:extension:list and disable it with php artisan p:extension:disable. See Extensions.
If the log says The Vite manifest has not been generated yet, the frontend has not been built. See Building From Source.
502 Bad Gateway
NGINX and Caddy pass PHP requests to PHP-FPM through a socket, such as /run/php/php8.3-fpm.sock. A 502 Bad Gateway means that socket does not exist: PHP-FPM is stopped, or your web server configuration names a PHP version that is not installed. This often follows a PHP upgrade.
systemctl status php8.3-fpm
ls /run/php/Make sure your web server configuration names a socket that ls shows, then reload the web server. See Updating the Web Server.
Sign-In Fails With a CSRF or 419 Error
If signing in fails with CSRF token mismatch. or 419 Page Expired, your browser is not sending the session cookie back. Usually APP_URL in .env does not match the address you open the Panel at:
- If
APP_URLstarts withhttps://,php artisan p:environment:setupsetsSESSION_SECURE_COOKIE=true. Browsers then send the cookie only over HTTPS, so signing in over plain HTTP always fails. - The Panel treats only requests from the host in
APP_URLas signed-in browser requests. A different domain or IP address does not work.
Set APP_URL to the exact address you use, then clear the configuration cache:
php artisan config:clearBehind a reverse proxy or Cloudflare, also set TRUSTED_PROXIES, as described in Reverse Proxies.
Cannot Connect to a Server
Basic Checks
- Wings is running. Check it with
systemctl status wings. - The browser shows no errors. Open the developer console and look for red errors.
- The node's configuration matches. Wings'
/etc/pterodactyl/config.ymlmust match the node's Configuration tab under Admin → Nodes. - The firewall allows Wings' ports. Wings uses
8080(or the node's Daemon Port) for its API, and2022for SFTP. - No ad blocker is blocking the Panel or Wings.
- The Panel can reach Wings. On the Panel's server, run
curl https://node.example.com:8080with your node's domain. - The Panel and Wings use the same scheme. If the Panel uses HTTPS, Wings must too.
- Certificates are valid. If Wings uses HTTPS, check that its certificate has not expired.
Could not establish a connection to the machine running this server means Wings did not answer at all. There was an error while communicating with the machine running this server means Wings answered with an error; find the message's request_id in the Wings log.
Advanced Checks
- Run Wings in debug mode. Stop Wings and run
wings --debugto see its errors. For help, ask on Discord. - Check DNS. Use
digornslookupto confirm your domains point to the right addresses. - Check Cloudflare. Turn off Cloudflare's proxy (the orange cloud) for your Wings domain.
- Check NAT. If Wings is behind a firewall, such as pfSense, forward the correct ports to it.
- Add host entries. When the Panel and Wings share a server, an
/etc/hostsentry pointing the Panel's domain at the server can help.
The Console Does Not Connect
The console does not go through the Panel. Your browser connects straight to Wings, at the node's FQDN and Daemon Port. If the console stays disconnected or shows "Server connection failed", check:
- The scheme. If the Panel uses HTTPS, the node must use SSL too. Browsers block insecure connections from a secure page.
- The certificate. Open
https://<node FQDN>:8080in your browser. Any certificate warning there also breaks the console. - The origin. Wings only accepts console connections from pages at the
remoteaddress in itsconfig.yml. It must match your browser's address bar exactly, includinghttps://, with no trailing slash. List any other Panel addresses underallowed_origins. See Panel Connection.
"Server connection rejected" means Wings and the Panel disagree on the node's token. Run the auto-deploy command from the node's Configuration tab again with --override, and restart Wings.
SFTP Login Fails
- Use the right username: your Panel username, a period, and the server's 8-character ID, such as
admin.1a2b3c4d. Copy it from SFTP Details on the server's Settings page. - Use the right port. Wings' SFTP server listens on
2022by default, not22. - Use your Panel password, or an SSH key you added to your account.
- Subusers need the SFTP permission. The server's owner and administrators always have it.
- Wait after repeated failures. Wings and the Panel rate-limit login attempts.
On the node, journalctl -u wings shows why Wings refused a login, for example failed to validate user credentials (invalid format) for a badly formatted username.
Wings Does Not Start
Run journalctl -u wings -n 50 --no-pager, or stop the service and run wings --debug. Look for the last error before Wings exits:
Configuration File Not Found:/etc/pterodactyl/config.ymldoes not exist. See Configuring Wings.failed to configure HTTPS server: SSL is on, but the certificate or key file is missing. See Creating SSL Certificates.address already in use: another program uses Wings' API or SFTP port.failed to configure docker environment: Docker is not running. Start it withsystemctl enable --now docker.failed to load server configurations: Wings could not get its servers from the Panel. If the error ends in(HTTP/403), the node's token does not match; run the auto-deploy command again with--override. Otherwise, check thatremoteis reachable from the node.
Invalid MAC Exception
This error only happens when APP_KEY does not match the key that encrypted the data, usually because a database backup was restored into a new installation without the original .env file. Always restore the .env file together with the database.
The log shows it as an invalid MAC when decrypting. The only fix is to restore the original APP_KEY in .env. If that key is lost, the encrypted data cannot be recovered.
Servers Have No Internet Access
This is usually DNS. By default, Wings gives containers the DNS servers 1.1.1.1 and 1.0.0.1, which some hosts block.
To find your host's DNS servers, try:
# NetworkManager
nmcli -g ip4.dns,ip6.dns dev show
# systemd-resolved (recent Ubuntu versions)
resolvectl statusOr look in /etc/resolv.conf or /etc/network/interfaces.
Replace 1.1.1.1 and 1.0.0.1 under docker.network.dns in Wings' /etc/pterodactyl/config.yml with your host's servers. Restart Wings, then restart the server so its container uses the new servers.
Schedules Do Not Run
- Check the queue worker's log with
journalctl -xeu pteroq, and restart it withsystemctl restart pteroq. - Clear the scheduler's cache with
php /var/www/pterodactyl/artisan schedule:clear-cache. - Check the cron entry. Run
crontab -las root and confirm the scheduler line from Getting Started is there. - Check PHP. Compare
php -vwith the requirements. - Test the schedule on its own. Make its first task something visible in the console, such as
say teston a Minecraft server, to tell whether the schedule or its tasks are the problem. - Check the time zones. Schedules at the wrong time usually mean mismatched time zones. Compare the system's (
timedatectl), the Panel's (APP_TIMEZONEin.env), and Wings' (timezoneinconfig.yml). - Check the database and Redis. Run
systemctl status mariadbandsystemctl status redis-server. If either is stopped, check its log withjournalctl -xeu. - Check the Panel's log, as described in Reading Error Logs.
Last updated on