当前位置:首页 > CN2资讯 > 正文内容

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

1天前CN2资讯

如果还没看上一篇的建议先查看后再来,上篇文章“linux入门系列18--web服务之apache服务1”。

三、Apache虚拟主机功能

如果早期你部署过网站,相信一定知道虚拟机主机、VPS等概念,尤其是2000年前后建站非常流行,甚至诞生了很多成功的草根站长,其中有一部分网站到现在仍然做的非常成功。

网站流量的增加是一个长期累积的过程,如果每台服务器上只能运行一个网站,那些人气低、流量小的草根站长就要被迫承担着高昂的服务器租赁费用,这显然也会造成硬件资源的浪费。

为此在虚拟专用服务器(VPS:Virtual Private Server)和云计算技术诞生以前,IDC服务供应商为了更充分利用服务器资源和减低草根站长的购买门槛,都启用了虚拟主机功能。利用虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个“虚拟的服务器”。

虚拟主机功能也有明显的缺点,它无法像目前的云主机技术那样实现硬件资源的隔离,这些虚拟主机共同使用物理服务器的硬件资源,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 ~]# systemctl restart network [root@apache ~]# ip addr ...省略部分内容 2: eno16777736:mtu 1500 qdisc pfifo_fast state UP qlen 1000     link/ether 00:0c:29:2e:3a:65 brd ff:ff:ff:ff:ff:ff     inet 192.168.78.101/24 brd 192.168.78.255 scope global eno16777736        valid_lft forever preferred_lft forever     inet 192.168.78.102/24 brd 192.168.78.255 scope global secondary eno16777736        valid_lft forever preferred_lft forever     inet 192.168.78.103/24 brd 192.168.78.255 scope global secondary eno16777736        valid_lft forever preferred_lft forever     inet6 fe80::20c:29ff:fe2e:3a65/64 scope link         valid_lft forever preferred_lft forever [root@apache ~]#

确保通过ip addr命令可以看到刚才配置的IP,并能在虚拟机或宿主机上能ping通刚才配置的每个IP。

3.1.2 准备多个网站

在系统根目录下的website目录下创建3个目录,并分别创建不同的页面文件。

[root@apache website]# mkdir -p /website/1 [root@apache website]# mkdir -p /website/2 [root@apache website]# mkdir -p /website/3 [root@apache website]# echo "192.168.78.101">/website/1/index.html [root@apache website]# echo "192.168.78.102">/website/2/index.html [root@apache website]# echo "192.168.78.103">/website/3/index.html
3.1.3 配置Apache

配置主配置文件/etc/httpd/conf/httpd.conf

[root@apache website]# vim /etc/httpd/conf/httpd.conf ...省略部分内容DocumentRoot /website/1  ServerName website1AllowOverride None   Require all grantedDocumentRoot /website/2   ServerName website2AllowOverride None    Require all grantedDocumentRoot /website/3   ServerName website3AllowOverride None    Require all granted...省略部分内容

添加如下配置,并保存退出

重启httpd使其生效。

[root@apache website]# systemctl restart httpd
3.2.4 测试访问

由于是继续上前文的环境下实验,前文已经设置好了防火墙和SELinux,所以直接就可以访问了,如果你遇到不能访问的情况,请参考前文检查相关设置。

注意:

(1)前边已经把/website目录添加了SELinux的上下文,因此无需把刚刚创建的子目录/website/1等进行设置。

(2)前文实验中直接通过ip可以访问/website/index.html文件,本文实验并没有删除原来的配置,只是新加了虚拟主机相关配置,可以看到,再次访问192.168.78.101这个ip是指向新的虚拟主机网站,而非原来的网站。也就是会虚拟主机配置会覆盖原来设置,优先级更高。

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@apache website]# vim /etc/hosts 192.168.78.101 test1.heimatengyun.com test2.heimatengyun.com test3.heimatengyun.com

在文件末尾添加以上内容保存并退出。

在虚拟机中确保可以ping同以上各个域名。

[root@apache website]# ping -c 1 test1.heimatengyun.com PING test1.heimatengyun.com (192.168.78.101) 56(84) bytes of data. 64 bytes from test1.heimatengyun.com (192.168.78.101): icmp_seq=1 ttl=64 time=0.033 ms --- test1.heimatengyun.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.033/0.033/0.033/0.000 ms [root@apache website]#

这样等后续操作完成后就可以在虚拟机内部通过域名进行访问。

但是如果想让宿主机也能进行访问的话,需要在宿主机中也要添加IP与域名的映射。由于我的宿主机为win10,因此将以上IP与域名的映射内容添加到C:\Windows\System32\drivers\etc\hosts文件即可。然后在宿主机就可以ping同前面的三个域名。

3.2.2 准备多个网站

由于是直接采用原来的三个网站,先修改下每个网页里边的内容,我们采用重定向往原来页面中追加对应的域名信息,方便后续验证效果。

[root@apache website]# echo "test1.heimatengyun.com">>/website/1/index.html [root@apache website]# echo "test2.heimatengyun.com">>/website/2/index.html [root@apache website]# echo "test3.heimatengyun.com">>/website/3/index.html
3.2.3 配置Apache

修改Apache主配置文件,/etc/httpd/conf/httpd.conf

[root@apache website]# vim /etc/httpd/conf/httpd.conf ...省略部分内容DocumentRoot /website/1  ServerName test1.heimatengyun.comAllowOverride None   Require all grantedDocumentRoot /website/2   ServerName test2.heimatengyun.comAllowOverride None    Require all grantedDocumentRoot /website/3   ServerName test3.heimatengyun.comAllowOverride None    Require all granted...省略部分内容

在配置文件中添加上述内容并保存退出。

注意:此处可以对比之前的IP配置,配置参数都是基本一样的,唯一的不同是之前每个网站对应不同IP,现在是都写同一个IP。可以自行对比

修改完成后重启Apache,使其生效。

[root@apache website]# systemctl restart httpd

注意:修改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@apache website]# echo "8111">>/website/1/index.html [root@apache website]# echo "8222">>/website/2/index.html [root@apache website]# echo "8333">>/website/3/index.html
3.3.2 Apache配置

对/etc/httpd/conf/httpd.conf进行配置,使其支持多端口监听

(1)在大概43行左右,添加端口监听

[root@apache website]# vim /etc/httpd/conf/httpd.conf ...省略部分内容 Listen 8111 Listen 8222 Listen 8333 ...省略部分内容

继续下边的修改

(2)在大概120行左右,追加基于端口号的虚拟主机参数配置

DocumentRoot /website/1  ServerName test1.heimatengyun.comAllowOverride None   Require all grantedDocumentRoot /website/2   ServerName test2.heimatengyun.comAllowOverride None    Require all grantedDocumentRoot /website/3   ServerName test3.heimatengyun.comAllowOverride None    Require all granted...省略部分内容

保存退出

与3.2.3相对,没有太大变化,只是在IP后添加端口即可,几种配置方法都大同小异。

重启apache使其生效

[root@apache website]# systemctl restart httpd Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details. [root@apache website]# journalctl -xn ...省略部分内容 *****  Plugin bind_ports (92.2 confidence) suggests  If you want to allow /usr/sbin/httpd to bind to network port 8111  Then you need to modify the port type.  Do  # semanage port -a -t PORT_TYPE -p tcp 8111  ...省略部分内容

但是你会发现,重启失败。如果你查看日志,会发现这样的提示内容,别担心,这正是刚开始提到的SELinux在搞鬼。

3.3.3 设置SELinux域

查看目前默认的SELinux允许的与HTTP协议相关的端口

[root@apache website]# semanage port -l | grep http http_cache_port_t              tcp      8080, 8118, 8123, 10001-10010 http_cache_port_t              udp      3130 http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000 pegasus_http_port_t            tcp      5988 pegasus_https_port_t           tcp      5989 [root@apache website]#

于是我们要把刚才新加的三个端口添加进入

[root@apache website]# semanage port -a -t http_port_t -p tcp 8111 [root@apache website]# semanage port -a -t http_port_t -p tcp 8222 [root@apache website]# semanage port -a -t http_port_t -p tcp 8333

添加完成重启apache

[root@apache website]# systemctl restart httpd
3.3.4 测试访问

经过以上的操作在虚拟机内容通过浏览器进行访问,可以正常通过各个端口去访问对应的网站。

但是如果在宿主机进行访问,你会发现访问不了。这无疑就是因为防火墙在搞鬼。

利于“linux入门系列10--firewalld防火墙管理”讲解的知识,将这3个对应的端口放行即可。

[root@apache website]# firewall-cmd --zone=public --list-ports  [root@apache website]# firewall-cmd --zone=public --add-port=8111/tcp           success [root@apache website]# firewall-cmd --zone=public --add-port=8222/tcp  success [root@apache website]# firewall-cmd --zone=public --add-port=8333/tcp

此时,再次在宿主机进行访问,就可以正常访问了。

细心的你可能会发现,如果是按照上边的步骤一路下来的话,你会发现现在其实是3种方式都开启的。分别通过不同的端口去访问,可以正常访问到对应的不同网站。

但是通过如果你通过ip或域名再去访问的话,你会发现统统都指向前一篇文章中案例1指向的网页。为什么会这样呢?那是因为之前案例没有显式指定端口,默认的端口为80。因此如果没显式指定端口,默认是去web的80端口的。

四、Apache访问控制

Apache可以基于源主机名、源IP地址或源主机上的浏览器特征等信息对网站上的资源进行访问控制。简单说就是能控制网站让指定用户才能看到。

主要是通过访问控制指令实现,常用指令有:Allow、Deny、Order

Allow:允许某个主机访问服务器上的网站资源

Deny:实现禁止访问

Order:  定义Allow或Deny指令起作用的顺序,其匹配原则是按照顺序进行匹配,若匹配成功则执行后面的默认指令。

举个例子:

Order Allow, Deny:表示先将源主机与允许规则进行匹配,若匹配成功则允许访 问请求,反之则拒绝访问请求。

4.1 通过IP控制

假设我们的需求是:让前面部署的1网站只允许虚拟机内部进行访问,禁止外部机器访问。

[root@apache website]# vim /etc/httpd/conf/httpd.conf  ...省略部分内容DocumentRoot /website/1  ServerName test1.heimatengyun.comAllowOverride None   Require all granted Order allow,deny Allow from 192.168.78.101...省略部分内容

我们只需要打开主配置文件,在添加Order allow,deny和Allow from 192.168.78.101即可实现。配置之后,重启apache,发现在虚拟机里可以正常访问,但是在宿主机已经不能访问了此网站了(直接跳转到测试页面)。

除此之外还可以通过浏览器特征来限制指定浏览器进行访问,再此就不进行演示了。

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/20109.html

    分享给朋友:

    “linux入门系列18--Web服务之Apache服务2” 的相关文章

    电信精品网CN2:开启智能时代新篇章

    CN2——网络性能的巅峰之作在互联网飞速发展的今天,网络性能已成为企业竞争力和用户体验的关键因素。中国电信推出的精品网CN2,正是针对这一需求量身打造的高端网络服务。作为国内首个专注于高质量网络传输的服务平台,CN2以其卓越的网络架构和技术创新,重新定义了网络服务的标准,为用户带来了前所未有的极致体...

    SSH软件终极指南:安全远程登录与文件传输的便捷解决方案

    SSH软件是一种用于实现安全登录、传输文件、执行命令等功能的应用程序。它基于SSH协议,为用户提供了一种加密的通信方式,确保数据在传输过程中的安全性。无论是系统管理员、开发人员,还是普通用户,SSH软件都是日常工作中不可或缺的工具。 SSH协议简介 SSH(Secure Shell)协议是一种网络协...

    DC3 CN2 VPS方案分析:搬瓦工的性价比之选

    在了解搬瓦工的服务时,我发现了DC3 CN2这个机房方案。它位于美国洛杉矶,是搬瓦工(BandwagonHost)推出的一项虚拟专用服务器(VPS)方案。选择这个机房的用户通常是因为它的网络性能和价格平衡。在洛杉矶的QNET(QuadraNet)机房基础上,搬瓦工向QNET买断了部分CN2 GT线路...

    深入解析APT攻击及其主要案例分析

    在网络安全的领域,APT攻击近年来引起了广泛关注。这种高级持续性威胁(APT)通常是由高度专业化的攻击者发起,针对特定目标进行长期、隐蔽的攻击。APT攻击的目标通常是国家级别的机构、企业、科研单位等,它们的攻击方式不仅难以检测,而且往往具有明显的目的性。 回顾APT攻击的历史,我们可以发现其起源与发...

    搬瓦工VPS与CN2线路解析:提升网络稳定性与性价比

    搬瓦工(BandwagonHost)是一家值得关注的国外VPS主机服务商,因其性价比高、性能优异而在用户中口耳相传。最初我对搬瓦工的了解并不多,但随着对VPS服务需求的增加,自然也对市场上比较有名的服务商产生了浓厚的兴趣。在我研究的过程中,搬瓦工的特点确实吸引了我的眼球,尤其适合需要稳定网络和较高性...

    国内注册ChatGPT的安全与实用指南

    在使用ChatGPT服务时,安全与隐私保护是非常重要的。首先,我总是尽量避免在聊天或任何交流中输入敏感信息。无论是个人身份、财务信息,还是其他隐私内容,我都保持警惕,确保我的信息不会被泄露。即便是在与AI进行对话时,这种谨慎也同样必要,因为即使是最可信的平台也无法完全保障信息不被滥用。 还有一点是选...