Hostnames
Every web service has a stable hostname on kuppit.app from the moment it is created, with HTTPS. It is the address of the service in every environment, and the one the dashboard shows under Kuppit domain on the service's Domains tab. Custom domains are attached beside it; see custom domains.
How a hostname is formed
[<environment>-]<project>[-<service>]-<id>.kuppit.app
- Project is the project's name, lowercased, with anything that is not a letter or digit turned into a hyphen.
- Service is the service's name, omitted when the service is named
web. - Id is six characters derived from the service, so no two services share a hostname and a new service never takes over an old one's.
- Environment leads the hostname everywhere but Production: a preview's
pr-42, a named environment's slug.
For a project named acme:
acme-a1b2c3.kuppit.app web, in Production
acme-api-d4e5f6.kuppit.app api, in Production
pr-42-acme-a1b2c3.kuppit.app web, in the preview for pull request 42
staging-acme-a1b2c3.kuppit.app web, in staging
A few labels are reserved for Kuppit's own use, such as www, app and docs, and the pr-<number>- shape is reserved for previews. A project that would collide with one gets -2 appended instead.
What does not change it
The hostname is reserved once and kept. Deployments, rollbacks, renaming the project and moving infrastructure underneath all leave it alone, and a preview that closes keeps its hostname for when its pull request reopens. It cannot be edited or removed. The id is what makes it unique, not what keeps it private: a generated hostname serves whatever the service serves, to anyone who reaches it.
When it starts answering
The hostname exists from creation, and answers once the service's first deployment goes Live. Until then the Domains tab shows it as Provisioning. When an environment is removed or a preview closes, routing is withdrawn before the service is destroyed, and a visitor gets a plain 404 Domain Not Found from the edge rather than a half-removed service.
What happens to a request
Requests to any hostname, generated or custom, pass through Kuppit's edge before reaching your service.
- Plain HTTP is redirected to HTTPS with a permanent redirect. Certificates are Kuppit's to manage; you never upload one.
- The request is forwarded to the revision that is Live, with its path and query intact. Redirects your application returns go back to the browser as they are.
- Your service sees the original hostname in
X-Forwarded-Host,httpsinX-Forwarded-Proto, and the client's address inX-Forwarded-For. Any values a client sent in those headers are replaced, so they can be trusted. - Every request carries an
X-Kuppit-Request-ID, and every error page from the edge prints it, so a report can be matched to a log line. - A request body larger than 100 MB is refused with 413. Your service has 120 seconds to start responding; after that the edge answers 504.
Services do not have a private network between them. One service reaching another does so over its public hostname, like any other client.