nginx中的server_name指令主要用于配置基于名称虚拟主机.

一 匹配顺序,server_name指令在接到请求后的匹配顺序如下:

1、确切的server_name匹配,例如:

server {
listen ;
server_name www.sklinux.com sklinux.com;
...
}

2、以*通配符开始的最长字符串:

server {
listen ;
server_name *.sklinux.com;
...
}

3、以*通配符结束的最长字符串:

server {
listen 80;
server_name www.*;
...
}

注意: 通配符名字只可以在名字的起始处或结尾处包含一个星号,并且星号与其他字符之间用点分隔。所以,“www.*.example.org”和“w*.example.org”都是非法的。

有一种形  如“.example.org”的特殊通配符,它可以既匹配确切的名字“example.org”,又可以匹配一般的通配符名字“*.example.org”。

4、匹配正则表达式:

server {
listen 80;
server_name ~^(?<www>.+)\.sklinux\.com$;
...
}

nginx将按照1,2,3,4顺序对server name进行匹配(而和配置段本身的排版顺序无关),只要有一项匹配以后就会停止搜索。

二。 server_name指令的正则表达式应用

server_name指令一项很实用的功能便是可以在使用正则表达式的捕获功能.nginx使用的正则表达式兼容PCRE。

为了使用正则表达式,虚拟主机名必须以波浪线“~”起始否则该名字会被认为是个确切的名字:

server_name  ~^www\d+\.example\.net$;

如果表达式含星号,则会被认为是个通配符名字(而且很可能是一个非法的通配符名字)。不要忘记设置“^”和“$”锚点,
       语法上它们不是必须的,但是逻辑上是的。同时需要注意的是,域  名中的点“.”需要用反斜线“\”转义。含有“{”和“}”的正则
       表达式需要被引用,如:

server_name  "~^(?<name>\w\d{1,3}+)\.example\.net$";

否则nginx就不能启动,错误提示是:

directive "server_name" is not terminated by ";" in ...

命名的正则表达式捕获组在后面可以作为变量使用:

server {
server_name ~^(www\.)?(?<domain>.+)$; location / {
root /sites/$domain;
}
}

PCRE使用下面语法支持命名捕获组:

?<name>    从PCRE-.0开始支持,兼容Perl .10语法
?'name' 从PCRE-.0开始支持,兼容Perl .10语法
?P<name> 从PCRE-.0开始支持,兼容Python语法

如果nginx不能启动,并显示错误信息:

pcre_compile() failed: unrecognized character after (?< in ...

说明PCRE版本太旧,应该尝试使用?P<name>。捕获组也可以以数字方式引用:

server {
server_name ~^(www\.)?(.+)$; location / {
root /sites/$;
}
}

不过,这种用法只限于简单的情况(比如上面的例子),因为数字引用很容易被覆盖。

下面是2个具体的应用:

1. 在一个server块中配置多个站点

server
{
listen ;
server_name ~^(www\.)?(.+)$;
index index.php index.html;
root /data/wwwsite/$;
}

站点的主目录应该类似于下面的结构,这样就可以只使用一个server块来完成多个站点的配置。

/data/wwwsite/sklinux.com
/data/wwwsite/baidu.com
/data/wwwsite/sina.com
/data/wwwsite/google.com

本例中正则表达式捕获组创建了变量,普通的正则表达式捕获组可以创建$0、$1、…、$9这10个变量。$0表示原串,$1-$9表示第一到第九个匹配组的内容。

2. 在一个server块中为一个站点配置多个二级域名

实际网站目录结构中我们通常会为站点的二级域名独立创建一个目录,同样我们可以使用正则的捕获来实现在一个server块中配置多个二级域名:

server
{
listen ;
server_name ~^(.+)?\.sklinux\.com$;
index index.html;
if ($host = sklinux.com){
rewrite ^ http://www.sklinux.com permanent;
}
root /data/wwwsite/sklinux.com/$/;
}

站点的目录结构应该如下:

/data/wwwsite/sklinux.com/www/
/data/wwwsite/sklinux.com/nginx/

这样Root目录和目标HOST地址的对应关系如下:

http://www.sklinux.com   <-->   /data/wwwsite/sklinux.com/www/

http://nginx.sklinux.com <-->   /data/wwwsite/sklinux.com/nginx/

后面if语句的作用是将sklinux.com的方位重定向到http://www.sklinux.com,这样既解决了网站的主目录访问,又可以增加seo中对http://www.sklinux.com的域名权重。

3.多个正则表达式

如果你在server_name中用了正则,而下面的location字段又使用了正则匹配,这样将无法使用$1,$2这样的引用,解决方法是通过set指令将其赋值给一个命名的变量:

server
{
listen ;
server_name ~^(.+)?\.sklinux\.com$;
set $www_root $;
root /data/wwwsite/sklinux.com/$www_root/;
location ~ .*\.php?$ {
fastcgi_pass 127.0.0.1:;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwsite/sklinux.com/$fastcgi_script_name;
include fastcgi_params;
}
}

nginx 配置的server_name参数的更多相关文章

  1. nginx 配置的server_name参数(转)

    转自:http://www.sklinux.com/373 nginx中的server_name指令主要用于配置基于名称虚拟主机. 一 匹配顺序,server_name指令在接到请求后的匹配顺序如下: ...

  2. nginx配置一般优化参数

    #user nobody; worker_processes 2; # CPU亲和力,worker_processes最多开启8个,注意写法 worker_cpu_affinity 01 10; wo ...

  3. nginx配置的server_name无法访问

    问题: 我的nginx.conf配置文件中的server_name是这样子的,然后无法访问. 但是如果说server_name后面改成服务器的IP地址却是可以访问的. 解决方案: 在本机上(不是服务器 ...

  4. nginx配置文件结构

    nginx配置文件结构   全局参数 配置系统全局参数如:worker_processes 工作子进程数量.error_log 错误日志路径.pid 进程IDEvent一般是配置nginx工作模式及连 ...

  5. nginx响应高并发参数配置

    一.一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1.  worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu ...

  6. 【nginx】nginx配置文件结构,内置变量及参数调优

    Nginx的配置文件是一个纯文本文件,它一般位于Nginx安装目录的conf目录下,整个配置文件是以block的形式组织的.每个block一般以一个大括号“{”来表示.block 可以分为几个层次,整 ...

  7. Nginx 配置及参数详解

    Nginx 配置及参数详解 Nginx Location 指令语法 如下就是常用的 location 配置的语法格式,其中modifier是可选的,location_match就是制定 URI 应该去 ...

  8. Nginx 配置参数中文说明

    Nginx配置参数中文详细说明: #定义Nginx运行的用户和用户组 user www www; # #nginx进程数,建议设置为等于CPU总核心数. worker_processes ; # #全 ...

  9. Nginx 笔记(四)nginx 原理与优化参数配置 与 nginx 搭建高可用集群

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.nginx 原理与优化参数配置 ​ ​ master-workers 的机制的好处 首先,对于每个 ...

随机推荐

  1. 视觉AI风口一触即发,虹软AI沙龙点金深圳

    7月26日,虹软AI沙龙在深圳湾科技生态园空间举办.AI沙龙是基于虹软视觉开放平台的开发者交流沙龙,旨在通过分享最新的实战案例,帮助开发者解决技术及落地难题,让技术更贴近实用场景. 本次活动中,深圳市 ...

  2. js 判断数组中是否包含某个元素(转载)

    来源:https://www.cnblogs.com/yunshangwuyou/p/10539090.html 方法一:array.indexOf(item,start):元素在数组中的位置,如果没 ...

  3. Entity framework 生成的SQL如何设置兼容低版本的数据(转载)

    来源:https://q.cnblogs.com/q/84401/ 右键 edmx 文件,有xml方式打开. 将ProviderManifestToken 改为 2008 .

  4. 微信支付接口--超详细带注释代码--Demo

    如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ 如果解决不了,可以在文末进群交流. 如果对你有帮助的话麻烦点个[推荐]~最好还可以follow一下我的GitHub~感谢观看! 微 ...

  5. python(if判断)

    一.if判断 如果 条件满足,才能做某件事情, 如果 条件不满足,就做另外一件事情,或者什么也不做 注意: 代码的缩进为一个 tab 键,或者 4 个空格 在 Python 开发中,Tab 和空格不要 ...

  6. 使用gdb调试应用程序

    目录 一.gdb基本使用 1. 启动gdb 2. gdb交互式命令 一.gdb基本使用 ​ GDB是一个由GNU开源组织发布的.UNIX/LINUX操作系统下的.基于命令行的.功能强大的程序调试工具. ...

  7. 使用fail2ban预防被挖洞的笔记

    参考:https://blog.csdn.net/dorisnzy/article/details/82926067 1.安装fail2ban: yum -y install epel-release ...

  8. Python入门篇-封装与解构和高级数据类型集合(set)和字典(dict)

    Python入门篇-封装与解构和高级数据类型集合(set)和字典(dict) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.封装和结构 #!/usr/bin/env pytho ...

  9. sshd安全加固

    常见的防护措施: ——用户限制,黑白名单 ——更改验证方式(密码——>密钥对) ——防火墙..... 修改 sshd 配置文件 /etc/ssh/sshd_config -port 3389 # ...

  10. SQL EXPLAIN优化详解

    使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是 如何处理你的SQL语句的.分析你的查询语句或是表结构的性能瓶颈.使用方式:Explain+SQL语句执行计划包含的信息: ...