Nginx批量配置多域名绑定

最近想在 Nginx 下配置绑定了同一个 IP ,同一个端口的多个域名解析到不同的文件夹,二级域名解析到子目录下,但是网上搜索了好多,但是没有成功过的,所以自己就根据语法自己写,现在分享一下我的配置文件
先给出我的全部配置吧,然后再一一解释

server {
        listen       80;
        server_name  localhost;
        set $mdomain 'ip';
        if ( $host ~* (\w+\.[a-zA-Z]+)$ ) {
        set $mdomain $1;
        }
        if ( $host ~* (\b(?!www\b)\w+)\.\w+\.[a-zA-Z]+$ ) {
        set $mdir /$1;
        }
        location / {
        index index.html index.php;
        root D:/Web/www/$mdomain$mdir;
        }
        location ~ \.php$ {
                root           D:/Web/www/$mdomain$mdir;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  D:/Web/www/$mdomain$mdir/$fastcgi_script_name;
                include        fastcgi_params;
        }
}

这是 server 下的,server 要放在 http 内。

1.多域名解析 
我的配置文件是根据正则表达式判断域名,然后域名赋给变量,然后变量组成路径

set $mdomain 'ip';
//设置变量 mdomain 的默认值为字符串"ip"
if ( $host ~* (\w+\.[a-zA-Z]+)$ ) {
//对输入的域名进行正则表达式匹配;
set $mdomain $1;
//若匹配则设置变量 mdomain 为正则表达式括号的值;
}

如下图为匹配结果
正则表达式匹配结果
匹配成功就把结果存入变量 mdomain 中,待用;

2.二级域名解析到子文件夹 
二级域名还是根据正则表达式匹配

if ( $host ~* (\b(?!www\b)\w+)\.\w+\.[a-zA-Z]+$ ) {
set $mdir /$1;
}

这是正则表达式的匹配结果。
匹配结果
还是取子域名加上"/"到变量 mdir 中;
location 解析

location / {
index index.html index.php;
root D:/Web/www/$mdomain$mdir;
}

最后 root 到匹配的结果路径中,没有匹配的变量就为空了;例如:www.server110.com 解析的路径是 D:/Web/www/server110.com/www;server110.com 解析的路径就是 D:/Web/www/server110.com;

posted @ 2015-10-19 09:42  Jenkin.K  阅读(628)  评论(0)    收藏  举报