Virtual host

On this page 7

A virtual host is a web server configuration block that defines one website on a server that hosts many. In hosting, virtual hosts let a single machine and often a single IP address serve dozens or thousands of domains: the web server reads each incoming request, selects the matching virtual host and applies its document root, TLS certificate, logging and rules.

The term comes from Apache, where each site is a VirtualHost block. Nginx calls the same concept a server block, and control panels such as cPanel, Plesk and CloudPanel generate these configurations automatically whenever a customer adds a domain.

How a virtual host is selected

Selection happens in two steps. The web server first narrows the candidates by the IP address and port on which the connection arrived. It then compares the HTTP Host header, or the :authority field in HTTP/2 and HTTP/3, with the names each candidate declares, such as ServerName and ServerAlias in Apache or server_name in Nginx.

For HTTPS, the server must choose a certificate before it can read the Host header, because the header travels inside the encrypted channel. The Server Name Indication (SNI) extension of TLS solves this: the client sends the requested hostname in the TLS handshake, and the server presents the matching certificate. SNI is what makes many HTTPS sites on one IP address possible.

When no name matches, the request goes to the default virtual host. In Apache, this is the first virtual host defined for that address and port; in Nginx, it is the server block marked default_server or, failing that, the first one loaded. Choosing this default deliberately is a security decision, not a detail.

Types of virtual hosting

Virtual hosts are distinguished by what the server uses to tell sites apart. Name-based hosting dominates today because IPv4 addresses are scarce and SNI support is universal in current clients.

TypeSelection keyAddress needsTypical use
Name-basedHost header and SNIOne IP for many sitesShared and managed hosting, most servers
IP-basedDestination IP addressOne IP per siteLegacy clients without SNI, special compliance cases
Port-basedDestination portOne port per siteInternal tools, staging and admin interfaces
Wildcard or pattern-basedWildcard or regular-expression namesOne configuration for many subdomainsMulti-tenant applications and previews
Types of virtual hosting

Mass virtual hosting takes the pattern approach further: the document root is derived from the hostname, so a new site needs only a directory, not a new configuration block. It scales well but makes per-site settings harder.

What a virtual host configuration contains

Although syntax differs between servers, every virtual host defines the same core settings. The table maps them across the two most common web servers.

SettingApache directiveNginx directivePurpose
Address and portVirtualHost *:443listen 443 sslWhere the site accepts connections
Site namesServerName, ServerAliasserver_nameDomains the block answers
Document rootDocumentRootrootDirectory with the site files
TLS certificateSSLCertificateFilessl_certificateCertificate presented through SNI
LogsCustomLog, ErrorLogaccess_log, error_logSeparate logs per site
Application handlerSetHandler to PHP-FPMfastcgi_passWhere dynamic requests go
Core virtual host settings

Good practice puts one virtual host per file, named after the domain, and adds a separate block on port 80 that only redirects to HTTPS. Per-site logs and a per-site PHP-FPM pool under its own user make troubleshooting and isolation much easier.

Virtual hosts in different hosting models

Virtual hosts exist in every hosting model, but who writes and controls them differs. That difference determines how much a site owner can customize.

Hosting modelWho manages virtual hostsCustomer control
Shared hostingProvider, through cPanel or Plesk templatesLimited to panel options and .htaccess
Managed hostingProvider, tuned for one applicationRequests through support or dashboard
VPS with a control panelPanel such as CloudPanel generates filesPanel options plus custom directives
Self-managed serverAdministrator edits files directlyFull control and full responsibility
Virtual hosts across hosting models

A virtual host should not be confused with a virtual server or VPS. A virtual host is a configuration inside one web server process, while a VPS is a whole virtual machine with its own operating system. Many virtual hosts can run on one VPS, and they share its CPU, memory and web server.

The same selection logic also appears in reverse proxies and load balancers. A proxy in front of several backend servers uses host-based routing, which is the virtual host principle applied one layer earlier: it reads the requested name and forwards the request to the backend responsible for that domain. Behind such a proxy, the backend virtual hosts must still recognize the forwarded Host header, or they fall through to their default block.

Common virtual host mistakes

Misconfigured virtual hosts tend to produce confusing symptoms, such as the wrong site appearing for a domain. The usual causes are:

  • An unintended default virtual host, which serves a real customer site for unknown or malicious hostnames.
  • Missing ServerAlias or server_name entries, so the www and bare domain behave differently.
  • Certificate mismatches, where SNI selects a block whose certificate does not cover the requested name.
  • Duplicate names in two blocks, which makes the server pick one silently and log only a warning.
  • Forgetting to reload the web server after changes, or reloading without testing the syntax first.

A safe pattern is a catch-all default block that returns an error or an empty response for unknown names. Run the syntax test, apachectl configtest or nginx -t, before every reload.

Explained without jargon

A virtual host is one website’s entry in a shared building directory. Many websites can live on the same server, just as many companies can share one office building with one street address.

When a visitor arrives, the browser says which website it wants. The server looks up that name in its list of virtual hosts and sends the visitor to the right site’s files. Without this list, one server could only ever show one website.

A typical use case

A freelance developer rents a VPS with one public IPv4 address and hosts 12 client websites on it with Nginx. Each client has a separate server block with its own domain names, document root, access log and PHP-FPM pool running under a dedicated user.

Certificates are issued automatically for every domain, and SNI lets all 12 HTTPS sites share the single IP address. A thirteenth server block is marked as the default and returns an error for any hostname not listed, so scanners that connect by IP address never see a client site.

When a new client signs up, the developer copies a template file, changes the names and paths, runs nginx -t and reloads. The new site is live within minutes without affecting the other twelve.