【纠正论坛里的错误,以免误导新人】Nginx官方文档已说明不宜使用 If
详见:
http://wiki.nginx.org/Pitfalls#Using_If
http://wiki.nginx.org/IfIsEvil
用If的效率是低下的,因为Nginx有更好的解决方案,所以没有必要用If
--------------------------- Mtimer 的分割线 ------------------------------------
你首先要知道Nginx配置文件里Server段的执行顺序,很简单:
1.明确的server_name ,比如
www.mtimer.cn blog.mtimer.cn
2. *通配符,比如 *.mtimer.cn
3. 第一个范围广的正则表达式!!忽略其余正则 比如 ~^(?<sub>[a-zA-Z0-9-_] )\.mtimer\.cn$;
--------------------------- 解决方案的分割线 ---------------------------------------
我把多级域名 分为 二级域名 和 其他
一般主要处理二级域名
一个server段
server {
listen 80;
server_name ~^(?<sub>[a-zA-Z0-9-_] )\.mtimer\.cn$;
index index.html index.htm index.php;
root /home/www/mtimer18;
。。。。。
}
上面这个处理所有【未明确定义的】二级域名,并把二级域名名称赋值给 sub,
这样如果你的每个二级域名的根目录不一样,你就可以这样写 root /mtimer/www/$sub;
至于用不到的三级及以上域名,你可以用一个server段跳转到网站首页
server {
listen 80;
server_name _;
return 301
http://www.mtimer.cn$request_uri;
}
再完美一些可以再加个server段,使mtimer.cn跳转到
www.mtimer.cn
server {
server_name mtimer.cn;
return 301 $scheme://www.mtimer.cn$request_uri;
}
-----------------------------完整的一个Nginx Vhost配置【注意:域名要改成自己的】----------------------------------
server {
listen 80;
server_name www.mtimer.cn;
index index.html index.htm index.php;
root /home/www/test;
}
server {
listen 80;
server_name ~^(?<sub>[a-zA-Z0-9-_] )\.mtimer\.cn$;
index index.html index.htm index.php;
root /home/www/$sub;
。。。。。
}
server {
listen 80 default_server;
server_name _;
return 301 http://www.mtimer.cn$request_uri;
。。。。。
}
server {
server_name mtimer.cn;
return 301 $scheme://www.mtimer.cn$request_uri;
。。。。。
}
当然,If不是不能用,但要是在完全理解的基础上和必要时才用。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。