Nginx中的server_name指令主要用于配置基于名称的虚拟主机,server_name指令在接到请求后的匹配顺序分别为:
1、准确的server_name匹配,
2、以*通配符开始的字符串,
3、以*通配符结束的字符串,
4、匹配正则表达式,
nginx将按照1,2,3,4的顺序对server name进行匹配,只有有一项匹配以后就会停止搜索,所以我们在使用这个指令的时候一定要分清楚它的匹配顺序(类似于location指令)。
server_name指令一项很实用的功能便是可以在使用正则表达式的捕获功能,这样可以尽量精简配置文件,毕竟太长的配置文件日常维护也很不方便。下面是2个具体的应用:
1、在一个server块中配置多个站点
server
{
listen 80;
server_name ~^(www\.)?(.+)$;
index index.php index.html;
root /data/wwwsite/$2;
}
2、在一个server块中为一个站点配置多个二级域名。
实际网站目录结构中我们通常会为站点的二级域名独立创建一个目录,同样我们可以使用正则的捕获来实现在一个server块中配置多个二级域名
server {
listen 80; server_name ~^(.+)?\.domain\.com$;
index index.html;
if ($host = domain.com){
rewrite ^ http://www.domain.com permanent;
}
root /data/wwwsite/domain.com/$1/;
}
以下是个简单的例子
配置conf下的nginx.conf文件
那我们就写个域名和端口的对应关系如下:
localhost 8000
www.xxx.com 8080
base.xxx.com 8090
具体的配置如下:
server {
listen 80;
server_name www.xxx.com ;
location / {
proxy_passhttp://127.0.0.1:8080/;
}
}
server{
listen 80;
server_name base.xxx.com ;
location / {
proxy_passhttp://127.0.0.1:8090/;
}
}
server{
listen 80;
server_name localhost;
location / {
proxy_passhttp://127.0.0.1:8000/;
}
}
网友评论