Nginx配置多个域名

前言

解决Cookie跨域请求的时候, 发现这样一个网站scripts.cmbuckley.co.uk, 它拥有无限的子域名, 比如a.scripts.cmbuckley.co.ukb.scripts.cmbuckley.co.ukhhhhh.scripts.cmbuckley.co.uk.

实现思路

这里用本地环境测试, 在虚拟机搭建一个Nginx服务器.
Nginxserver_nameserver块里面配置, 用于配置基于名称的虚拟主机。
比如/etc/nginx/conf.d/default.conf中配置的就是localhost.

1
2
3
4
5
server {
listen 80;
server_name localhost;
...
}

我们修改hosts, 把localhost指向服务器的IP, 然后访问http://localhost:80.

1
192.168.94.189 localhost

浏览器发送的请求头会携带一个Host参数localhost, Nginx根据这个Host将请求分发到名为localhostserver进行处理。
如果有多个server, 则会按从上到下的顺序一个个匹配, 如果都匹配不到, 则默认交给第一个请求, 或者也可以指定default_server.

各种server_name

server_name支持精确匹配, 支持通配符匹配, 支持正则匹配

1
2
3
4
server_name  domain.com  www.domain.com;
server_name *.domain.com;
server_name domain.*;
server_name ~^(?.+)\.domain\.com$;

很明显, 上面提到的无限子域名的网站, 是通过*.domain.com的方式实现的.
Nginx配好后, 记得hosts文件也要改, 手头没有域名, 就只能改hosts了.

参考资料