Troubleshooting
Which tool to use
BEFORE INSTALL → meridian preflight IP
"Will this server work for Meridian?"
AFTER INSTALL, CAN'T CONNECT → meridian test IP
"Is the proxy reachable from where I am right now?"
AFTER INSTALL, SOMETHING BROKE → meridian doctor IP
"Collect everything for debugging."
Add --ai to preflight or doctor for an AI-ready diagnostic prompt.
Can’t connect at all
Port 443 not reachable
Causes:
- Cloud provider firewall / security group blocks port 443 inbound
- ISP or network blocks the server IP entirely
- Server is down or proxy is not running
- UFW on the server doesn’t allow port 443
Fixes:
- Check cloud provider console — ensure port 443/TCP is allowed inbound
- Try from a different network (mobile data, another Wi-Fi)
- SSH in and check:
docker ps(is 3x-ui running?),ss -tlnp sport = :443 - Check UFW:
ufw status— should show 443/tcp ALLOW
TLS handshake fails
Causes:
- Xray is not running inside the Docker container
- Port 443 is occupied by another service
- Reality SNI target is unreachable from the server
Fixes:
- Check Xray:
docker logs 3x-ui --tail 20 - Check port:
ss -tlnp sport = :443— should be haproxy - Test SNI:
meridian preflight IP
Domain not reachable
Causes:
- DNS not pointing to server IP
- Caddy not running or failed to get TLS certificate
- HAProxy not routing domain SNI correctly
Fixes:
- Check DNS:
dig +short yourdomain.com @8.8.8.8 - Check Caddy:
systemctl status caddy - Check HAProxy:
/etc/haproxy/haproxy.cfg
Connection drops after seconds
Causes:
- System clock skew >30 seconds between client and server
- MTU issues on the network path
- ISP resetting long-lived TLS sessions
Fixes:
- Server:
timedatectl set-ntp true. Client: enable automatic date/time - Try a different network
- Use WSS/CDN connection (domain mode)
Setup fails
Port 443 conflict
Another service (Apache, Nginx) is using port 443. Stop it or use a clean server. meridian preflight will tell you what’s using the port.
Docker installation fails
Conflicting Docker packages from distro repos. Meridian auto-removes them, but if Docker is already running with containers, it skips to avoid disruption.
SSH connection errors
Test SSH manually: ssh root@SERVER_IP. Ensure you have key-based access. Use --user flag if not root.
Was working, now stopped
Most common cause: Server IP got blocked. This is very common in censored regions.
Fixes:
- Run
meridian test IP— if TCP fails, the IP is likely blocked - Use the WSS/CDN link (domain mode)
- Deploy a new server: get a new IP and re-run
meridian deploy
Other causes:
- Server rebooted and Docker didn’t auto-start →
docker start 3x-ui - Disk full →
df -h /,docker system prune -af
Slow speeds
- Choose a server geographically closer (Finland, Netherlands, Sweden for Europe/Middle East)
- Check server load:
htoporuptime - Try WSS/CDN link — may have better routing through Cloudflare
- Verify BBR is enabled:
sysctl net.ipv4.tcp_congestion_control
Do NOT run other protocols (OpenVPN, WireGuard) on the same server — it flags the IP.
AI-powered help
meridian doctor --ai
Copies a diagnostic prompt to your clipboard for use with any AI assistant.
Or collect diagnostics for a GitHub issue:
meridian doctor