# Nginx Server_name Wildcard or Catch-all

In Nginx, you can configure `server_name` directives to handle requests for different domains using wildcard or catch-all patterns. This allows you to handle various subdomains or domains with a single server block. Here’s how you can configure wildcard and catch-all server names in Nginx:

### **1. Wildcard Subdomains**

Wildcard subdomains match any subdomain under a given domain. For example, `*.example.com` will match `www.example.com`, `blog.example.com`, `shop.example.com`, etc.

**Example Configuration:**

```
server {
    listen 80;
    server_name *.example.com;

    root /var/www/html;
    index index.html index.htm;

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

```

**Explanation:**

- **`server_name *.example.com;`**: Matches all subdomains of `example.com`.

### **2. Catch-All Domain**

A catch-all server block matches any domain or subdomain not explicitly defined in other server blocks. This is useful for handling unknown or wildcard domains.

**Example Configuration:**

```
server {
    listen 80 default_server;
    server_name _;  # Matches any server name

    root /var/www/html;
    index index.html index.htm;

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

```

**Explanation:**

- **`listen 80 default_server;`**: Designates this server block as the default for unmatched domains.
- **`server_name _;`**: A catch-all pattern that matches any domain not specified in other `server_name` directives.

### **3. Specific and Wildcard Combination**

You can combine specific domain names with wildcards to handle both known and unknown domains.

**Example Configuration:**

```
server {
    listen 80;
    server_name www.example.com example.com;

    root /var/www/html;
    index index.html index.htm;

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

server {
    listen 80;
    server_name *.example.com;

    root /var/www/html/subdomains;
    index index.html index.htm;

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

server {
    listen 80 default_server;
    server_name _;

    root /var/www/html/default;
    index index.html index.htm;

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

```

**Explanation:**

- **First Block:** Handles requests for `www.example.com` and `example.com`.
- **Second Block:** Handles all subdomains of `example.com`.
- **Third Block:** Acts as a catch-all for any other domains.

### **4. Example: Handling HTTPS**

If you’re using SSL, configure both HTTP and HTTPS:

**HTTP to HTTPS Redirect and Wildcard Handling:**

```
# HTTP to HTTPS redirect
server {
    listen 80;
    server_name *.example.com example.com;

    return 301 https://$host$request_uri;
}

# HTTPS handling for specific and wildcard domains
server {
    listen 443 ssl;
    server_name *.example.com example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    root /var/www/html;
    index index.html index.htm;

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

# Default server block for unmatched domains
server {
    listen 443 ssl default_server;
    server_name _;

    ssl_certificate /etc/nginx/ssl/default.crt;
    ssl_certificate_key /etc/nginx/ssl/default.key;

    root /var/www/html/default;
    index index.html index.htm;

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

```

**Explanation:**

- **HTTP Block:** Redirects all HTTP requests to HTTPS.
- **HTTPS Blocks:** Handles both specific and wildcard domains with SSL.
- **Default HTTPS Block:** Catches all other domains with default SSL certificates.

### **5. Testing and Validating Configuration**

After configuring Nginx, test the configuration and reload Nginx to apply the changes:

**Test Configuration:**

```bash
sudo nginx -t
```

**Reload Nginx:**

```bash
sudo systemctl reload nginx
```

### **Summary**

- **Wildcard Subdomains:** Use `.example.com` to match all subdomains.
- **Catch-All:** Use `server_name _;` with `listen 80 default_server;` for unmatched domains.
- **Combination:** Combine specific names with wildcards for flexible handling.
- **HTTPS:** Configure HTTP to HTTPS redirects and handle SSL for specific and catch-all domains.

By properly configuring `server_name` with wildcard and catch-all patterns, you can effectively manage multiple domains and subdomains in Nginx.