插件窝 干货文章 Nginx怎么配置域名重写和泛域名解析

Nginx怎么配置域名重写和泛域名解析

域名 server Nginx 重写 700    来源:    2025-04-27

Nginx域名重写与泛域名解析配置指南

域名重写配置

基本重定向

server {
    listen 80;
    server_name olddomain.com;
    return 301 $scheme://newdomain.com$request_uri;
}

路径重写

server {
    listen 80;
    server_name example.com;

    rewrite ^/oldpath/(.*)$ /newpath/$1 permanent;
}

条件重写

server {
    listen 80;
    server_name example.com;

    if ($http_host ~* "^www\.(.*)$") {
        set $domain $1;
        rewrite ^(.*)$ $scheme://$domain$1 permanent;
    }
}

泛域名解析配置

基本泛域名配置

server {
    listen 80;
    server_name ~^(.*)\.example\.com$;

    root /var/www/$1;
    index index.html;

    # 可选:记录子域名到日志
    access_log /var/log/nginx/$1.access.log;
}

动态子域名处理

server {
    listen 80;
    server_name ~^(?<subdomain>.+)\.example\.com$;

    location / {
        root /var/www/$subdomain;
        try_files $uri $uri/ =404;
    }
}

泛域名与SSL证书结合

server {
    listen 443 ssl;
    server_name ~^(.*)\.example\.com$;

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

    root /var/www/$1;
    index index.html;
}

综合示例:重写+泛域名

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

    # 强制HTTPS
    if ($scheme = http) {
        return 301 https://$domain$request_uri;
    }

    # 处理子域名
    if ($host ~* ^(.*)\.example\.com$) {
        set $subdomain $1;
        root /var/www/$subdomain;
    }

    # 默认主域名处理
    if ($host = example.com) {
        root /var/www/main;
    }

    # 其他重写规则
    rewrite ^/old-page$ /new-page permanent;
}

注意事项

  1. 正则表达式性能:复杂的正则表达式会影响性能,尽量简化
  2. 缓存问题:重定向后浏览器可能会缓存,测试时使用隐身模式
  3. SSL证书:泛域名需要通配符SSL证书
  4. 安全性:确保动态子域名不会导致目录遍历漏洞
  5. 日志分割:泛域名建议按子域名分割日志文件

以上配置可以根据实际需求进行组合和调整。在修改配置后,记得测试并重载Nginx:

sudo nginx -t  # 测试配置
sudo systemctl reload nginx  # 重载配置