Nginx技巧——在Server_Name指令中使用正则表达式
2021-01-30 21:44
861 查看
一、server_name的匹配顺序
nginx中的server_name指令主要用于配置基于名称虚拟主机,server_name指令在接到请求后的匹配顺序分别为:
1、准确的server_name匹配,例如:
server { listen 80; server_name howtocn.org www.howtocn.org; ... }
2、以*通配符开始的字符串:
server { listen 80; server_name *.howtocn.org; ... }
3、以*通配符结束的字符串:
server { listen 80; server_name www.*; ... }
4、匹配正则表达式:
server { listen 80; server_name ~^(?<www>.+)\.howtocn\.org$; ... }
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; }
站点的主目录应该类似于这样的结构:
/data/wwwsite/howtocn.org /data/wwwsite/linuxtone.org /data/wwwsite/baidu.com /data/wwwsite/google.com
这样就可以只使用一个server块来完成多个站点的配置。
2、在一个server块中为一个站点配置多个二级域名
实际网站目录结构中我们通常会为站点的二级域名独立创建一个目录,同样我们可以使用正则的捕获来实现在一个server块中配置多个二级域名:
server { listen 80; server_name ~^(.+)?\.howtocn\.org$; index index.html; if ($host = howtocn.org){ rewrite ^ http://www.howtocn.org permanent; } root /data/wwwsite/howtocn.org/$1/; }
站点的目录结构应该如下:
/data/wwwsite/howtocn.org/www/ /data/wwwsite/howtocn.org/nginx/
这样访问
http://www.howtocn.org时root目录为
/data/wwwsite/howtocn.org/www/,
http://nginx.howtocn.org时为
/data/wwwsite/howtocn.org/nginx/,以此类推。
后面if语句的作用是将howtocn.org的方位重定向到
http://www.howtocn.org,这样既解决了网站的主目录访问,又可以增加seo中对
http://www.howtocn.org的域名权重。
3、多个正则表达式
如果你在server_name中用了正则,而下面的location字段又使用了正则匹配,这样将无法使用2这样的引用,解决方法是通过set指令将其赋值给一个命名的变量:
server { listen 80; server_name ~^(.+)?\.howtocn\.org$; set $www_root $1; root /data/wwwsite/howtocn.org/$www_root/; location ~ .*\.php?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/wwwsite/howtocn.org/$fastcgi_script_name; include fastcgi_params; } }
相关文章推荐
- Nginx技巧——在Server_Name指令中使用正则表达式
- .net中的正则表达式使用高级技巧 (二)
- NET正则表达式使用高级技巧之替换类
- JS中的正则表达式小小的技巧---TEST方法的使用
- .net中的正则表达式使用高级技巧 (四)
- Nginx技巧:灵活的server_name
- .net中的正则表达式使用高级技巧
- js正则表达式中的问号使用技巧总结
- .NET正则表达式使用高级技巧之工作特点
- .net中的正则表达式使用高级技巧(一、二、三、四)
- 使用sqlserver"查找和替换"的正则表达式和通配符功能
- .net中的正则表达式使用高级技巧 (三)
- .net中的正则表达式使用高级技巧
- .net中的正则表达式使用高级技巧 (二)
- UE中使用正则表达式的一些技巧
- .net中的正则表达式使用高级技巧 (二)
- .NET正则表达式使用高级技巧之组的概念
- .net中的正则表达式使用高级技巧
- [Language-regex]PHP正则表达式的几则使用技巧
- PHP正则表达式的几则使用技巧