插件窝 干货文章 nginx多域名转发如何实现

nginx多域名转发如何实现

server domain proxy backend 861    来源:    2025-04-26

Nginx多域名转发实现指南

Nginx可以通过配置多个server块来实现多域名转发,以下是最常见的几种实现方式:

1. 基础多域名配置

server {
    listen 80;
    server_name domain1.com;

    location / {
        proxy_pass http://backend1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

server {
    listen 80;
    server_name domain2.com;

    location / {
        proxy_pass http://backend2;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

2. 使用通配符子域名

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

    location / {
        # 根据子域名转发到不同后端
        if ($host ~* ^([^.]+)\.domain\.com$) {
            set $subdomain $1;
            proxy_pass http://backend-$subdomain;
        }
        proxy_set_header Host $host;
    }
}

3. 基于正则表达式的域名匹配

server {
    listen 80;
    server_name ~^(www\.)?(?<domain>.+)$;

    location / {
        # 根据捕获的域名部分进行转发
        proxy_pass http://backend-$domain;
        proxy_set_header Host $host;
    }
}

4. HTTPS多域名配置

server {
    listen 443 ssl;
    server_name domain1.com;

    ssl_certificate /path/to/domain1.crt;
    ssl_certificate_key /path/to/domain1.key;

    location / {
        proxy_pass http://backend1;
        proxy_set_header Host $host;
    }
}

server {
    listen 443 ssl;
    server_name domain2.com;

    ssl_certificate /path/to/domain2.crt;
    ssl_certificate_key /path/to/domain2.key;

    location / {
        proxy_pass http://backend2;
        proxy_set_header Host $host;
    }
}

5. 使用map指令实现动态转发

map $host $backend {
    default default_backend;
    domain1.com backend1;
    domain2.com backend2;
    *.domain.com backend_wildcard;
}

server {
    listen 80;
    server_name _;

    location / {
        proxy_pass http://$backend;
        proxy_set_header Host $host;
    }
}

注意事项

  1. 确保每个server块有唯一的server_name
  2. 配置完成后使用nginx -t测试配置语法
  3. 使用systemctl reload nginxnginx -s reload重新加载配置
  4. 对于HTTPS配置,确保证书路径正确且证书有效
  5. 考虑添加HTTP到HTTPS的重定向

以上配置可以根据实际需求进行组合和调整,Nginx的灵活性允许实现各种复杂的域名转发场景。