无悔的承诺 發表於 2025-10-19 00:00:00

Linux使用Apache的虚拟主机功能的操作指南

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>实验:使用Apache的虚拟主机功能</li><li>实验1:基于IP地址<ul class="second_class_ul"><li>Step1:分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首页文件。&nbsp;</li><li>&nbsp;Step2:修改配置文件:httpd.conf,将刚刚新建的目录添加</li><li>&nbsp;Step3:设置SELinux安全上下文,并使用restorecon命令让新设置立即生效</li></ul></li><li>&nbsp;实验2:基于端口号<ul class="second_class_ul"><li>Step1:分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首文件。</li><li>Step2:在httpd服务配置文件中添加用于监听端口的参数</li><li>Step3:在httpd服务配置文件中追加写入基于端口号的虚拟主机网站参数</li><li>Step4:设置网站数据目录文件的SELinux安全上下文,使其与网站服务功能吻合</li><li>Step5:SELinux允许的与HTTP协议相关的端口号中默认没有6111、6222、6333,现添加。</li></ul></li><li>实验3:基于主机域名<ul class="second_class_ul"><li>&nbsp;Step1:手动定义IP地址与域名之间对应关系的配置文件</li><li>Step2:分别新建目录并写入网站配置文件</li><li>Step3:从httpd服务的配置文件中大约132行开始,追加写入基于主机名的虚拟主机网站参数。</li><li>Step4:设置网站数据目录文件的SELinux安全上下文,使其与网站服务功能相吻合</li></ul></li></ul></div><p>实验环境:</p>
<p>VmwareWorkStation 17&mdash;&mdash;</p>
<p>RedHatEnterpriseLinux8&mdash;&mdash;红帽操作系统</p>
<p class="maodian"></p><h2>实验:使用Apache的虚拟主机功能</h2>
<p>利用虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个&ldquo;虚拟的服务器&rdquo;</p>
<p>但是,该技术无法实现目前云主机技术的硬件资源隔离</p>
<p>Apache的虚拟主机功能是服务器基于用户请求的不同IP地址、主机名或端口号,提供多个网站同时为外部提供访问服务的技术。&nbsp;</p>
<p>准备:使用nmtui命令配置网络&nbsp;</p>
<p style="text-align:center"><img alt="" height="871" src="https://zhuji.jb51.net/uploads/allimg/20251018/2-25101Q61Q1951.png" width="1095" /></p>
<p style="text-align:center"><img alt="" height="825" src="https://zhuji.jb51.net/uploads/allimg/20251018/2-25101Q61Q1K2.png" width="1001" /></p>
<p style="text-align:center"><img alt="" height="829" src="https://zhuji.jb51.net/uploads/allimg/20251018/2-25101Q61Q1H3.png" width="1026" /></p>
<p style="text-align:center"><img alt="" height="170" src="https://zhuji.jb51.net/uploads/allimg/20251018/2-25101Q61Q1333.png" width="912" /></p>
<p><strong>&nbsp;用真机ping测试,3个地址均可访问。</strong></p>
<p style="text-align:center"><img alt="" height="869" src="https://zhuji.jb51.net/uploads/allimg/20251018/2-25101Q61Q1W0.png" width="1200" /></p>
<p class="maodian"></p><h2>实验1:基于IP地址</h2>
<p class="maodian"></p><h3>Step1:分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首页文件。&nbsp;</h3>
<p style="text-align:center"><img alt="" height="233" src="https://zhuji.jb51.net/uploads/allimg/20251018/2-25101Q61Q2948.png" width="989" /></p>
<p class="maodian"></p><h3>&nbsp;Step2:修改配置文件:httpd.conf,将刚刚新建的目录添加</h3>
<p>在132行进行追加内容:&nbsp;</p>
<p style="text-align:center"><img alt="" height="769" src="https://zhuji.jb51.net/uploads/allimg/20251018/2-25101Q61Q25U.png" width="1140" /></p>
<p class="maodian"></p><h3>&nbsp;Step3:设置SELinux安全上下文,并使用restorecon命令让新设置立即生效</h3>
<div class="dxycode"><pre class="brush:bash;">semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10/*
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/*
restorecon -Rv /home/wwwroot</pre></div>
<p><strong>打开firefox访问虚拟主机的三个不同网站数据:&nbsp;</strong></p>
<p style="text-align:center"><img alt="" height="606" src="https://zhuji.jb51.net/uploads/allimg/20251018/2-25101Q61Q2556.png" width="1192" /></p>
<p class="maodian"></p><h2>&nbsp;实验2:基于端口号</h2>
<p><strong>基于端口号的虚拟主机功能可以让用户通过指定的端口号来访问服务器上的网站资源。</strong></p>
<p><strong>在使用Apache配置虚拟网站主机功能时,基于端口号的配置方式是最复杂的。</strong></p>
<p><strong>不仅要考虑httpd服务程序的配置因素,还需要考虑到SELinux服务对新开设端口的监控。</strong></p>
<p><strong>一般来说,使用80、443、8080等端口号来提供网站访问服务是比较合理的,如果使用其他端口号则会受到SELinux服务的限制。</strong></p>
<p><strong>这个实验中,不仅要考虑目录上应用的SELinux安全上下文的限制,还需要考虑SELinux域对httpd服务程序的管控。</strong></p>
<p class="maodian"></p><h3>Step1:分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首文件。</h3>
<p>每个首文件中都应有明确区分不同网站内容的信息。</p>
<div class="dxycode"><pre class="brush:bash;">mkdir -p /home/wwwroot/6111
mkdir -p /home/wwwroot/6222
mkdir -p /home/wwwroot/6333
echo "port:6111" &gt; /home/wwwroot/6111/index.html
echo "port:6222" &gt; /home/wwwroot/6222/index.html
echo "port:6333" &gt; /home/wwwroot/6333/index.html</pre></div>
<p class="maodian"></p><h3>Step2:在httpd服务配置文件中添加用于监听端口的参数</h3>
<div class="dxycode"><pre class="brush:bash;">vim /etc/httpd/conf/httpd.conf</pre></div>
<p><strong>第46行~48行添加:</strong></p>
<div class="dxycode"><pre class="brush:bash;">Listen 6111
Listen 6222
Listen 6333</pre></div>
<p style="text-align:center"><img alt="" height="364" src="https://zhuji.jb51.net/uploads/allimg/20251018/2-25101Q61Q2403.png" width="1145" /></p>
<p class="maodian"></p><h3>Step3:在httpd服务配置文件中追加写入基于端口号的虚拟主机网站参数</h3>
<div class="dxycode"><pre class="brush:bash;">vim /etc/httpd/conf/httpd.conf</pre></div>
<p>从134行开始追加:&nbsp;</p>
<div class="dxycode"><pre class="brush:xml;">&lt;VirtualHost 192.168.31.10:6111&gt;
DocumentRoot /home/wwwroot/6111
ServerName www.linuxcool.com
&lt;Directory /home/wwwroot/6111&gt;
AllowOverride None
Require all granted
&lt;/Directory&gt;
&lt;/Virtualhost&gt;
&lt;VirtualHost 192.168.31.10:6222&gt;
DocumentRoot /home/wwwroot/6222
ServerName www.linuxcool.com
&lt;Directory /home/wwwroot/6222&gt;
AllowOverride None
Require all granted
&lt;/Directory&gt;
&lt;/Virtualhost&gt;
&lt;VirtualHost 192.168.31.10:6333&gt;
DocumentRoot /home/wwwroot/6333
ServerName www.linuxcool.com
&lt;Directory /home/wwwroot/6333&gt;
AllowOverride None
Require all granted
&lt;/Directory&gt;
&lt;/Virtualhost&gt;</pre></div>
<p class="maodian"></p><h3>Step4:设置网站数据目录文件的SELinux安全上下文,使其与网站服务功能吻合</h3>
<div class="dxycode"><pre class="brush:bash;">semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6333
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6333/*
restorecon -Rv /home/wwwroot/
systemctl restart httpd</pre></div>
<p><strong>如果现在访问网页仍会出现报错信息:</strong></p>
<p><strong>SELinux服务检测到6111、6222、和6333端口原本不属于Apache服务应该需要的资源,现在却以httpd服务程序的名义监听使用了,所以SELinux会拒绝使用Apache服务使用这3个端口。</strong></p>
<p><strong>使用semanage命令查询并过滤出所有与HTTP协议相关且SELinux服务允许的端口列表:</strong></p>
<div class="dxycode"><pre class="brush:bash;">semanage port -l | grep http</pre></div>
<p style="text-align:center"><img alt="" height="345" src="https://zhuji.jb51.net/uploads/allimg/20251018/2-25101Q61Q2I0.png" width="1050" /></p>
<p class="maodian"></p><h3>Step5:SELinux允许的与HTTP协议相关的端口号中默认没有6111、6222、6333,现添加。</h3>
<div class="dxycode"><pre class="brush:bash;">semanage port -a -t http_port_t -p tcp 6111
semanage port -a -t http_port_t -p tcp 6222
semanage port -a -t http_port_t -p tcp 6333
semanage port -l | grep http</pre></div>
<p style="text-align:center"><img alt="" height="384" src="https://zhuji.jb51.net/uploads/allimg/20251018/2-25101Q61Q3414.png" width="1049" /></p>
<div class="dxycode"><pre class="brush:bash;">systemctl restart httpd
firefox</pre></div>
<p style="text-align:center"><img alt="" height="668" src="https://zhuji.jb51.net/uploads/allimg/20251018/2-25101Q61Q3b9.png" width="1200" /></p>
<p class="maodian"></p><h2>实验3:基于主机域名</h2>
<p>当服务器无法为每个网站都分配一个独立的IP地址的时候,可以尝试让Apache自动识别用户请求的域名,从而根据不同的域名请求来传输不同的内容。</p>
<p>只需要保证位于生产环境中的服务器上有一个可用的IP地址</p>
<p>由于当前还未学习配置DNS,手动定义IP地址与域名之间的对应关系。</p>
<p><strong>/etc/hosts是Linux系统中用于强制把某个主机域名解析到指定IP地址的配置文件,即使网络参数中没有DNS信息也依然能够将域名解析为某个IP地址。</strong></p>
<p class="maodian"></p><h3>&nbsp;Step1:手动定义IP地址与域名之间对应关系的配置文件</h3>
<div class="dxycode"><pre class="brush:bash;">vim /etc/hosts</pre></div>
<div class="dxycode"><pre class="brush:bash;">192.168.31.10 www.linuxprobe.com www.linuxcool.com www.linuxdown.com</pre></div>
<p class="maodian"></p><h3>Step2:分别新建目录并写入网站配置文件</h3>
<div class="dxycode"><pre class="brush:bash;">mkdir -p /home/wwwroot/linuxprobe
mkdir -p /home/wwwroot/linuxcool
mkdir -p /home/wwwroot/linuxdown
echo "www.linuxprobe.com" &gt; /home/wwwroot/linuxprobe/index.html
echo "www.linuxcool.com" &gt; /home/wwwroot/linuxcool/index.html
echo "www.linuxdown.com" &gt; /home/wwwroot/linuxdown/index.html</pre></div>
<p class="maodian"></p><h3>Step3:从httpd服务的配置文件中大约132行开始,追加写入基于主机名的虚拟主机网站参数。</h3>
<div class="dxycode"><pre class="brush:xml;">&lt;VirtualHost 192.168.31.10&gt;
DocumentRoot /home/wwwroot/linuxprobe
ServerName www.linuxprobe.com
&lt;Directory /home/wwwroot/linuxprobe&gt;
AllowOverride None
Require all granted
&lt;/Directory&gt;
&lt;/Virtualhost&gt;
&lt;VirtualHost 192.168.31.10&gt;
DocumentRoot /home/wwwroot/linuxcool
ServerName www.linuxcool.com
&lt;Directory /home/wwwroot/linuxcool&gt;
AllowOverride None
Require all granted
&lt;/Directory&gt;
&lt;/Virtualhost&gt;
&lt;VirtualHost 192.168.31.10&gt;
DocumentRoot /home/wwwroot/linuxdown
ServerName www.linuxdown.com
&lt;Directory /home/wwwroot/linuxdown&gt;
AllowOverride None
Require all granted
&lt;/Directory&gt;
&lt;/Virtualhost&gt;</pre></div>
<div class="dxycode"><pre class="brush:bash;">systemctl restart httpd</pre></div>
<p class="maodian"></p><h3>Step4:设置网站数据目录文件的SELinux安全上下文,使其与网站服务功能相吻合</h3>
<div class="dxycode"><pre class="brush:bash;">semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxprobe
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxprobe/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxcool
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxcool/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxdown
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxdown/*
restorecon -Rv /home/wwwroot
firefox</pre></div>
<p style="text-align:center"><img alt="" height="630" src="https://zhuji.jb51.net/uploads/allimg/20251018/2-25101Q61Q33U.png" width="1021" /></p>
<p>以上就是Linux实验记录:使用Apache的虚拟主机功能的详细内容,更多相关资料请阅读琼殿技术社区其它文章!</p>
頁: [1]
查看完整版本: Linux使用Apache的虚拟主机功能的操作指南