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配置的全部内容。希望这篇文章的内容能给你的学习或者工作带来一些帮助。有问题可以留言交流。