作者:camera98 | 来源:互联网 | 2014-05-28 09:40
最近想在Nginx下配置绑定了同一个IP,同一个端口的多个域名解析到不同的文件夹,二级域名解析到子目录下,但是网上搜索了好多,但是没有成功过的,所以自己就根据语法自己写,现在分享一下我的配置文件先给出我的全部配置吧,然后再一一解释server{list
最近想在 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;