Skip to main content
When your website or API hosted on Virtus Cloud isn’t accessible from a browser or HTTP client, the error message you receive tells you exactly where in the request chain the failure is happening. Virtus Cloud proxies all incoming traffic through Cloudflare, so you’ll typically see one of two error states: Unauthorized or Timeout. Each has a distinct set of causes and a corresponding fix. Understanding which error you’re seeing is the first step to getting your service back online.

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:
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.
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:
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.
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.
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:
const express = require('express');
const app = express();

// Use port 80 for Virtus Cloud
app.listen(80, () => {
  console.log('Server running on port 80');
});
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:
1

Identify the error type

Is the browser showing Unauthorized or Timeout? The error type tells you which set of causes to investigate.
2

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.
3

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.
4

Verify your host binding

Confirm your server binds to 0.0.0.0, not localhost or 127.0.0.1.
5

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.
6

Wait 60 seconds after a fresh deploy

If you deployed within the last minute, wait for Virtus Cloud to finish configuring the proxy, then try again.
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.