(1)构建的目的
如果每台Linux服务器上都为一个网站所用的话,那对于那种访问量少的网站就要承担较高的服务器租赁费而入不敷出了。所以apache就实现了一台服务器上可以建立多个虚拟主机的功能模块,从而达到多个网站分布在一个服务器上,节省硬件资源的目的。访问不同的网站(域名)时,目的地址都为同一台主机,但在客户端是察觉不到的,这就大大节约了小网站的发布成本。
实质:编写多个发布目录,不同的(IP、PORT、域名)指向不同的发布内容。
(2)搭建方法
1、基于域名
#####建立发布目录 [root@server1 www]# mkdir -p virtual/westos.org/{linux,bbs,lee} //没有新建目录是为了保持安全上下文一致,不用再去更改目录及文件的安全上下文 ##.建立并编写发布文件:必须是默认发布文件index.html,否则还需要添加到主配置文件中指定发布文件 [root@server1 www]# echo "linux.westos.org" >> virtual/westos.org/linux/index.html [root@server1 www]# echo "bbs.westos.org" >> virtual/westos.org/bbs/index.html [root@server1 www]# echo "lee.westos.org" >> virtual/westos.org/lee/index.html ####编写子配置文件 [root@apache-server conf.d]# vim vhost.conf //可以是任意名字,只要以.conf结尾,且放在/etc/httpd/conf.d/子目录下。头部为<VirtualHost _default_:80> 下划线被遮住了。 还有一种编写方式为:<VirtualHost 172.25.254.209>:此种强制访问该目录下内容,覆盖一切。当有两个一样的时,以第一个为默认。
<VirtualHost_default_:80> DocumentRoot /var/www/html CustomLog logs/default.log combined </VirtualHost> 以上是虚拟主机的基本信息 <VirtualHost *:80> ServerName news.westos.com DocumentRoot /var/www/vhost/news CustomLog logs/news.log combined </VirtualHost> <Directory "/var/www/vhost/news"> Require all granted </Directory> 以上是news这个虚拟站点的基本信息和授权信息 <VirtualHost *:80> ServerName music.westos.com DocumentRoot /var/www/vhost/music CustomLog logs/music.log combined </VirtualHost> <Directory "/var/www/vhost/music"> Require all granted </Directory> 以上是music这个虚拟站点的基本信息和授权信息 systemctl restart httpd重启才会生效 ###在用浏览器访问的主机上做本地解析 [root@foundation34 Desktop]# vim /etc/hosts ### 172.25.254.134 www.westos.com news.westos.com music.westos.com ###重启服务 [root@apache-server conf.d]# systemctl restart httpd.service网页测试: 2、基于端口
我们可以让服务器开启多个服务端口后,然后让用户能够通过访问服务器的指定端口来找到想要的网站。
第一步:将端口号添加到selinux及firewalld策略中:
[root@server1 conf.d]# systemctl start firewalld [root@server1 conf.d]# firewall-cmd --add-port=6666/tcp --permanent success [root@server1 conf.d]# firewall-cmd --add-port=7777/tcp --permanent success [root@server1 conf.d]# firewall-cmd --reload success [root@server1 conf.d]# semanage port -a -t http_port_t -p tcp 6666 [root@server1 conf.d]# semanage port -a -t http_port_t -p tcp 7777第二步:创建访问目录,写入显示页内容:
[root@server1 virtual]# mkdir 6666 [root@server1 virtual]# mkdir 7777 [root@server1 virtual]# echo "the port is 6666" > 6666/index.html [root@server1 virtual]# echo "the port is 7777" > 7777/index.html第三步:更改配置文件的监听端口:
[root@server1 conf.d]# vim /etc/httpd/conf/httpd.conf第四步:写入子配置文件,重启服务
[root@server1 conf.d]# systemctl restart httpd第五步:测试网页 3、基于IP 由于现在基于IP 的配置需求较少,需要请点击这里
(1).基于ip(主机)的访问控制
(1)设定白名单: [root@apache-server conf.d]# pwd /etc/httpd/conf.d [root@apache-server conf.d]# vim a_default.conf在白名单34主机上测试: 在134主机上测试:
(2)设定黑名单: [root@apache-server conf.d]# vim a_default.conf [root@apache-server conf.d]# systemctl restart httpd在34主机上测试:
其他主机234上测试:
(2)基于用户的访问控制
##1.创建用户并设定密码;c表示create;将生成的用户和密码放入.http_userlist文件中 [root@server1 conf.d]# htpasswd -cm .http_userlist admin ##此时便会生成.http_userlist文件 [root@server1 conf.d]# htpasswd -m .http_userlist lee //第二次建立用户的时候,就不用-c创建文件这个参数了。否则会直接把原来文件的用户覆盖掉,重新建立。 ##.指定用户认证信息 [root@apache-server conf.d]# vim /etc/httpd/conf/httpd.conf ##4.重启服务 [root@apache-server conf.d]# systemctl restart httpd网页测试:
(2)自定义cgi接口语言
第一种:
在/var/www/cgi-bin目录下编写发布文件(脚本) [root@apache-server conf.d]# cd /var/www/ [root@apache-server www]# ls cgi-bin html westos.com [root@apache-server www]# cd cgi-bin/查看apache帮助手册:
1.用cgi语言编写发布文件;可在apache帮助手册查到语法格式 [root@apache-server cgi-bin]# vim index.cgi ##2.给脚本一个可执行权限 [root@apache-server cgi-bin]# chmod +x index.cgi ##3.执行脚本 [root@apache-server cgi-bin]# ./index.cgi
网页测试:
第二种:
在/var/www/html/cgi目录中编写发布文件(脚本) [root@apache-server cgi-bin]# cd /var/www/html ##1.创建目录 [root@apache-server html]# mkdir cgi [root@apache-server html]# ls cgi index.html index.php westos.html [root@apache-server html]# cd cgi/ [root@apache-server cgi]# pwd /var/www/html/cgi ##2.拷贝文件 [root@apache-server cgi]# cp /var/www/cgi-bin/index.cgi . [root@apache-server cgi]# ll total 4 -rwxr-xr-x. 1 root root 67 Dec 3 23:25 index.cgi查看apache帮助手册:
##3.编写子配置文件 [root@apache-server conf.d]# vim /etc/httpd/conf/httpd.conf ##4.重启服务 [root@apache-server conf.d]# systemctl restart httpd ##查看安全上下文 [root@apache-server cgi]# ls -Zd /var/www/html/cgi/ ##5.修改安全上下文 [root@apache-server cgi]# semanage fcontext -a -t httpd_sys_script_exec_t '/var/www/html/cgi(/.*)?' ##6.刷新 [root@apache-server cgi]# restorecon -RvvF /var/www/html/cgi/网页测试: (3)wsgi 接口语言 直接在/var/www/cgi-bin/目录下写编写发布文件
##.下载脚本 [root@apache-server cgi-bin]# ls webapp.wsgi westos ##查看脚本;此脚本是用python写的 [root@apache-server cgi-bin]# vim webapp.wsgi ##3.给脚本一个可执行权限 [root@apache-server cgi-bin]# chmod +x webapp.wsgi [root@apache-server cgi-bin]# yum search wsgi ##4.安装wsgi插件 [root@apache-server cgi-bin]# yum install -y mod_wsgi.x86_64 ##5.编写子配置文件 [root@apache-server conf.d]# vim webapp.conf ##6.重启apache [root@apache-server conf.d]# systemctl restart httpd ##7.本地解析 [root@foundation34 ~]# vim /etc/hosts网页测试: