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虚拟主机
在配置Nginx虚拟主机之前,需要编辑Nginx的主配置文件。根据文档提供的信息,打开位于/usr/local/nginx/conf/nginx.conf的配置文件,并在文件的最底部加入如下内容: ```nginx http { server { listen 80; ...
Nginx 虚拟主机与反向代理 Nginx 是一个高性能的 Web 服务器,可以作为虚拟主机和反向代理服务器使用。下面是关于 Nginx 虚拟主机和反向代理的知识点。 1. Nginx 介绍 Nginx 是一个免费的开源软件,运行在类 Unix...
**Nginx虚拟主机配置详解** Nginx是一款高性能、轻量级的Web服务器和反向代理服务器,常被用于互联网应用的负载均衡和高并发处理。在本教程中,我们将深入探讨如何利用Nginx配置虚拟主机,实现多个网站在同一台...
对于Nginx而言,每一个虚拟主机相当于一个在同一台服务器中却相互独立的站点,从而实现一台主机对外提供多个 web 服务,每个虚拟主机之间是独立的,...这篇文章主要介绍了Nginx虚拟主机的相关知识,需要的朋友可以参考下
该文档涉及的知识点主要集中在使用PHP编写Shell脚本来管理Nginx虚拟主机。这里我们将深入探讨这个话题: 1. **PHP作为Shell脚本语言**:通常,Shell脚本用于Linux或Unix系统中的命令行操作。然而,由于PHP具有丰富...
根据给定的信息,我们可以提取并展开以下几个关于Nginx实现虚拟主机的知识点: ### Nginx简介 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,以其稳定性、丰富的功能集、示例配置...
标题中的“php管理nginx虚拟主机shell脚本__2.docx”指的是使用PHP编写的一个Shell脚本来管理和操作Nginx的虚拟主机。这个脚本能够帮助用户创建、删除Nginx的虚拟主机配置,提高运维效率。 描述中提到的“用法”,...
Nginx 虚拟主机 VirtualHost 配置
nginx-module-vts, Nginx 虚拟主机流量状态模块 Nginx 虚拟主机流量状态模块 Nginx 虚拟主机流量状态模块 table-内容版本依赖项兼容性协议屏幕截图安装工具概要说明描述计算和间隔计算控件以获取飞行区域的状态。...
1. **创建虚拟主机**:用户可以输入域名来创建一个新的Nginx虚拟主机。 2. **删除虚拟主机**:用户可以从现有列表中选择一个虚拟主机进行删除,并自动备份删除前的配置文件。 3. **退出脚本**:用户可以选择退出脚本...
**Nginx虚拟主机详解** Nginx是一款高性能的HTTP和反向代理服务器,以其轻量级、高并发处理能力和稳定性著称。在Nginx中,虚拟主机(Virtual Host)是实现多站点在同一台服务器上运行的关键技术。通过虚拟主机,...
标题“nginx虚拟主机配置实例详解”向读者介绍了如何配置nginx虚拟主机的具体案例。nginx是一个高性能的HTTP和反向代理服务器,它也作为一个IMAP/POP3/SMTP服务器。虚拟主机是指在单一服务器上运行多个网络服务或...
欢迎使用LNMP/Nginx 虚拟主机面板 - AMH 01) 简单: 简洁精致,支持ssh、web在线轻松管理维护虚拟主机、MySQL、FTP。 02) 高效: 使用高性能Nginx服务器软件支持,面板基于AMH命令行运行,实现过程快速高效。 ...
在Nginx中,虚拟主机配置允许在一个服务器实例上托管多个独立的网站,这三种方式分别是基于IP、基于端口和基于域名的虚拟主机配置。本文重点讲解基于域名的虚拟主机配置方法,这对于多站点共用同一IP和端口的情况...
Amysql - AMH简介 01) 简单: 简洁精致,支持ssh、web在线轻松管理维护虚拟主机、MySQL、FTP。 02) 高效: 使用高性能Nginx服务器软件支持,面板基于AMH命令行运行,实现过程快速...AMH为独立的一套LNMP/Nginx虚拟