Unauthorized
An Unauthorized error means Virtus Cloud’s edge proxy received your request but could not match it to a deployed application. There are two scenarios that produce this result:Scenario 1 — The subdomain isn't registered to a Virtus Cloud application
Scenario 1 — The subdomain isn't registered to a Virtus Cloud application
Every website or API deployed on Virtus Cloud is assigned a subdomain under the
virtusapp.cloud domain (or a custom domain you’ve configured). If you try to access a subdomain that doesn’t correspond to any currently deployed application, you’ll receive the Unauthorized response.Common cause: You set the SUBDOMAIN field in your virtuscloud.app configuration file after the application was already deployed. The SUBDOMAIN field is only read during the initial deployment process — it is not applied retroactively to a running container.How to fix it: Remove your application from the dashboard and redeploy it with the SUBDOMAIN field correctly set before the deployment runs. The subdomain will be registered as part of the fresh deployment process.Scenario 2 — The application was recently deployed and isn't ready yet
Scenario 2 — The application was recently deployed and isn't ready yet
Immediately after a successful deployment, Virtus Cloud finalizes DNS and proxy configuration for your application’s subdomain. This process takes up to 60 seconds.How to fix it: Wait one minute after deployment completes, then try accessing your URL again.
Timeout
A Timeout error means Virtus Cloud’s proxy reached your application’s container but did not receive an HTTP response within the allowed window. This indicates that your application is either not listening for connections or is failing to respond to them. There are four common causes:Cause 1 — Your application has errors preventing it from responding
Cause 1 — Your application has errors preventing it from responding
If your web server or API throws an unhandled exception during startup or while processing a request, it may stop responding to new connections without crashing entirely.How to fix it: Open the Logs panel in the Virtus Cloud dashboard and look for stack traces, unhandled promise rejections, or exception messages that appeared around the time the timeout started occurring. Fix the underlying error and redeploy.
Cause 2 — Your application is offline or crashed
Cause 2 — Your application is offline or crashed
If your application process has exited, the container has no listener on any port — so all incoming requests time out.How to fix it: Check the Logs panel for crash output. If your application exited with a non-zero status code, identify and fix the cause, then restart or redeploy. Consider enabling Auto Restart to automatically recover from future crashes.
Cause 3 — Your application is listening on the wrong port
Cause 3 — Your application is listening on the wrong port
Virtus Cloud routes all external HTTP traffic to port 80 inside your container. If your web server is configured to listen on a different port (e.g., 3000, 8080, or 5000), the proxy cannot reach it and every request times out.How to fix it: Configure your web server to listen on port
80. Here are examples for common frameworks:Cause 4 — Your application is bound to the wrong host
Cause 4 — Your application is bound to the wrong host
If your web server binds to
127.0.0.1 or localhost instead of 0.0.0.0, it only accepts connections from within the same process — not from Virtus Cloud’s proxy layer.How to fix it: Configure your server to bind to 0.0.0.0, which tells it to accept connections on all available network interfaces. See the code examples above — both the Express and Python examples demonstrate this correctly.Quick Diagnostic Checklist
Use this checklist when your site or API isn’t loading:Identify the error type
Is the browser showing Unauthorized or Timeout? The error type tells you which set of causes to investigate.
Check the application logs
Open the Logs panel in the dashboard. Look for crash output, unhandled exceptions, or messages showing which port your server started on.
Verify your port configuration
Confirm your server is listening on port
80. Search your codebase for listen( or app.run( and check the port argument.Check the SUBDOMAIN field
If you see Unauthorized, confirm that the
SUBDOMAIN field was set before the most recent deployment. If it wasn’t, remove and redeploy the application.If you’ve worked through all of these steps and your site still isn’t accessible, contact the Virtus Cloud support team with your application name and a description of the error you’re seeing.