Nginx servername配置

Nginx servername配置教程

Nginx 强大的正则表达式支持,可以使 server_name 的配置变得很灵活,如果你要做多用户博客,那么每个用户拥有自己的二级域名也就很容易实现了。

server_name 指令可以设置基于域名的虚拟主机,根据请求头部的内容,一个 ip 的服务器可以配置多个域名。多个域名之间以空格分隔。nginx 允许一个虚拟主机有一个或多个名字,也可以使用通配符 “*” 来设置虚拟主机的名字。

在 Nginx 中,同一个域名和同一个端口可以配置多个不同的 server 里面,同时,可以配置多个不同的 server_name。

server_name配置详解

语法

server_name server_name1 server_name2;

使用环境

server

说明

server_name 配置多个域名时,以空格为分隔。

Nginx server_name匹配顺序

nginx 中的 server_name 指令主要用于配置基于名称虚拟主机,server_name 指令在接到请求后的匹配顺序分别为:

精准匹配

准确的 server_name 匹配,例如:

server { listen 80; server_name haicoder.net www.haicoder.net; ... }

开始通配符

* 通配符开始的字符串,例如:

server { listen 80; server_name *.haicoder.net; ... }

结束通配符

* 通配符结束的字符串:

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

正则匹配

匹配正则表达式,如下:

server { listen 80; server_name ~^(?.+)\.haicoder\.net$; ... }

nginx 将按照上面的顺序对 server name 进行依次匹配,只要有一项匹配以后就会停止搜索,所以我们在使用这个指令的时候一定要分清楚它的匹配顺序(类似于 location 指令)。

ServerName常用写法

nginx 绑定多个域名可又把多个域名规则写一个配置文件里,也可又分别建立多个域名配置文件,一般为了管理方便,每个域名建一个文件,有些同类域名也可又写在一个总的配置文件里。

每个域名一个文件写法

首先打开 nginx 域名配置文件存放目录:/usr/local/nginx/conf/servers ,如要绑定域名 www.haicoder.net 则在此目录建一个文件 www.haicoder.net.conf 然后在此文件中写规则,如:

server { listen 80; server_name www.haicoder.net; #绑定域名 index index.htm index.html index.php; #默认文件 root /home/www/haicoder.net; #网站根目录 include location.conf; #调用其他规则,也可去除 }

一个域名多个文件写法

一个文件添加多个域名的规则也是一样,只要把上面单个域名重复写下来就 ok 了,如:

server { listen 80; server_name www.haicoder.net; #绑定域名 index index.htm index.html index.php; #默认文件 root /home/www/haicoder.net; #网站根目录 include location.conf; #调用其他规则,也可去除 } server { listen 80; server_name m.haicoder.net; #绑定域名 index index.htm index.html index.php; #默认文件 root /home/www/m.haicoder.net; #网站根目录 include location.conf; #调用其他规则,也可去除 }

不带www域名加301跳转

如果不带 www 的域名要加 301 跳转,那也是和绑定域名一样,先绑定不带 www 的域名,只是不用写网站目录,而是进行 301 跳转,如:

server{ listen 80; server_name haicoder.net; rewrite ^/(.*) http://www.haicoder.net/$1 permanent;}

添加404网页

添加 404 网页,都可又直接在里面添加,如:

server { listen 80; server_name www.haicoder.net; #绑定域名 index index.htm index.html index.php; #默认文件 root /home/www/haicoder.net; #网站根目录 include location.conf; #调用其他规则,也可去除 error_page 404 /404.html; }

最后还有一个方法需要注意,可能有需要禁止 IP 直接访问 80 端口或者禁止非本站的域名绑定我们的 IP,这样的话应该如下处理,放到最前一个 server 上面即可:

server{ listen 80 default; server_name _; return 403;}

案例

servername匹配顺序

我们首先,将域名和我们的 nginx 所在服务器配置到我们 windows 的 host 文件中,具体配置如下:

192.168.80.128 www.haicoder.net192.168.80.128 haicoder.net192.168.80.128 m.haicoder.net

现在我们使用 vim 打开 nginx 的默认配置路径,具体命令如下:

vim /etc/nginx/conf.d/default.conf

我们执行如上命令,打开配置文件,接着,我们在 http 下面增加两个 server 配置,具体配置如下:

server { listen 80; server_name www.haicoder.net; #绑定域名 index index.html; #默认文件 root /home/www/haicodernet; #网站根目录}server { listen 80; server_name *.haicoder.net; #绑定域名 index index.html; #默认文件 root /home/haicoder.net; #网站根目录}

配置完毕后,如下图所示:

50_nginx servername配置.png

现在,我们重新加载配置文件,具体命令如下:

nginx -s reload

同时,我们在服务器的两个路径下分别新建两个 index.html 文件,现在,我们在浏览器访问 www.haicoder.net,此时,浏览器输出如下:

51_nginx servername配置.png

我们看到,此时匹配的是第一个 server,现在,我们输入 m.haicoder.net 域名,此时,浏览器输出如下:

52_nginx servername配置.png

我们看到,此时匹配到了第二个 server。

Nginx servername配置总结

Nginx 强大的正则表达式支持,可以使 server_name 的配置变得很灵活,如果你要做多用户博客,那么每个用户拥有自己的二级域名也就很容易实现了。

server_name 指令可以设置基于域名的虚拟主机,根据请求头部的内容,一个 ip 的服务器可以配置多个域名。多个域名之间以空格分隔。nginx 允许一个虚拟主机有一个或多个名字,也可以使用通配符 “*” 来设置虚拟主机的名字。

在 Nginx 中,同一个域名和同一个端口可以配置多个不同的 server 里面,同时,可以配置多个不同的 server_name。