`
eyesmore
  • 浏览: 376211 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Nginx虚拟主机

阅读更多

 

 

Nginx 虚拟主机

Nginx 的虚拟主机既可以支持“基于域名的”,又可以支持“基于 IP 的”。

备注:2012-02-16更新本BLOG,有时我们还需要基于URL前缀(不是域名)的虚拟主机。比如: 我们集团公司 www.example.com很大,有很多子公司,比如有做上海的子公司,于是这个子公司域名是 shanghai.example.com,这个子公司又有很多应用,比如blog和mail,我们可以 blog.shanghai.example.com ,但你也可以不用这么长的子域名,我想用:shanghai.example.com/blog  则是blog应用首页,shanghai.example.com/mail 则是mail应用首页。类似这种我们给它一个名字叫:基于URL前缀虚拟主机(virtual host based on url prefix)

 

基于域名的虚拟主机很好理解,大家平时见得也很多,简单来讲它是基于 HTTP 请求的可选头 HOST 来分发到不同虚拟主机的。

基于 IP 的虚拟主机,如果一个机器上有两个网卡,分别拥有一个 IP ,让 nginx 分别监听两个网卡上的 80 端口,客户端用不同 IP 访问不同网卡。但是,如果机器上只有一个网卡,依然可以使用基于 IP 的虚拟主机,原因是:一个网卡其实可以配置多个 IP 地址的(这种技术叫做“ IP 别名”)。附录有如何配置 IP 别名的说明。

         下面做个简单的实验来同时演示这两种虚拟主机技术:

Nginx 目录结构:

Nginx->html->vh191->aaa->index.html ,内容: vh191’s aaa index

Nginx->html->vh191->bbb->index.html ,内容: vh191’s bbb index

Nginx->html->vh192->aaa->index.html ,内容: vh192’s aaa index

Nginx->html->vh192->bbb->index.html ,内容: vh192’s bbb index

 

网络配置:同一块网卡上,配置了两个 IP eth0 eth0:1 )。

[root@localhost conf]# /sbin/ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:A7:39:A2

          inet addr:10.228.132.191   Bcast:10.228.133.255  Mask:255.255.254.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:24793 errors:0 dropped:0 overruns:0 frame:0

          TX packets:396 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:100

          RX bytes:2783202 (2.6 Mb)  TX bytes:25007 (24.4 Kb)

          Interrupt:10 Base address:0x2024

                                                                                                               

eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:A7:39:A2

          inet addr:10.228.132.192   Bcast:10.255.255.255  Mask:255.255.254.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:24793 errors:0 dropped:0 overruns:0 frame:0

          TX packets:396 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:100

          RX bytes:2783202 (2.6 Mb)  TX bytes:25007 (24.4 Kb)

          Interrupt:10 Base address:0x2024

 

Nginx 配置文件:

http {} 里面配置有 4 server 块,分别表示 4 个虚拟主机

  server {

      listen        10.228.132.191:80;

      server_name  www.aaa.com;

                                                                                                              

      location / {

          root   html/vh191/aaa/;

          index  index.html index.htm;

       }

  }

                                                                                                             

  server {

     listen       10.228.132.191:80;

     server_name  www.bbb.com;

                                                                                                              

     location / {

        root   html/vh191/bbb/;

        index  index.html index.htm;

      }

}

server {

    listen 10.228.132.192:80;

    server_name www.aaa.com;

                                                                                                              

    location / {

           root   html/vh192/aaa/;

          index  index.html index.htm;

      }

  }

                                                                                                              

  server {

     listen 10.228.132.192:80;

     server_name www.bbb.com;

                                                                                                               

     location / {

          root   html/vh192/bbb/;

          index  index.html index.htm;

     }

}

 

配置文件简单解释下, 4 个虚拟主机,各有两个位于 191 上,两个位于 192 上,然后 191 192 上又分别用域名 aaa bbb 再生出两个虚拟主机。

 

查看端口监听情况:

[root@localhost conf]# netstat -ntpl | grep 80

tcp        0      0 10.228.132.192:80        0.0.0.0:*               LISTEN      11887/nginx

tcp        0      0 10.228.132.191:80        0.0.0.0:*               LISTEN      11887/nginx

[root@localhost conf]#

 

端口监听情况是 10.228.132.192:80 10.228.132.191:80 ,说明两个 IP 都生效了,而且的确是监听在不同的 IP 上。

 

测试结果:

[root@localhost tenebaul]# curl http://www.aaa.com --proxy 10.228.132.191:80

vh191's aaa index

[root@localhost tenebaul]# curl http://www.bbb.com --proxy 10.228.132.191:80

vh191's bbb index

[root@localhost tenebaul]# curl http://www.aaa.com --proxy 10.228.132.192:80

vh192's aaa index

[root@localhost tenebaul]# curl http://www.bbb.com --proxy 10.228.132.192:80

vh192's bbb index

[root@localhost tenebaul]#

 

测试结果可以看出, 4 个虚拟主机都生效了。

 

对应的 access.log 日志:

10.228.132.191 - - [08/Aug/2011:16:27:43 +0800] "GET http://www.aaa.com HTTP/1.1" 200 18 "-" "curl/7.9.8 (i386-redhat-linux-gnu) libcurl 7.9.8 (OpenSSL 0.9.7a) (ipv6 enabled)"

10.228.132.191 - - [08/Aug/2011:16:28:08 +0800] "GET http://www.bbb.com HTTP/1.1" 200 18 "-" "curl/7.9.8 (i386-redhat-linux-gnu) libcurl 7.9.8 (OpenSSL 0.9.7a) (ipv6 enabled)"

10.228.132.192 - - [08/Aug/2011:16:28:35 +0800] "GET http://www.aaa.com HTTP/1.1" 200 18 "-" "curl/7.9.8 (i386-redhat-linux-gnu) libcurl 7.9.8 (OpenSSL 0.9.7a) (ipv6 enabled)"

10.228.132.192 - - [08/Aug/2011:16:29:13 +0800] "GET http://www.bbb.com HTTP/1.1" 200 18 "-" "curl/7.9.8 (i386-redhat-linux-gnu) libcurl 7.9.8 (OpenSSL 0.9.7a) (ipv6 enabled)"

         

 

第三种虚拟主机:基于URL前缀的虚拟主机(Virtual host based on url prefix)                                                                                                    

附录: URL重写请参考   http://eyesmore.iteye.com/blog/1142162  

 

 server

  {

    listen       80;

    server_name  shanghai.example.com  XXX.XXX.XXX.XXXX;

    index index.html index.shtml index.htm index.jsp;

    root  /opt/www/shanghai/WebRoot/;

 

 

    #limit_conn   crawler  20;

    proxy_set_header Host $host;

    proxy_set_header X-Real-IP $remote_addr;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

 

    #Rewrite Log on, rewrite log will be written into error-log file (info level)

    #rewrite_log on;

    #static resources in blog subsys

    location /blog {

             root  /opt/www/blog/WebRoot/;

             rewrite ^/blog/?$ /index.html break;

             rewrite ^/blog/?(.*)$ /$1 break;

             access_log off;

    }

 #dynamic actions(jsp) in blog subsys

    location /blog/dynamic/ {

             proxy_pass http://blogBackends;

             access_log /var/logs/blog_access.log combined buffer=32k;

    }

 

    #main system on shanghai.example.com

    location /  {

             proxy_pass http://mainBackends;

             access_log /opt/logs/nginx_access.log combined buffer=32k;

    }

 

 location ~ .*(WEB-INF)+.*$ {

                return 404;

                break;

    }

 

    location ~* \.(png|jpg|jpeg|gif|ico|swf)$ {

        expires 7d;

        log_not_found off;

        access_log off;

     }

 

    location ~* \.(js|css)$ {

        expires 3d;

        log_not_found off;

        access_log off;

    }

 

    location ~ .*(\.svn)+.*$ {

                return 404;

                break;

                access_log off;

    }

 

附录一、查看网络配置

一般一个机器的网络配置,我们最关心的是: 1 、本机 IP 地址(含子网掩码); 2 、默认网关; 3 DNS 服务器。这三项我们在 windows 下都很熟悉了,那么 linux 的如何查看它们?

1 IP 地址和掩码

[tenebaul@localhost tenebaul]$ /sbin/ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:A7:39:A2

          inet addr:10.228.132.191   Bcast:10.228.133.255  Mask:255.255.254.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:1252 errors:0 dropped:0 overruns:0 frame:0

          TX packets:23 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:100

          RX bytes:100767 (98.4 Kb)  TX bytes:2355 (2.2 Kb)

          Interrupt:10 Base address:0x2024

                                                                                                               

lo        Link encap:Local Loopback

          inet addr:127.0.0.1  Mask:255.0.0.0

          UP LOOPBACK RUNNING  MTU:16436  Metric:1

          RX packets:1609 errors:0 dropped:0 overruns:0 frame:0

          TX packets:1609 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:109702 (107.1 Kb)  TX bytes:109702 (107.1 Kb)

2 、默认网关

[tenebaul@localhost tenebaul]$ /sbin/route

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

10.228.132.0    *               255.255.254.0   U     0      0        0 eth0

169.254.0.0     *               255.255.0.0     U     0      0        0 eth0

127.0.0.0       *               255.0.0.0       U     0      0        0 lo

default         10.228.133.254  0.0.0.0         UG    0      0        0 eth0

[tenebaul@localhost tenebaul]$

3 DNS 服务器

[tenebaul@localhost tenebaul]$ cat /etc/resolv.conf

; generated by /sbin/dhclient-script

search xxx.corp

nameserver 10.228.128.10

nameserver 10.228.128.13

[tenebaul@localhost tenebaul]$

 

附录二、配置 IP 别名

1 、增加 IP 别名

root 权限执行:

ifconfig eth0:1 10.228.132.192 netmask 255.255.254.0

注意: ifconfig 后面的网卡名字是“ eth0:1 ”,不是“ eth0 ”。如果使用“ eth0 ”,则会覆盖原来的 IP ,使用“ eth0:1 ”的意思是,在“ eth0 ”上配置 IP 别名。

 

成功执行后,用 ifconfig 查看,你会发现 eth0 eth0:1

[root@localhost tenebaul]# /sbin/ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:A7:39:A2

          inet addr:10.228.132.191   Bcast:10.228.133.255  Mask:255.255.254.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:4251 errors:0 dropped:0 overruns:0 frame:0

          TX packets:54 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:100

          RX bytes:369044 (360.3 Kb)  TX bytes:4167 (4.0 Kb)

          Interrupt:10 Base address:0x2024

                                                                                                               

eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:A7:39:A2

          inet addr:10.228.132.192   Bcast:10.255.255.255  Mask:255.255.254.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:4251 errors:0 dropped:0 overruns:0 frame:0

          TX packets:54 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:100

          RX bytes:369044 (360.3 Kb)  TX bytes:4167 (4.0 Kb)

          Interrupt:10 Base address:0x2024

                                                                                                              

lo        Link encap:Local Loopback

          inet addr:127.0.0.1  Mask:255.0.0.0

          UP LOOPBACK RUNNING  MTU:16436  Metric:1

          RX packets:8064 errors:0 dropped:0 overruns:0 frame:0

          TX packets:8064 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:552801 (539.8 Kb)  TX bytes:552801 (539.8 Kb)

                                                                                                              

[root@localhost tenebaul]#

 

2 、取消 IP 别名

如果需要取消刚才的 eth0:1 的配置,则执行: /sbin/ifconfig   eth0:1 down

接着用 ifconfig 查看,就看不到 eth0:1 了。

 

值得提醒的是:刚才的配置,如果重启服务器,配置则会丢失。此处仅仅是简单实验,没把命令放入 /etc/rc.local 文件中,操作系统启动时加载。

分享到:
评论

相关推荐

    centos7配置nginx虚拟主机

    centos7配置nginx虚拟主机

    Nginx虚拟主机(HTML).

    在配置Nginx虚拟主机之前,需要编辑Nginx的主配置文件。根据文档提供的信息,打开位于/usr/local/nginx/conf/nginx.conf的配置文件,并在文件的最底部加入如下内容: ```nginx http { server { listen 80; ...

    Web服务器nginx虚拟主机与反向代理.docx

    Nginx 虚拟主机与反向代理 Nginx 是一个高性能的 Web 服务器,可以作为虚拟主机和反向代理服务器使用。下面是关于 Nginx 虚拟主机和反向代理的知识点。 1. Nginx 介绍 Nginx 是一个免费的开源软件,运行在类 Unix...

    03-nginx虚拟主机配置.zip

    **Nginx虚拟主机配置详解** Nginx是一款高性能、轻量级的Web服务器和反向代理服务器,常被用于互联网应用的负载均衡和高并发处理。在本教程中,我们将深入探讨如何利用Nginx配置虚拟主机,实现多个网站在同一台...

    深入浅析Nginx虚拟主机

    对于Nginx而言,每一个虚拟主机相当于一个在同一台服务器中却相互独立的站点,从而实现一台主机对外提供多个 web 服务,每个虚拟主机之间是独立的,...这篇文章主要介绍了Nginx虚拟主机的相关知识,需要的朋友可以参考下

    php管理nginx虚拟主机shell脚本_.docx

    该文档涉及的知识点主要集中在使用PHP编写Shell脚本来管理Nginx虚拟主机。这里我们将深入探讨这个话题: 1. **PHP作为Shell脚本语言**:通常,Shell脚本用于Linux或Unix系统中的命令行操作。然而,由于PHP具有丰富...

    Nginx实现虚拟主机

    根据给定的信息,我们可以提取并展开以下几个关于Nginx实现虚拟主机的知识点: ### Nginx简介 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,以其稳定性、丰富的功能集、示例配置...

    php管理nginx虚拟主机shell脚本__2.docx

    标题中的“php管理nginx虚拟主机shell脚本__2.docx”指的是使用PHP编写的一个Shell脚本来管理和操作Nginx的虚拟主机。这个脚本能够帮助用户创建、删除Nginx的虚拟主机配置,提高运维效率。 描述中提到的“用法”,...

    Nginx 虚拟主机 VirtualHost 配置

    Nginx 虚拟主机 VirtualHost 配置

    nginx-module-vts, Nginx 虚拟主机流量状态模块.zip

    nginx-module-vts, Nginx 虚拟主机流量状态模块 Nginx 虚拟主机流量状态模块 Nginx 虚拟主机流量状态模块 table-内容版本依赖项兼容性协议屏幕截图安装工具概要说明描述计算和间隔计算控件以获取飞行区域的状态。...

    php管理nginx虚拟主机shell脚本__1.docx

    1. **创建虚拟主机**:用户可以输入域名来创建一个新的Nginx虚拟主机。 2. **删除虚拟主机**:用户可以从现有列表中选择一个虚拟主机进行删除,并自动备份删除前的配置文件。 3. **退出脚本**:用户可以选择退出脚本...

    nginx虚拟主机

    **Nginx虚拟主机详解** Nginx是一款高性能的HTTP和反向代理服务器,以其轻量级、高并发处理能力和稳定性著称。在Nginx中,虚拟主机(Virtual Host)是实现多站点在同一台服务器上运行的关键技术。通过虚拟主机,...

    nginx虚拟主机配置实例详解

    标题“nginx虚拟主机配置实例详解”向读者介绍了如何配置nginx虚拟主机的具体案例。nginx是一个高性能的HTTP和反向代理服务器,它也作为一个IMAP/POP3/SMTP服务器。虚拟主机是指在单一服务器上运行多个网络服务或...

    LNMP/Nginx 虚拟主机面板 AMH v5.0.zip

    欢迎使用LNMP/Nginx 虚拟主机面板 - AMH   01) 简单: 简洁精致,支持ssh、web在线轻松管理维护虚拟主机、MySQL、FTP。 02) 高效: 使用高性能Nginx服务器软件支持,面板基于AMH命令行运行,实现过程快速高效。 ...

    Nginx 虚拟主机配置的三种方式(基于域名)

    在Nginx中,虚拟主机配置允许在一个服务器实例上托管多个独立的网站,这三种方式分别是基于IP、基于端口和基于域名的虚拟主机配置。本文重点讲解基于域名的虚拟主机配置方法,这对于多站点共用同一IP和端口的情况...

    LNMP/Nginx 虚拟主机面板 AMH v3.2

    Amysql - AMH简介 01) 简单: 简洁精致,支持ssh、web在线轻松管理维护虚拟主机、MySQL、FTP。 02) 高效: 使用高性能Nginx服务器软件支持,面板基于AMH命令行运行,实现过程快速...AMH为独立的一套LNMP/Nginx虚拟

Global site tag (gtag.js) - Google Analytics