--------------------------------

一、前言

二、环境

三、特点介绍

1.物理目录

2.基于别名的虚拟目录

3.基于ip的虚拟主机

4.基于端口的虚拟主机

5.基于主机头的虚拟主机

四、配置

五、普通用户个人主页配置(附加)

--------------------------------


一、前言

  访问web服务,本质上看(从协议上)是访问某个IP的主机上的某个端口(默认是80)通常需要通过访问不同的域名或者端口实现对不同网站的访问(具体到服务器里就是不同目录),这个时候就需要设置虚拟主机(VirtualHost).通常分为这样4种:基于域名,基于端口,基于IP,以及它们的混合。


二、环境

系统:redhat6.5 32位

IP:192.168.2.200/24


三、特点介绍:

1.物理目录

必须放在申请站点的主目录下  /var/www/html

2.基于别名的虚拟目录

放置任意位置(访问使用别名)

3.基于ip的虚拟主机

特点:多个ip   多个fqdn  端口都是80  

4.基于端口的虚拟主机(selinux)

特点:少量ip   少量名称  多个端口     多个站点

5.基于主机头的虚拟主机(最流行的)

特点:少量ip   多个名称  端口都是80   多个站点


四、配置(关闭防火墙及SELinux)

1.物理目录


# service iptables stop
# setenforce 0
# cd /var/www/html/
# mkdir baidu
# echo Welcome to baidu! >baidu/index.html
# mkdir tencent
# echo Welcome to tencent! >tencent/index.html
# service httpd start


wKioL1N2stbjgdPKAADupzRdCJo984.jpg


wKiom1N2swTjHuzzAAD1C0bBag0430.jpg

2.基于别名的虚拟目录


# vim /etc/httpd/conf/httpd.conf
552  Alias /virtual   "/tmp/abc"
# mkdir /tmp/abc
# echo 'This is a virtual page.' >/tmp/abc/index.html
# service httpd restart


wKioL1N2stmSIywSAADxXpM5teY779.jpg

3.基于ip的虚拟主机

案例:三个IP分别对应三个域名及三个目录

192.168.2.200    www.abc.com     /var/www/abc

192.168.2.201    tec.abc.com     /var/www/tec

192.168.2.202    mkt.abc.com     /var/www/mkt


# ifconfig eth0:0 192.168.2.201     //设置临时IP
# ifconfig eth0:1 192.168.2.202     //本小节实验做完后记得把临时IP去掉,重启网卡即可去掉。
# cd /var/www/
# mkdir abc tec mkt
# echo 'Welcome to www.abc.com'>abc/index.html
# echo 'Welcome to tec.abc.com'>tec/index.html
# echo 'Welcome to mkt.abc.com'>mkt/index.html
# vim /etc/httpd/conf/httpd.conf
1010 <VirtualHost 192.168.2.200:80>
1011     ServerAdmin root@abc.com
1012     DocumentRoot /var/www/abc
1013     ServerName www.abc.com
1014     ErrorLog logs/error_log
1015     CustomLog logs/access_log  combined
1016 </VirtualHost>
1017 <VirtualHost 192.168.2.201:80>
1018     ServerAdmin root@abc.com
1019     DocumentRoot /var/www/tec
1020     ServerName tec.abc.com
1021     ErrorLog logs/tec_error_log
1022     CustomLog logs/tec_access_log  combined
1023 </VirtualHost>
1024 <VirtualHost 192.168.2.202:80>
1025     ServerAdmin root@abc.com
1026     DocumentRoot /var/www/mkt
1027     ServerName mkt.abc.com
1028     ErrorLog logs/mkt_error_log
1029     CustomLog logs/mkt_access_log  combined
1030 </VirtualHost>
# service httpd configtest           //语法检查
Syntax OK
# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

写入客户端的hosts文件(只是测试,不再搭建DNS服务器)

192.168.2.200  www.abc.com

192.168.2.201  tec.abc.com

192.168.2.202  mkt.abc.com


测试:

http://www.abc.com

wKiom1N2swHQaOUgAADkyIkr6Vg208.jpg

http://tec.abc.com

wKiom1N2swSTzX-eAADgpbmVBPI530.jpg

http://mkt.abc.com

wKioL1N2stiAXhIHAADW_G5iLRY408.jpg

4.基于端口的虚拟主机

案例:一个IP对应同一个域名,但是多个端口,不同目录

192.168.2.200   www.abc.com    80    /var/www/abc

192.168.2.200   www.abc.com    800   /var/www/tec

192.168.2.200   www.abc.com    8000  /var/www/mkt


# vim /etc/httpd/conf/httpd.conf
136 Listen 80
137 Listen 800
138 Listen 8000
1012 <VirtualHost 192.168.2.200:80>
1013     ServerAdmin root@abc.com
1014     DocumentRoot /var/www/abc
1015     ServerName www.abc.com
1016     ErrorLog logs/error_log
1017     CustomLog logs/access_log combined
1018 </VirtualHost>
1019 <VirtualHost 192.168.2.200:800>
1020     ServerAdmin root@abc.com
1021     DocumentRoot /var/www/tec
1022     ServerName www.abc.com
1023     ErrorLog logs/tec_error_log
1024     CustomLog logs/tec_access_log combined
1025 </VirtualHost>
1026 <VirtualHost 192.168.2.200:8000>
1027     ServerAdmin root@abc.com
1028     DocumentRoot /var/www/mkt
1029     ServerName www.abc.com
1030     ErrorLog logs/mkt_error_log
1031     CustomLog logs/mkt_access_log  combined
1032 </VirtualHost>
# service httpd configtest
Syntax OK
# service httpd restart
Stopping httpd:                                 [  OK  ]
Starting httpd:                                 [  OK  ]
# netstat -tupln |grep httpd
tcp    0    0 :::8000    :::*     LISTEN      26685/httpd    
tcp    0    0 :::800     :::*     LISTEN      26685/httpd    
tcp    0    0 :::80      :::*     LISTEN      26685/httpd


写入客户端的hosts文件 (只保留这一个)

192.168.2.200  www.abc.com

测试:

http://www.abc.com

wKiom1N2swHQaOUgAADkyIkr6Vg208.jpg

http://www.abc.com:800

wKiom1N2swHjm-eJAADTe3BG5TE914.jpg

http://www.abc.com:8000

wKioL1N2stbB8c6mAADfoyfxNFU634.jpg

5.基于主机头的虚拟主机(最流行的)

案例:相同IP,不同域名,相同端口80,不同目录。

192.168.2.200   www.abc.com      /var/www/abc

192.168.2.200   tec.abc.com      /var/www/tec

192.168.2.200   mkt.abc.com      /var/www/mkt


# vim /etc/httpd/conf/httpd.conf
990 NameVirtualHost 192.168.2.200:80
1010 <VirtualHost 192.168.2.200:80>
1011     ServerAdmin root@abc.com
1012     DocumentRoot /var/www/abc
1013     ServerName www.abc.com
1014     ErrorLog logs/error_log
1015     CustomLog logs/access_log combined
1016 </VirtualHost>
1017 <VirtualHost 192.168.2.200:80>
1018     ServerAdmin root@abc.com
1019     DocumentRoot /var/www/tec
1020     ServerName tec.abc.com
1021     ErrorLog logs/tec_error_log
1022     CustomLog logs/tec_access_log combined
1023 </VirtualHost>
1024 <VirtualHost 192.168.2.200:80>
1025     ServerAdmin root@abc.com
1026     DocumentRoot /var/www/mkt
1027     ServerName mkt.abc.com
1028     ErrorLog logs/mkt_error_log
1029     CustomLog logs/mkt_access_log  combined
1030 </VirtualHost>
# service httpd configtest
Syntax OK
# service httpd restart
Stopping httpd:                                 [  OK  ]
Starting httpd:                                 [  OK  ]


写入客户端的hosts文件

192.168.2.200  www.abc.com

192.168.2.200  tec.abc.com

192.168.2.200  mkt.abc.com


测试:

wKiom1N2swHQaOUgAADkyIkr6Vg208.jpg


wKiom1N2swSTzX-eAADgpbmVBPI530.jpg


wKioL1N2stiAXhIHAADW_G5iLRY408.jpg

五、普通用户个人主页配置(开启防火墙及SELiunx)


# setup     //打开防火墙

wKiom1N2swGzRWITAAEN5z8fTnM799.jpg

允许http出入

wKioL1N2stbAfmTgAAENdVAyq54778.jpg


# vim /etc/httpd/conf/httpd.conf  //修改配置文档
366     #UserDir disabled
373     UserDir public_html
                                                                            
# service httpd start
# useradd nuo                    //添加普通用户
# passwd nuo
# su - nuo
$ pwd
/home/nuo
$ mkdir public_html
$ cd public_html/
$ echo hello >index.html
$ cat index.html
hello
$ ll
-rw-rw-r--. 1 nuo nuo 6 May 14 18:31 index.html
$ cd ..
$ chmod 755 public_html/       //修改权限(最小权限)
$ ll
drwxr-xr-x. 2 nuo nuo 4096 May 14 18:31 public_html
$ cd ..
$ chmod 711 nuo/              //修改权限(最小权限)
$ ll
drwx--x--x. 27 nuo nuo 4096 May 14 18:31 nuo


更改SELinux规则,最小规则。

# su                          //切换到管理员
# getenforce                  //查看SELinux状态
Enforcing
# getsebool -a |grep httpd
httpd_can_network_connect --> off
httpd_enable_homedirs --> off
# setsebool -P httpd_can_network_connect=1    //开启
# setsebool -P httpd_enable_homedirs=1        //开启
# getsebool -a |grep httpd
httpd_can_network_connect --> on
httpd_enable_homedirs --> on
# su - nuo
$ restorecon -Rv /home/nuo/


测试:

http://192.168.2.200/~nuo/

wKiom1N2swSi7A4FAADeZZconeM399.jpg


# vim /etc/httpd/conf/httpd.conf
552  Alias /nuo    "/home/nuo/public_html"        //别名访问
# service httpd restart


http://192.168.2.200/nuo

wKioL1N2stbyq6S5AADh90y5osI785.jpg


ps:如果由于权限及相应规则问题,会无法访问,请小心设置!

wKioL1N2svKTBaLnAAFkYupFQoM295.jpg