2023.8.20 - nginx子域名简单判断案例

server
    {
        listen 80;
        server_name lvyehao.com;
        index index.html index.htm index.php;
        # 设置子域名目录
        set $doc "lvyehao.com";
        if ($host ~ ^(\w+)\.lvyehao\.com) {
            set $doc $1;
        }
        # 设置此时域名对应的root
        root /www/wwwroot/$doc;
        error_page   404   /404.html;

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /\.
        {
            deny all;
        }

        access_log  /www/wwwlogs/access.log;
    }
include /www/server/panel/vhost/nginx/*.conf;
}

注意点:

  • DNS添加的是cname的解析记录指向当前服务的IP
  • 由于我主域名放的是我另一个资源 lvyehao.com,所以我 $doc 初始值为 "lvyehao.com",否则为 "" 即可
  • if 为匹配规则,root 为服务器对应路径资源,我资源都放在 /www/wwwroot/ 的目录下,大家根据自己服务器真实路径进行配置即可
    这段nginx配置的作用是根据请求的域名设置对应的子域名目录,并将此时域名对应的root设置为/www/wwwroot/$doc

具体分析如下:

  1. set $doc "lvyehao.com"; 这行代码定义了一个变量$doc,初始值为"lvyehao.com"。

  2. if ($host ~ ^(\w+)\.lvyehao\.com) { 这行代码使用正则表达式匹配请求的域名,如果域名满足^(\w+)\.lvyehao\.com的格式,则进入if语句。

  3. set $doc $1; 这行代码将匹配到的第一个子模式(\w+)的值赋给变量$doc。注意,使用了括号将子模式包裹起来,并使用$1引用子模式的值。

  4. root /www/wwwroot/$doc; 这行代码将变量$doc的值拼接在/www/wwwroot/后面作为请求的根目录。

综合起来,这段配置的作用是根据请求的域名,设置对应的子域名目录,然后将请求的根目录设置为/www/wwwroot/$doc。例如,如果请求的域名为test.lvyehao.com,则将根目录设置为/www/wwwroot/test

posted @ 2023-08-20 23:31  吕业浩  阅读(54)  评论(0编辑  收藏  举报