> 文章列表 > nginx配置server_name

nginx配置server_name

nginx配置server_name

什么是server_name

nginx是一款非常流行的 web 服务器软件,每个网站都需要配置一个server_name,用于指明该网站的域名。一个nginx服务器可以配置多个server,每个server可以配置一个或多个server_name,以便在同一台服务器上托管多个网站,让每个网站的域名可以正确路由到对应的网站。

server_name的语法

server_name的语法非常简单,一般都是直接在server块中加入以下配置:

server_name mywebsite.com www.mywebsite.com;

这里的mywebsite.com和www.mywebsite.com就是对应的域名。如果有多个域名,不同域名之间用空格隔开。如果需要支持所有域名,可以配置为:

server_name _;

下划线表示匹配所有的域名,这样就可以支持所有的域名了。

server_name的匹配规则

nginx处理请求时,会根据server_name的匹配规则来确定请求所匹配的server块。匹配成功后,nginx便会将请求路由到对应的网站。

当nginx接收到请求时,会从“server_name”列表中从上到下逐一比较,直到找到与请求域名匹配的server_name。由于nginx匹配规则是精确尽可能精确匹配,所以应该优先将特定域名的server_name配置在上面,比如:

server_name www.mywebsite.com mywebsite.com;

这样配置的好处是,在匹配www.mywebsite.com时就不会继续匹配mywebsite.com了,提升了匹配效率。

使用通配符

在server_name中使用通配符可以扩展匹配域名的范围。nginx支持两种通配符:

1. *.example.com

这种方式可以匹配所有以.example.com结尾的域名,比如mail.example.com、order.example.com等。但它不会匹配到两级以上的子域名,比如mail.abc.example.com。

2. abc.*.com

这种方式可以匹配所有以abc开头,.com结尾的二级域名,比如abc.mail.com和abc.order.com等。如果你需要匹配子域名以外的域名,并且不知道子域名的具体名称,那么可以使用下划线来匹配任意子域名。

多个域名指向同一站点

有时候,我们可能需要将多个域名指向同一个网站。在这种情况下,我们可以将多个域名都配置在同一个server_name中,具体如下:

server_name mywebsite.com www.mywebsite.com mynewwebsite.com www.mynewwebsite.com;

这样配置后,以上四个域名都会指向同一站点。

除了在server_name中指定多个域名之外,还可以使用nginx提供的变量来简化配置。例如,我们可以使用$host变量指代请求的域名,这样就可以实现以下的配置:

server_name mywebsite.com www.mywebsite.com;server_name mynewwebsite.com www.mynewwebsite.com;

这样的配置可以实现同样的效果,这样nginx会根据请求域名分别去匹配server_name的值,并将请求路由到对应的站点。