Nginx中的服务器名称规则
2010-01-02 19:11
169 查看
服务器名称(Server Names)
服务器名称是通过指令server_name来指定的。但是在前面讲的部分,使用的是确切的服务器名称(exact names),当然在实际中还可以使用
wildcard names以及正则表达式的服务器名称
server {
listen 80;
server_name nginx.org www.nginx.org
;
…
}
server {
listen 80;
server_name *.nginx.org;
…
}
server {
listen 80;
server_name mail.*;
}
server {
listen 80;
server_name ~^(?<user>.+)/.nginx/.net$;
…
}
对于一个具体的情况,nginx是通过如下的顺序来查找对应的虚拟服务器名称的
如果有确切的server name,那就选它了
如果匹配*.nginx.org
如果匹配mail.*
最后匹配配置文件的正则表达式
对于上面的匹配,按照从上到下的顺序,如果找到匹配的话,就停止搜索。
Wildcard名称
Wildcard虚拟服务器名称只能够放在名称的最开头或者最尾部,因此,www.*.nginx.org
或者w*.nginx.org是非法的。当然上面的这两个可以通过正则表达式来完成,即~^www/..+/.nginx/.org$或~^w.*/.nginx/.org$。一个*可以匹配好几个名称,因此,*.nginx.org不仅仅可以匹配www.nginx.org
,也可以匹配www.sub.nginx.org
。
当然这里面有一个特殊的情况,即.nginx.org其表示匹配nginx.org和*.nginx.org
正则表达式服务器名称
在Nginx中,正则表达式跟PCRE一样。如果使用正则表达式的话,必须使用~开头,否则会理解为确切的服务器名称,server_name如下图所示:
server_name ~^www/d+/.nginx/.org$
同时不要忘记在正则表达式的前头加上^符号,在后头加上$符号。如果在正则表达式中包括有符号{或者},则必须要用“”包起来
server_name “~^(?<name>/w/d{1,3}+)/.nginx/.net$”
其中在正则表达式里面命名的情况下,在后续中可以作为变量使用,举例如下:
server {
server_name ~^(www/.)?(?<domain>.+)$;
location / {
root /sites/$domain;
}
}
在PCRE中(?<domain>.+)中,这跟python中常用的(?P<domain>.+)是一样的,嘿嘿
关于虚拟服务器名称的其他的说明
如果没有设置server_name,那么就使用hostname作为其server_name
如果HTTP Request头中没有host这一项,则在server_name中指定一个空字符串“”
server {
listen 80;
server_name nginx.org www.nginx.org
“”;
…
}
如果用户使用的是ip地址来访问,则其HTTP Request头的host项是ip地址,则需要在server_name上指定ip地址
server {
listen 80;
server_name nginx.org www.nginx.org
“” 192.168.1.1;
…
}
对于匹配所有的异常情况的话,使用
server {
listen 80 default_server;
server_name _;
return 444;
}
对虚拟服务器名称的优化
最好使用
server {
listen 80;
server_name nginx.org www.nginx.org
*.nginx.org;
…
}
而不是
server {
listen 80;
server_name .nginx.org;
…
}
如果自己定义了很多很长的server_name的话,最好在http层次上将server_names_hash_max_size和
server_names_hash_bucket_size设大一些
http {
server_names_hash_bucket_size 64; //对于server_name太长.它限制 server_name的长度。
server_names_hash_max_size 1024; //对于server_name数
}
参考资料:http://nginx.org/en/docs/http/server_names.html
服务器名称是通过指令server_name来指定的。但是在前面讲的部分,使用的是确切的服务器名称(exact names),当然在实际中还可以使用
wildcard names以及正则表达式的服务器名称
server {
listen 80;
server_name nginx.org www.nginx.org
;
…
}
server {
listen 80;
server_name *.nginx.org;
…
}
server {
listen 80;
server_name mail.*;
}
server {
listen 80;
server_name ~^(?<user>.+)/.nginx/.net$;
…
}
对于一个具体的情况,nginx是通过如下的顺序来查找对应的虚拟服务器名称的
如果有确切的server name,那就选它了
如果匹配*.nginx.org
如果匹配mail.*
最后匹配配置文件的正则表达式
对于上面的匹配,按照从上到下的顺序,如果找到匹配的话,就停止搜索。
Wildcard名称
Wildcard虚拟服务器名称只能够放在名称的最开头或者最尾部,因此,www.*.nginx.org
或者w*.nginx.org是非法的。当然上面的这两个可以通过正则表达式来完成,即~^www/..+/.nginx/.org$或~^w.*/.nginx/.org$。一个*可以匹配好几个名称,因此,*.nginx.org不仅仅可以匹配www.nginx.org
,也可以匹配www.sub.nginx.org
。
当然这里面有一个特殊的情况,即.nginx.org其表示匹配nginx.org和*.nginx.org
正则表达式服务器名称
在Nginx中,正则表达式跟PCRE一样。如果使用正则表达式的话,必须使用~开头,否则会理解为确切的服务器名称,server_name如下图所示:
server_name ~^www/d+/.nginx/.org$
同时不要忘记在正则表达式的前头加上^符号,在后头加上$符号。如果在正则表达式中包括有符号{或者},则必须要用“”包起来
server_name “~^(?<name>/w/d{1,3}+)/.nginx/.net$”
其中在正则表达式里面命名的情况下,在后续中可以作为变量使用,举例如下:
server {
server_name ~^(www/.)?(?<domain>.+)$;
location / {
root /sites/$domain;
}
}
在PCRE中(?<domain>.+)中,这跟python中常用的(?P<domain>.+)是一样的,嘿嘿
关于虚拟服务器名称的其他的说明
如果没有设置server_name,那么就使用hostname作为其server_name
如果HTTP Request头中没有host这一项,则在server_name中指定一个空字符串“”
server {
listen 80;
server_name nginx.org www.nginx.org
“”;
…
}
如果用户使用的是ip地址来访问,则其HTTP Request头的host项是ip地址,则需要在server_name上指定ip地址
server {
listen 80;
server_name nginx.org www.nginx.org
“” 192.168.1.1;
…
}
对于匹配所有的异常情况的话,使用
server {
listen 80 default_server;
server_name _;
return 444;
}
对虚拟服务器名称的优化
最好使用
server {
listen 80;
server_name nginx.org www.nginx.org
*.nginx.org;
…
}
而不是
server {
listen 80;
server_name .nginx.org;
…
}
如果自己定义了很多很长的server_name的话,最好在http层次上将server_names_hash_max_size和
server_names_hash_bucket_size设大一些
http {
server_names_hash_bucket_size 64; //对于server_name太长.它限制 server_name的长度。
server_names_hash_max_size 1024; //对于server_name数
}
参考资料:http://nginx.org/en/docs/http/server_names.html
相关文章推荐
- 国内一些常用PHP的CMS的Nginx服务器的伪静态规则整理
- 网站二级目录或者子目录安装 WordPress 伪静态规则设置方法,服务器为nginx
- nginx 去掉服务器版本和名称和nginx_status 状态说明
- nginx 去掉服务器版本和名称和nginx_status 状态说明
- 服务器相关名称释义(nginx)
- nginx服务器rewrite规则
- discuz 转换nginx服务器后 url重写规则
- nginx学习8——nginx服务器信息隐藏,服务器名称修改
- Nginx 隐藏服务器名称和版本号
- Nginx服务器的location指令匹配规则详解
- Apache和Nginx 重写服务器规则
- Nginx配置location及rewrite规则
- 在nginx中配置如何防止直接用ip访问服务器web server及server_name特性讲解
- Nginx详解-服务器集群
- nginx服务器通过配置来解决API的跨域问题
- 《Drools7.0.0.Final规则引擎教程》番外实例篇——获取规则名称和包名
- nginx做反向代理负载均衡 Java怎么获取后端服务器获取用户IP
- nginx实现 mp4流媒体服务器
- Nginx作为代理服务器如何响应后端服务器的status code
- 关于配置并发访问的服务器apache、nginx