JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

nginx-二级域名泛解析server虚拟主机配置

wys521 2024-10-03 03:58:57 精选教程 25 ℃ 0 评论

把一个域名在DNS那边做了泛解析。理论上一个域名可以有N个二级域名。比如有域名abcdomain.com,然后要配置N个二级域名,配置文件要N个server配置:

server {

server_name abc.abcdomain.com;

root /home/abcdomain.com/abc;

index index.html index.php;

...

}

server {

server_name xyz.abcdomain.com

root /home/abcdomain.com/xyz;

index index.html index.php;

...

}

server {

server_name opq.abcdomain.com

root /home/abcdomain.com/opq;

index index.html index.php;

...

}

如果一个一个的去配置,麻烦不说,还会造成非常庞大的nginx配置文件,消耗了内存不说还会导致启动速度变慢。那么二级域名泛解析如何避免庞大的配置文件?nginx的server_name 的参数支持三种形式,可以是常量,就是直接域名字符串,也可以使用通配符,最重要的是可以使用正则表达式。

比如上面的这个我们可以配置成一个server:

server {

server_name ~^(?<subdomain>[a-z0-9]+)\.abcdomain.com;

root /home/abcdomain.com/$subdomain;

index index.html index.php;

...

}

如果是不想匹配所有的主域名和子域名

server {

server_name ~^(?<subdomain>[a-z0-9]+)\.(?<domain>[a-z0-9\-]+)\.(?<domext>[a-z]+);

root /home/$domain.$domext/$subdomain;

index index.html index.php;

...

}

但是,一定要注意,如果没做处理,php脚本收到的$_SERVER['SERVER_NAME' ]就这个正则表达式,你不是你认为的相应的域名,这会导致一系列的问题。那么如何让PHP可以获取到正确的域名呢?如果你使用的php-fpm,那么编辑/usr/local/nginx/conf/fastcgi_params(注意,你的环境不一定是这个文件)

#fastcgi_param SERVER_NAME $server_name;

fastcgi_param SERVER_NAME $subdomain.$domain.$domext; 或

#fastcgi_param SERVER_NAME $host;

理论上,使用$host也是不太可靠的,当然就目前主流的浏览器大部分应该是没问题的。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表