当前位置: 首页 > Linux

Linux入门系列18--Web服务之Apache服务2

时间:2023-04-06 02:59:20 Linux

接上一篇,在了解了Apache的基本配置和SELinux相关知识后,继续演示Apache提供的虚拟主机功能和访问控制方法。如果您还没有阅读上一篇文章,建议您先查看一下,然后再回来。上一篇《Linux系列入门18--WebServices之ApacheService1》。3、Apache虚拟主机功能如果你在早期部署过网站,相信你一定知道虚拟机主机、VPS等概念,尤其是2000年左右,当时建站非常火爆,甚至催生了许多成功的草根网站管理员,其中一些今天仍然存在。这是非常成功的。网站流量的增加是一个长期积累的过程。如果每台服务器只能运行一个网站,那些知名度低、流量低的草根站长将被迫承担高额的服务器租用费用,这显然会造成硬件问题。浪费资源。为此,在虚拟专用服务器(VPS:VirtualPrivateServer)和云计算技术诞生之前,IDC服务商为了充分利用服务器资源,降低草根站长的购买门槛,都启用了虚拟主机功能。利用虚拟主机功能,可以将一台运行中的物理服务器分割成多个“虚拟服务器”。虚拟主机功能也有明显的缺点。无法像现在的云主机技术那样实现硬件资源的隔离。这些虚拟主机共享物理服务器的硬件资源。主机上不同用户的虚拟主机可能会相互影响。但是,出于成本的考虑,一些个人站长仍然使用虚拟主机来部署他们的网站。其示意图如下:Apache的虚拟主机功能是根据用户请求的不同IP地址、主机域名或端口号,实现同时提供多个网站和对外提供访问服务的技术。3.1基于IP如果一台服务器有多个IP地址,每个IP对应服务器上部署的每个网站,这样当用户请求访问不同的IP地址时,会访问到不同网站的页面资源。这样每个网站都有一个独立的IP地址,有利于搜索引擎的SEO优化。因此,这种提供虚拟网站托管功能的方式最为普遍,也最受草根站长欢迎。本例IP的网站对应关系为:192.168.78.101、102、103分别对应网站1、2、3,过程如下:3.1.1配置多个IP使用上面讲解的网络配置方法配置多个IP。如果忘记了,请回看《Linux入门系列11--Centos7网络服务管理》。[root@apache~]#nmtui的中间操作过程省略,为主机配置三个IP地址,保存退出重启网络使其生效[root@apache~]#systemctlrestartnetwork[root@apache~]#ipaddr...Omitpart2:eno16777736:mtu1500qdiscpfifo_faststateUPqlen1000link/ether00:0c:29:2e:3a:65brdff:ff:ff:ff:ff:ffinet192.168.78.101/24brd192.168.78.255scopeglobaleno16777736valid_lftforeverpreferred_lftforeverinet192.168.78.102/24brd192.168.78.255scopeglobalsecondaryeno16777736valid_lftforeverpreferred_lftforeverinet192.168.78.103/24brd192.168.78.255scopeglobalsecondaryeno16777736valid_lftforeverpreferred_lftforeverinet6fe80::20c:29ff:fe2e:3a65/64scopelinkvalid_lftforeverpreferred_lftforever[root@apache~]#确保可以看到刚刚通过ipaddr命令配置的IP,在虚拟机或者宿主机中可以看到刚才配置的每个IP都可以在宿主机上ping通。3.1.2准备多个网站在系统根目录下的网站目录下创建三个目录,分别创建不同的页面文件。[root@apache网站]#mkdir-p/website/1[root@apache网站]#mkdir-p/website/2[root@apache网站]#mkdir-p/website/3[root@apache网站]#echo"192.168.78.101">/website/1/index.html[root@apache网站]#echo"192.168.78.102">/website/2/index.html[root@apache网站]#echo"192.168.78.103">/website/3/index.html3.1.3配置Apache配置主配置文件/etc/httpd/conf/httpd.conf[root@apachewebsite]#vim/etc/httpd/conf/httpd.conf...节省部分内容DocumentRoot/website/1ServerNamewebsite1AllowOverrideNone要求全部授予DocumentRoot/website/2ServerNamewebsite2AllowOverrideNone要求全部授予DocumentRoot/website/3ServerNamewebsite3AllowOverrideNoneRequireallgranted...省略部分内容加入如下配置,保存退出重启httpd使其生效[root@apache网站]#systemctlrestarthttpd3.2.4测试访问因为是延续上一篇文章的环境,接下来的实验,上一篇文章已经搭建好了防火墙和SELinux,直接访问即可。如果遇到无法访问的情况,请参考上一篇文章检查相关设置。注意:(1)SELinuxcontext前面已经添加到/website目录下,所以刚才创建的子目录/website/1不需要设置。(2)在前面的实验中,可以直接通过ip访问/website/index.html文件。本次实验并没有删除原来的配置,而是增加了虚拟主机相关的配置。可以看到192.168.78.101这个ip指向的是Newwebhostingsite,而不是原来的站点。也就是说,虚拟主机的配置会覆盖原来的设置,优先级会更高。3.2基于域名当服务器无法为每个网站分配独立的IP地址时,可以尝试让Apache自动识别用户请求的域名,从而根据不同的域名请求传输不同的内容。基于域名的配置与基于IP的配置基本相同,只是在域名和IP之间多了一个映射。3.2.0环境准备继续使用上一步的环境,删除之前设置的多余IP,只保留一个IP:192.168.78.101;同时删除上一步3.1.3配置的多个IP和网站的映射。假设三个域名分别对应三个网站,域名分别为:test1、test2、test3.heimatengyun.com,分别对应前面三个网站1、2、3。3.2.1配置域名和IP映射可以通过DNS解析服务进行配置。本节直接修改/etc/hosts文件,在该文件中指定IP与域名的映射关系。/etc/hosts是Linux系统中用来强制将主机域名解析为指定IP地址的配置文件。[root@apachewebsite]#vim/etc/hosts192.168.78.101test1.heimatengyun.comtest2.heimatengyun.comtest3.heimatengyun.com在文件末尾添加以上内容保存退出。在虚拟机中,确保可以ping通以上各个域名。[root@apachewebsite]#ping-c1test1.heimatengyun.comPINGtest1.heimatengyun.com(192.168.78.101)56(84)字节数据。来自test1.heimatengyun.com(192.168.78.101)的64字节:icmp_seq=1ttl=64time=0.033ms---test1.heimatengyun.comping统计---1个包发送,1个接收,0%丢包,时间0msrttmin/avg/max/mdev=0.033/0.033/0.033/0.000ms[root@apachewebsite]#这样,后续操作完成后,就可以通过虚拟机内部的域名访问了。但是如果想让主机可以访问,就需要在主机中添加IP和域名的映射。由于我的宿主机是win10,所以在C:WindowsSystem32driversetchosts文件中添加上述IP和域名的映射内容即可。然后就可以在主机上ping通之前三个相同的域名了。3.2.2准备多个网站由于直接使用原来的三个网站,首先修改每个网页中的内容。我们使用重定向将相应的域名信息添加到原始页面中,以方便后续验证结果。[root@apache网站]#echo"test1.heimatengyun.com">>/website/1/index.html[root@apache网站]#echo"test2.heimatengyun.com">>/website/2/index.html[root@apachewebsite]#echo"test3.heimatengyun.com">>/website/3/index.html3.2.3配置Apache修改Apache主配置文件,/etc/httpd/conf/httpd.conf[root@apachewebsite]#vim/etc/httpd/conf/httpd.conf...节省部分内容DocumentRoot/website/1ServerNametest1.heimatengyun.comAllowOverrideNone要求全部授予DocumentRoot/website/2ServerNametest2.heimatengyun.comAllowOverrideNone需要全部授权DocumentRoot/website/3ServerNametest3.heimatengyun.comAllowOverrideNone要求全部授予...省略部分内容,在配置文件中添加以上内容并保存退出注意:这里可以对比之前的IP配置,配置参数基本一致,唯一不同的是每个网站对应以前是给不同的IP,现在是写同一个IP。修改完成后可以对比重启Apache使其生效。[root@apachewebsite]#systemctlrestarthttpd注意:修改Apache配置后需要重启服务才能生效。3.2.4测试访问在主机浏览器中输入相应的域名,即可访问相应的网站。3.3基于端口号的虚拟主机功能允许用户通过指定的端口号访问服务器上的网站资源。与前面两种方式相比,这种方式的配置需要稍微照抄一下,因为不仅要配置httpd服务程序,还要考虑SELinux服务对新开端口的监控和限制。通常使用80、443、8080等端口来提供网站访问服务。如果是其他端口,则需要关注SELinux的当前状态。3.3.0环境准备我们继续在上面的环境中进行实验,删除上一步3.2.3配置文件中的配置。假设8111、8222、8333分别对应上面创建的1、2、3三个网站。3.3.1网站准备我们继续沿用前面三个网站,修改网站内容[root@apachewebsite]#echo"8111">>/website/1/index.html[root@apachewebsite]#echo"8222">>/website/2/index.html[root@apachewebsite]#echo"8333">>/website/3/index.html3.3.2Apache配置配置/etc/httpd/conf/httpd.conf,使其支持多端口监听(1)在第43行左右,添加端口监听[root@apachewebsite]#vim/etc/httpd/conf/httpd.conf...省略部分内容Listen8111Listen8222Listen8333...省略部分内容内容继续下面修改(2)在120行左右,根据端口号添加虚拟主机参数配置DocumentRoot/website/1ServerNametest1.heimatengyun.comAllowOverrideNone要求全部授予DocumentRoot/website/2ServerNametest2.heimatengyun.comAllowOverrideNone要求全部授予DocumentRoot/website/3ServerNametest3.heimatengyun.comAllowOverrideNoneRequireallgranted...省略部分内容,保存退出和3.2.3相比,变化不大,只是在IP后面加上端口,几个配置重启apache使其生效[root@apachewebsite]#systemctlrestarthttpdJobforhttpd.servicefailed。详见'systemctlstatushttpd.service'和'journalctl-xn'。[root@apachewebsite]#journalctl-xn...省略一些内容*****Pluginbind_ports(92.2confidence)suggests如果你想允许/usr/sbin/httpd绑定到网络端口8111然后需要修改端口类型。do#semanageport-a-tPORT_TYPE-ptcp8111...省略一些内容但是你会发现重启失败。如果你查看日志,你会发现这样的提示,不用担心,这正是开头提到的SELinux正在做的事情。3.3.3设置SELinux域查看默认SELinux允许的HTTP协议相关端口[root@apachewebsite]#semanageport-l|grephttphttp_cache_port_ttcp8080,8118,8123,10001-10010http_cache_port_tudp3130http_port_ttcp80,81,443,488,8008,8009,8443,9000pegasus_http_port_ttcp5988pegasus_https_port_ttcp5989[root@apachewebsite]#Sowehavetoaddthethreenewlyadded端口进入[root@apache网站]#semanageport-a-thttp_port_t-ptcp8111[root@apachewebsite]#semanageport-a-thttp_port_t-ptcp8222[root@apachewebsite]#semanageport-a-thttp_port_t-ptcp8333addcompleterestartapache[root@apachewebsite]#systemctlrestarthttpd3.3.4测试访问经过以上操作,可以通过浏览器访问虚拟机的内容,可以正常访问对应的网站通过各个端口。但是如果你在宿主机上访问它,你会发现你无法访问它。这无疑是因为防火墙在耍花招。要想受益于《Linux系列10入门--Firewalld防火墙管理》中讲解的知识,只需释放相应的三个端口即可。[root@apache网站]#firewall-cmd--zone=public--list-ports[root@apache网站]#firewall-cmd--zone=public--add-port=8111/tcp成功[root@apache网站]#firewall-cmd--zone=public--add-port=8222/tcpsuccess[root@apachewebsite]#firewall-cmd--zone=public--add-port=8333/tcp主机可以正常访问。如果你细心,你可能会发现,如果你按照上面的步骤一路往下走,你会发现现在这三种方法实际上都启用了。通过不同的端口访问,可以正常访问对应的不同网站。但是如果你再通过ip或者域名访问,你会发现都指向了上一篇案例1所指向的网页。为什么会这样?那是因为前面的案例没有明确指定端口,默认的端口是80。所以,如果没有明确指定端口,默认就是web的80端口。4、Apache访问控制Apache可以根据源主机名、源IP地址或源主机上的浏览器特征等信息控制对网站资源的访问。简单的说,就是可以控制网站,让指定的用户只能看到。它主要通过访问控制指令来实现。常用指令有:Allow、Deny、OrderAllow:允许主机访问服务器上的网站资源Deny:实现禁止访问Order:定义Allow或Deny指令起作用的顺序,匹配原则是按顺序匹配,如果匹配成功,则执行以下默认命令。例如:OrderAllow,Deny:表示先将源主机与允许规则进行匹配,如果匹配成功则允许访问请求,否则拒绝访问请求。4.1通过IP控制假设我们的需求是让之前部署的1个网站只允许虚拟机内部访问,禁止外部机器访问。[root@apachewebsite]#vim/etc/httpd/conf/httpd.conf...省略部分内容DocumentRoot/website/1ServerNametest1.heimatengyun.comAllowOverrideNoneRequireallgrantedOrderallow,denyAllowfrom192.168.78.101...省略部分内容我们只需要打开主配置文件,添加Orderallow,denyandAllowfrom192.168.78.101即可实现.配置完成后,重启apache,发现在虚拟机中可以正常访问,但是在宿主机中已经无法访问网站了(直接跳转到测试页面)。另外,还可以利用浏览器特性来限制指定浏览器的访问,这里不做演示。下一篇文章将演示Mysql数据的兄弟MariaDB的安装和基本使用。