跳转至

13. nginx的server模块

nginx的server模块

  • 指令后可以跟多个域名,第一个是主域名

语法:server_name_in_redirect on|off

默认:off

  • 泛域名仅支持在最前或者最后

server_name *.xxx.com

  • 正则表达式:加~前缀

server_name ~^www.\d+.xxx.com$

server模块操作

  • server_name_in_redirect on|off默认是关闭
server {
   server_name primary.abc.com second.abc.com;
   server_name_in_redirect on;
   return 302 /redirect;


}
重定向
[root@localhost vhosts]# curl primary.abc.com -I
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.14.2
Date: Sat, 27 Jun 2020 08:30:06 GMT
Content-Type: text/html
Content-Length: 161
Location: http://primary.abc.com/redirect
Connection: keep-alive

[root@localhost vhosts]# curl second.abc.com -I
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.14.2
Date: Sat, 27 Jun 2020 08:30:10 GMT
Content-Type: text/html
Content-Length: 161
Location: http://primary.abc.com/redirect
Connection: keep-alive

server_name中的变量使用

  • 匿名变量小括号做分组
    server{
      server_name ~^(www\.)?(.+)$;
      location / {
         root /sites/$2;
    }
    }
    $2取第二个括号的变量
    
  • 有名变量
server{
  server_name ~^(www\.)?(?<dom>.+)$;
  location / {
     root /sites/$dom;
}
}
  • 其他形式
.xxx.com 可以匹配xxx.com *.xxx.com
_匹配所有  server_name _;
"" 匹配没有传递HOST头部

server的匹配顺序

  • 精确匹配

  • *在前的泛域名

  • *在后的泛域名

  • 按文件中的顺序匹配正则表达式域名

  • default server