nginx虚拟主机

配置位置

既可以在七层代理层配置,又可以在业务逻辑层配置。但七层代理层配置的虚拟主机常配合nginx的ngx_http_proxy_module模块使用。 而业务逻辑层配置的虚拟主机常配合nginx的ngx_http_fastcgi_module模块使用。

虚拟主机定义

虚拟主机指的是在单一机器上运行多个网站(例如 company1.xqwin.com 和 company2.xqwin.com)。虚拟主机可以是"基于 IP"的,即每个IP一个站点;或者是"基于域名"的,即每个域名一个站点。这些站点运行在同一物理服务器上,对用户不会有任何感知。Nginx也可以配置多种类型的虚拟主机: 基于IP的虚拟主机、基于端口的虚拟主机、基于域名的虚拟主机。下面将分别介绍这些虚拟主机的配置,及优缺点。

1、基于IP的虚拟主机

可以在一块物理网卡上绑定多个IP地址,这是实现基于IP虚拟主机的前提。
缺点:

配置复杂,运维过程中,不但要关注Nginx 本身的配置、同时也要关注网卡的特殊配置。
在公网IP地址资源比较稀缺的情况下,使用基于IP地址的虚拟主机是一种不切实际的想法。
基于IP地址的虚拟主机,访问的时候需要使用IP地址:端口(默认80不需要写)去访问,在使用上也不是很友好。

实例配置

首先在服务器的网卡上绑定多个IP地址

# ifconfig
# ifconfig eth0:1 192.168.122.189 broadcast 192.168.122.255 netmask 255.255.255.0 up
# route add -host 192.168.122.189 dev eth0:1
# ifconfig eth0:2 192.168.122.190 broadcast 192.168.122.255 netmask 255.255.255.0 up
# route add -host 192.168.122.190 dev eth0:2
# ifconfig
从另外一台服务器ping 192.168.122.189和192.168.122.190两个IP,如果能够Ping通,则证明配置无误。但是通过
ifconfig和route配置的IP别名在服务器重启后会消失,若需要永久生效,可以将这两条ifconng和route命令添加到
/etc/rc.local文件中让系统开机时自动运行。

 nginx虚拟主机_第1张图片

 具体Nginx 上的配置

# cat 192.168.122.189.conf
server {
    listen 192.168.122.189:80;
    server_name 192.168.122.189:80;
    root /data0/www/htdocs/www.blog.xqwin.com;
}
# cat 192.168.122.190.conf
server {
    listen 192.168.122.190:80;
    server_name 192.168.122.190:80;
    root /data0/www/htdocs/www.bbs.xqwin.com;
}

 测试

# echo "hello" > /data0/www/htdocs/www.blog.xqwin.com/html.html
# curl http://192.168.122.189/hello.html
hello
# echo "world" > /data0/www/htdocs/www.bbs.xqwin.com/html.html
# curl http://192.168.122.190/hello.html
world

2、 基于端口的虚拟主机

基于端口的虚拟主机配置,使用端口来区分,浏览器使用域名或IP地址:端口号访问。
缺点: 虚拟主机使用端口去做区分,导致HTTP协议不标准(标准HTTP协议为 80端口)。业务调用方必须要知道业务开启的端口。
且一旦端口改变,调用方和被调用方都需要进行调整。

实例配置

# cat www.blog.xqwin.com.conf
server {
    listen 8080;
    server_name www.blog.xqwin.com;
    root /data0/www/htdocs/www.blog.xqwin.com;
}

# cat www.bbs.xqwin.com.conf
server {
    listen 9090;
    server_name www.bbs.xqwin.com;
    root /data0/www/htdocs/www.bbs.xqwin.com
}

测试

# /usr/local/nginx/sbin/nginx -s stop
# /usr/local/nginx/sbin/nginx
# curl http://127.0.0.1:8080/hello.html
hello
# curl http://127.0.0.1:9090/hello.html
world

 3、基于域名的虚拟主机

基于域名的虚拟主机是最常见的一种虚拟主机。只需配置DNS服务器,将每个主机名映射到正确的lP地址。然后配置Nginx
服务器,令其识别不同的主机名就可以了。这种虚拟主机技术使很多虚拟主机可以共享同一个lP地址,有效解决了lP地址
不足的问题。在没有特殊要求必须用一个基于IP的虚拟主机或基于端口的虚拟主机时,最好还是使用基于域名的虚拟主
机。
优点:
所有虚拟主机使用同一个端口,弥补了基于端口虚拟主机的缺陷
所有虚拟主机使用同一个IP地址,弥补了基于IP虚拟主机的缺陷

实例配置

# cat www.blog.xqwin.com.conf
server {
    listen 80;
    server_name www.blog.xqwin.com;
    root /data0/www/htdocs/www.blog.xqwin.com;
}

# cat www.bbs.xqwin.com.conf
    server {
    listen 80;
    server_name www.bbs.xqwin.com;
    root /data0/www/htdocs/www.bbs.xqwin.com;
}

测试

# curl http://127.0.0.1/hello.html -H "HOST: www.blog.xqwin.com"
hello
# curl http://127.0.0.1/hello.html -H "HOST: www.bbs.xqwin.com"
world

4、设置默认虚拟主机

默认虚拟主机就是配置文件里的第一个虚拟主机。关于默认虚拟主机有个特点,凡是解析到这台机器的域名,不管是什么
域名,只要在配置文件中没有配置,那么都会访问到这个虚拟主机上来。也就是说默认虚拟主机是一个兜底的虚拟主机。
在Nginx中若不指定默认虚拟主机,同样配置文件中的第一个虚拟主机将会是默认虚拟主机。若手动指定虚拟主机应该怎
样去配置呢?

实例配置

server {
    listen 80 default_server; #说明是默认虚拟主机。
    server_name _ ; #虚拟主机没有域名,为空。
    root /data0/www/htdocs/default;
    access_log /data0/www/logs/default-access_log main;
    error_log /data0/www/logs/default-error_log;
    # 将所有的未知请求,都导流到 xqwin.com 服务上。
    rewrite ^/(.*) http://xqwin.com/$1 permanent;
}

 

 

你可能感兴趣的:(nginx,虚拟主机)