Virtual Host (Apache) ou Server Block / Virtual Server (Nginx), em configurações de um webserver, refere-se a uma prática de servir mais de um site no mesmo servidor. Um Virtual Host pode ser baseado em IP, ou seja, diferentes IPs servindo vários sites no mesmo server, ou ainda baseado em nome de domínio, ou seja, vários domínios servindo no mesmo server.

O termo Virtual Host é normalmente conhecido no Apache, no Nginx a mesma prática é chamada de Server Block ou Virtual Server, pois um Virtual Server é configurado dentro da diretiva server block.

Apache Virtual Host

A configuração de um Virtual Host no Apache é relativamente simples:

Name-based

Virtual Host baseado em nome é mais simples pois o server vai servir diferentes sites usando o mesmo endereço IP.

<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com 
    DocumentRoot "/www/domain"
</VirtualHost>
<VirtualHost *:80>
    ServerName other.example.com
    DocumentRoot "/www/otherdomain"
</VirtualHost>

Ip-based

Virtual Host baseado em IPs requer setup extra de DNS para que funcione corretamente, geralmente configurar name-based é mais simples por conta disso, e a configuração no Apache é assim:

<VirtualHost 172.20.30.40:80>
  DocumentRoot "/www/vhosts/www1"
  ServerName www1.example.com
</VirtualHost>
<VirtualHost 172.20.30.50:80>
  DocumentRoot "/www/vhosts/www2"
  ServerName www2.example.org
</VirtualHost>

Nginx Virtual Host (Server Block / Virtual Server)

No nginx configurar um Virtual Host é muito mais simples, é possível definir um Virtual Host ip-based ou name-based ou ambos no mesmo server block, veja como fica a configuração:

Name-based

server {
  listen      80;
   server_name example.net www.example.net;
   root /var/www/site1
   ...
}
server {
  listen      80;
  server_name example.com www.example.com;
  root /var/www/site2
  ...
}

Nesse exemplo acima o webserver determina o host de acordo com request e faz o roteamento para o server de destino.

Ip-based ou mixed

No mesmo Server Block podemos definir um Virtual Server para ambos ip-based e name-based, veja só:

server {
  listen      192.168.1.1:80;
  server_name example.org www.example.org;
  ...
}
server {
  listen      192.168.1.2:80;
  server_name example.com www.example.com;
  ...
}

Mais detalhes

https://httpd.apache.org/docs/current/vhosts/
https://nginx.org/en/docs/http/request_processing.html