HxHippy

Server Blocks (Virtual Hosts)

Configuring multiple websites with Nginx server blocks.

Last updated: 2025-01-15

Basic Server Block

server {
    listen 80;
    listen [::]:80;

    server_name example.com www.example.com;
    root /var/www/example.com/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

Multiple Server Blocks

# Site 1
server {
    listen 80;
    server_name site1.com www.site1.com;
    root /var/www/site1;
}

# Site 2
server {
    listen 80;
    server_name site2.com www.site2.com;
    root /var/www/site2;
}

# Default server (catch-all)
server {
    listen 80 default_server;
    server_name _;
    return 444;  # Close connection without response
}

Server Name Matching

# Exact match (fastest)
server_name example.com;

# Multiple names
server_name example.com www.example.com;

# Wildcard prefix
server_name *.example.com;

# Wildcard suffix
server_name example.*;

# Regex (slowest)
server_name ~^www\.(?<domain>.+)$;

Listen Directive Options

# Basic
listen 80;
listen 443 ssl;

# IPv6
listen [::]:80;
listen [::]:443 ssl;

# Default server
listen 80 default_server;

# Specific IP
listen 192.168.1.1:80;

# HTTP/2
listen 443 ssl http2;

# Unix socket
listen unix:/var/run/nginx.sock;

WWW Redirect

# Redirect www to non-www
server {
    listen 80;
    server_name www.example.com;
    return 301 https://example.com$request_uri;
}

# Redirect non-www to www
server {
    listen 80;
    server_name example.com;
    return 301 https://www.example.com$request_uri;
}

HTTP to HTTPS Redirect

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}
beginner Core Concepts Updated 2025-01-15
  • nginx
  • server block
  • virtual host
  • server_name
  • listen