nginx配置虚拟主机vhost的方法详解

nginx配置虚拟主机vhost的方法详解

Nginx vhost配置可以实现基于ip、端口号、servername的虚拟主机,避免直接修改主配置文件。nginx下配置虚拟主机vhost非常方便。本文主要介绍nginx配置虚拟主机vhost的方法,有需要的朋友可以参考一下。

前言

所谓虚拟主机,就是可以通过几个不同的url地址到达nginx环境,但是对于不同的URL,处理逻辑是不一样的。

Nginx支持虚拟主机,但是浏览器等客户端并不知道,所以虚拟主机的几个地址应该都指向nginx所在的ip地址,这样虚拟主机的功能才能正常。

环境

系统环境:CentOS6.7

nginx版本:nginx/1.8.1

方案

例如,配置文件位于:/opt/nginx/conf/nginx.conf。

在http {}的末尾,添加下面一行:

包括vhosts/*。conf

也就是说,主配置文件包含*的所有子配置文件。conf在/opt/nginx/conf/vhosts/目录中。[注意:vhosts目录需要手动创建]

添加子配置文件后,还需要通过/opt/nginx/sbin/nginx-t检查配置文件的正确性。

示例

以下是一个php站点的vhost:

vim www.domain.com.conf

服务器{

听80;

服务器名www.domain.com;

位置~ 。php$ {

root/opt/www;

fastcgi _ pass 127 . 0 . 0 . 1:9000;

fastcgi _ index index.php;

fastcgi _ param SCRIPT _ FILENAME $ document _ root $ fastcgi _ SCRIPT _ name;

包括fastcgi _ params

}

位置/{

root/opt/www;

索引index.php;

}

}

高级特性

基于域名的虚拟主机

Nginx首先选择哪个虚拟主机来处理请求。例如,以下三个虚拟主机正在侦听端口*: 80。

服务器{

听80;

example.orgwww.example.org;

.

}

服务器{

听80;

example.netwww.example.net;

.

}

服务器{

听80;

example.comwww.example.com;

.

}

在这个配置中,nginx只检查请求的“Host”头,以决定哪个虚拟主机应该处理请求。如果主机头不匹配任何虚拟主机,或者请求根本不包含主机头,nginx会将请求分发到这个端口上定义的默认虚拟主机。在上面的配置中,列出的第一个虚拟主机是nginx的默认虚拟主机3354,这是nginx的默认行为。此外,您可以显式地将主机设置为默认虚拟主机,即在“listen”指令中设置“default_server”参数:

服务器{

监听80 default _ server

example.netwww.example.net;

.

}

基于域名和IP混合的虚拟主机

在以下配置中,有几个虚拟主机在不同的地址进行侦听:

服务器{

听192 . 168 . 1 . 1:80;

example.orgwww.example.org;

.

}

服务器{

听192 . 168 . 1 . 1:80;

example.netwww.example.net;

.

}

服务器{

听192 . 168 . 1 . 2:80;

example.comwww.example.com;

.

}

在这个配置中,nginx首先测试请求的IP地址和端口是否与服务器配置块中的listen指令配置相匹配。然后nginx继续测试请求的主机头是否与这个服务器块中的server_name的值匹配。如果没有找到主机名,nginx会将这个请求交给默认的虚拟主机进行处理。例如,从端口192.168.1.1:80收到的访问www.example.com的请求将由侦听端口192.168.1.1:80的默认虚拟主机处理,该主机是本例中的第一台服务器,因为该端口上没有定义名为www.example.com的虚拟主机。

默认服务器是监听端口的属性,因此可以为不同的监听端口设置不同的默认服务器:

服务器{

听192 . 168 . 1 . 1:80;

example.orgwww.example.org;

.

}

服务器{

监听192 . 168 . 1 . 1:80 default _ server;

example.netwww.example.net;

.

}

服务器{

监听192 . 168 . 1 . 2:80 default _ server;

example.comwww.example.com;

.

}

server_name匹配顺序

1.精确的服务器名称匹配,例如:

服务器{

听80;

domain.comwww.domain.com;

.

}

2.以*通配符开头的字符串:

服务器{

听80;

server _ name * .domain.com

.

}

3.以*通配符结尾的字符串:

服务器{

听80;

服务器名称www。*;

.

}

4.匹配正则表达式:

服务器{

听80;

服务器名~^(?).域。com $;

.

}

总结

以上就是nginx虚拟主机vhost配置的全部内容。希望这篇文章的内容能给你的学习或者工作带来一些帮助。有问题可以留言交流。

nginx配置虚拟主机vhost的方法详解