Apache的虚拟主机功能(基于IP地址、基于虚拟主机、基于端口)
1. 安装Apache服务程序(系统用户,1-199之间)
第一步:在虚拟机软件里选中光盘镜像:
第二步:将光盘设备挂载到/media/cdrom目录
输入:mkdir -p /media/cdrom;
mount /dev/cdrom /media/cdrom
第三步:使用Vim编辑器创建Yum仓库的配置文件
输入:vim /etc/yum.repos.d/rhel7.repo
输入:[rhel7]
name=rhel7
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0
第四步:安装Apache服务程序:
需要注意apache服务程序的软件包名称叫做httpd,因此直接执行yum install apache则是错误的
输入:yum install httpd
第五步:运行Apache服务程序并设置为开机启动:
启动Apache服务程序,输入:systemctl start httpd
设置为开机自启动,输入:systemctl enable httpd
打开浏览器后键入http://127.0.0.1,就能看到默认界面了。
一、 基于IP地址(当用户访问不同IP地址时显示不同的网站页面)
第1步:使用nmtui命令为网卡添加多个IP地址(192.168.10.10/20/30):
- 执行命令“nmtui”
- 选择编辑的连接
- 添加IP地址
4.重新启动网卡设备后使用ping命令检查是否配置正确
第2步:分别创建网站数据目录。
在/home/wwwroot目录下分别创建三个网站数据目录
输入:mkdir -p /home/wwwroot/100
mkdir -p /home/wwwroot/20
mkdir -p /home/wwwroot/30
分别在这三个网站数据目录中写入主页文件,内容为该网站的IP地址:
输入:echo "IP:192.168.17.100" > /home/wwwroot/10/index.html
echo "IP:192.168.17.20" > /home/wwwroot/10/index.html
echo "IP:192.168.17.30" > /home/wwwroot/10/index.html
第3步:在配置文件中描述基于IP地址的虚拟主机。
输入:vim /etc/httpd/conf/httpd.conf
插入:
<VirtualHost 192.168.17.100>
DocumentRoot /home/wwwroot/100
ServerName www.linuxprobe.com
<Directory /home/wwwroot/100 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.17.20>
DocumentRoot /home/wwwroot/20
ServerName bbs.linuxprobe.com
<Directory /home/wwwroot/20 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.17.30>
DocumentRoot /home/wwwroot/30
ServerName tech.linuxprobe.com
<Directory /home/wwwroot/30 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
第4步:修改网站数据目录的SELinux安全上下文。
需要分别修改网站数据目录以及网页文件的SELinux安全上下文:
输入:semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/100
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/100/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/20
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/20/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/30
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/30/*
立即恢复SELinux安全上下文,输入: restorecon -Rv /home/wwwroot
第5步:分别访问192.168.17.100/20/30验证结果:
请注意:当完成本实验后请还原虚拟机快照再进行下一个实验,否则可能导致配置文件冲突而报错。
二、基于主机名
当服务器无法为每个网站都分配到独立IP地址时,可以试试让Apache服务程序自动识别来源主机名或域名然后跳转到指定的网站。
第1步:配置网卡IP地址与hosts文件,输入:ifconfig
hosts文件作用是定义IP地址与主机名的映射关系,即强制将某个主机名地址解析到指定的IP地址。
输入:vim /etc/hosts
//每行只能写一条,格式为IP地址+空格+主机名(域名)
写入 192.168.17.100 www.linuxprobe.com
192.168.17.100 bbs.linuxprobe.com
192.168.17.100 tech.linuxprobe.com
第2步:分别创建网站数据目录,
输入:mkdir -p /home/wwwroot/www
mkdir -p /home/wwwroot/bbs
mkdir -p /home/wwwroot/tech
分别在网站目录中写入不同的首页文件:
输入: echo "WWW.linuxprobe.com" > /home/wwwroot/www/index.html
echo "BBS.linuxprobe.com" > /home/wwwroot/bbs/index.html
echo "TECH.linuxprobe.com" > /home/wwwroot/tech/index.html
第3步:在配置文件中描述基于主机名称的虚拟主机。
编辑主配置文件(/etc/httpd/conf/httpd.conf),在主配置文件的末尾按下面格式定义虚拟主机信息
输入:vim /etc/httpd/conf/httpd,conf
<VirtualHost 192.168.17.100>
DocumentRoot "/home/wwwroot/www"
ServerName "www.linuxprobe.com"
<Directory "/home/wwwroot/www">
AllowOverride None
Require all granted
</directory>
</VirtualHost>
<VirtualHost 192.168.17.100>
DocumentRoot "/home/wwwroot/bbs"
ServerName "bbs.linuxprobe.com"
<Directory "/home/wwwroot/bbs">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.17.100>
DocumentRoot "/home/wwwroot/tech"
ServerName "tech.linuxprobe.com"
<Directory "/home/wwwroot/tech">
AllowOverride None
Require all granted
</directory>
</VirtualHost>
第4步:修改网站数据目录的SELinux安全上下文,
输入:
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/www
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/www/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/bbs
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/bbs/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/tech
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/tech/*
让新的SELinux安全上下文立即生效
输入: restorecon -Rv /home/wwwroot/
第5步:分别访问网站验证结果
请注意:当您完成本实验后请还原虚拟机快照再进行下一个实验,否则可能导致配置文件冲突而报错。
三、基于端口
我们可以让服务器开启多个服务端口后,然后让用户能够通过访问服务器的指定端口来找到想要的网站。
第1步:配置服务器的IP地址,输入:ifconfig
第2步:分别创建网站数据目录。
分别创建端口为6111,6222的网站数据目录:
输入: mkdir -p /home/wwwroot/6111
mkdir -p /home/wwwroot/6222
分别在网站数据目录中写入不同内容的主页文件:
输入:echo "port:6111" > /home/wwwroot/6111/index.html
echo "port:6222" > /home/wwwroot/6222/index.html
第3步:在配置文件中描述基于端口号的虚拟主机。
编辑主配置文件(/etc/httpd/conf/httpd.conf),找到约在42行的Listen 80,并在下面追加:
Listen 6111
Listen 6222
然后在主配置文件的末尾按下面格式定义虚拟主机信息:
<VirtualHost 192.168.17.100:6111>
DocumentRoot “/home/wwwroot/6111”
ServerName www.linuxprobe.com
<Directory “/home/wwwroot/6111”>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.17.100:6222>
DocumentRoot “/home/wwwroot/6222”
ServerName bbs.linuxprobe.com
<Directory “/home/wwwroot/6222”>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
什么!竟然报错了:
Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.
这是因为SELinux服务检测到6111与6222端口原本并不属于Apache服务端口,但现在却被以Apache的名义监听了.
第4步:修改网站数据目录的SELinux安全上下文并允许端口监听。
修改网站数据目录的安全上下文:
输入: semanage fcontext -a -t httpd_user_content_t /home/wwwroot
semanage fcontext -a -t httpd_user_content_t /home/wwwroot/6111
semanage fcontext -a -t httpd_user_content_t /home/wwwroot/6111/*
semanage fcontext -a -t httpd_user_content_t /home/wwwroot/6222
semanage fcontext -a -t httpd_user_content_t /home/wwwroot/6222/*
让新的SElinux安全上下文立即生效:
输入: restorecon -Rv /home/wwwroot/
使用semanage命令搜索在SELinux系统中有关http服务的端口号:
输入:semanage port -l| grep http
默认包括80,81,443,488,8008,8009,8443,9000却没有咱们定义的端口号,那么添加进去就可以了:
输入: semanage port -a -t http_port_t -p tcp 6111
semanage port -a -t http_port_t -p tcp 6222
再来看下SELinux的端口规则(已经添加成功了):
输入: semanage port -l| grep http
再次尝试启动Apache网站服务程序就没有问题了:
输入:systemctl restart httpd
第5步:分别访问网站验证结果:
Apache的虚拟主机功能(基于IP地址、基于虚拟主机、基于端口)的更多相关文章
- Apache(基于IP地址)
1.Apache的安装 (1)先用命令“cat /etc/passwd|grep apache”,查看有有没有Apache ①如果有Apache,我们就不用再安装 ②如果没有,我们就安装一下 (2)使 ...
- nginx篇最初级用法之三种虚拟主机基于域名\基于端口\基于IP地址端口的虚拟主机
在nginx中虚拟主机的类型与apache一样也有三种 1.基于域名的虚拟主机 2.基于端口的虚拟主机 3.基于IP地址端口的虚拟主机 在nginx配置文件中每一个server为一个虚拟主机如果需要多 ...
- Apache服务(基于IP地址,主机名,端口号)
安装Apache服务程序 需要注意apache服务程序的软件包名称叫做httpd,因此直接执行yum install apache则是错误的. [root@liuxuanke-hbza ~]# yum ...
- Solaris 10主机名和IP地址步骤
1.修改主机名: hostname newname vi /etc/hosts vi /etc/hostname.e1000g0 vi /etc/nodename init 6 #重启 --confi ...
- 二十二、utl_inaddr(用于取得局域网或Internet环境中的主机名和IP地址)
1.概述 作用:用于取得局域网或Internet环境中的主机名和IP地址. 2.包的组成 1).get_host_name作用:用于取得指定IP地址所对应的主机名语法:utl_inaddr.get_h ...
- Linux学习笔记(10)linux网络管理与配置之一——主机名与IP地址,DNS解析与本地hosts解析(1-4)
Linux学习笔记(10)linux网络管理与配置之一——主机名与IP地址,DNS解析与本地hosts解析 大纲目录 0.常用linux基础网络命令 1.配置主机名 2.配置网卡信息与IP地址 3.配 ...
- 【Linux杂记】Linux配置静态IP地址,修改主机名、host
博主使用的系统是:乌班图16.04 1.设置静态IP方法如下: #sudo vim /etc/network/interfaces #修改如下部分: auto eth0//ipconfig命令查看网卡 ...
- 编写Java程序,根据提供的 IP 地址,获取主机名称和域名
查看本章节 查看作业目录 需求说明: 根据提供的 IP 地址,获取主机名称和域名 实现思路: 创建 GetHostNameByIpAddress 类,在main方法中声明 String 类型的变量 i ...
- HttpServletRequest -- 获取请求主机真实的IP地址
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了 Apache,Nagix等反向代理软件就不能获取到客户端的真实 ...
随机推荐
- QQ第三方登录(二)
首先我们先来看一下我的目录 Connect2.1 是我们从下载的SDK,内容包含 其他文件在配置之后全部删除了! index.html 是我们点击登陆的页面(以下为html中的代码) <cen ...
- [CF1220C] Substring Game in the Lesson - 博弈论
[CF1220C] Description 给定一个字符串 \(S\) , 同时维护一个区间 \([l,r]\) .轮流操作,每次可以扩展到一个新区间使得原区间是新区间的真子区间,并且字典序更小,不能 ...
- 训练20191005 2017-2018 ACM-ICPC Asia East Continent League Final
A 签到 M 签到 K 读懂后签到 L 博弈论 [引理]出现SXXS结构时后手必胜. 很容易发现n为奇数时后手不可能胜利,n为偶数时先手不可能胜利.n≤6时一定平局,n≥7时先手有可能胜利,n≥16时 ...
- java基础(四)之this的使用
作用: 1.使用this调用成员变量和成员函数2.使用this调用构造函数 Person.java: class Person{ String name; //成员变量 void talk(Strin ...
- Maven设置阿里云镜像
<mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> & ...
- Python之路【第三十二篇】:django 分页器
Django的分页器paginator 文件为pageDemo models.py from django.db import models # Create your models here. cl ...
- MySQL判断数据是否为空
IFNULL(expr1,expr2)函数,这个函数只能判断是否为空 SELECT CONCAT(first_name,',',last_name,',',job_id,IFNULL(commissi ...
- 记manjaro图形驱动删除后的一次补救
#一.前言 众所周知,NVIDIA的闭源驱动在Linux上的兼容性不是很好,再加上我不玩游戏,于是我就想卸载独显只留核显.我以为我装了独显和核显两种驱动,原本想直接删除独显驱动,没想到删除的是bumb ...
- php & c# DES
php <?php class DES { var $key; var $iv; //偏移量 function DES($key = '11001100', $iv=0 ) { //key长度8 ...
- JavaScript中的 typeof,null,和undefined
typeof操作符 null 在JavaScript中null表示“什么都没有”. null是一个只有一个值的特殊类型.表示一个空对象引用. typeof null; 返回的是object 可以将nu ...