使用Apache服务部署静态网站

网站服务程序

我们平时访问的网站服务就是Web网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务
Web网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的Web服务器会通过HTTP(超文本传输协议)或HTTPS(安全超文本传输协议)把请求的内容传送给用户
目前能够提供Web网络服务的程序有IIS、Nginx和Apache等。其中,IIS(Internet Information Services,互联网信息服务)是Windows系统中默认的Web服务程序,这是一款图形化的网站管理工具,不仅可以提供Web网站服务,还可以提供FTP、NMTP、SMTP等服务。但是,IIS只能在Windows系统中使用
部署Apache程序:

yum install httpd         #安装Apache服务程序(Apache服务的软件包名为httpd)
systemctl start httpd     #启用httpd服务
systemctl enable httpd    #加入开机启动项

用浏览器访问:127.0.0.1(本机)可以看到httpd服务程序的默认页面,当看到这个页面时,说明服务程序正常启动,但可能还会有另外两种情况:
1.权限不足
2.网站内没有数据

在这里插入图片描述配置服务文件参数
在Linux系统中配置服务,其实就是修改服务的配置文件,因此,还需要知道这些配置文件的所在位置以及用途,httpd服务程序的主要配置文件及存放位置如表所示

服务目录 	     /etc/httpd
主配置文件 	     /etc/httpd/conf/httpd.conf
网站数据目录 	 /var/www/html
访问日志 	     /var/log/httpd/access_log
错误日志     	 /var/log/httpd/error_log

在httpd服务程序的主配置文件中,存在三种类型的信息:注释行信息、全局配置、区域配置,如图所示
在这里插入图片描述全局配置参数与区域配置参数的区别:

全局配置:一种全局性的配置参数,可作用于对所有的子站点,既保证了子站点的正常访问,也有效减少了频繁写入重复参数的工作量。
区域配置:单独针对于每个独立的子站点进行设置。

在httpd服务程序主配置文件中,最为常用的参数如图所示
在这里插入图片描述从上图中可知,DocumentRoot参数用于定义网站数据的保存路径,其参数的默认值是把网站数据存放到/var/www/html目录中;而当前网站普遍的首页面名称是index.html,因此可以向/var/www/html目录中写入一个文件,替换掉httpd服务程序的默认首页面,该操作会立即生效。
实例:修改保存网站数据的目录

mkdir  /home/wwwroot					#建立新的网站数据保存目录
echo  "welcome"  >  /home/wwwroot/index.html					#创建首页文件内容
vim  /etc/httpd/conf/httpd.conf					#修改httpd服务程序主配置文件,把网站数据保存路径修改为/home/wwwroot
			119行  DocumentRoot "/home/wwwroot"					#用于定义网站数据保存路径的参数DocumentRoot修改为/home/wwwroot
			124行  <Directory "home/wwwroot">     		 #用于定义目录权限的参数Directory后面的路径也修改为/home/wwwroot
systemctl  restart  httpd					#重启服务后查询网页,会发现因为权限不足导致出现的是httpd默认首页(SElinux的安全上下文).

SELinux安全子系统 (一般情况下默认为关闭)
SELinux(Security-Enhanced Linux)是美国国家安全局在Linux开源社区的帮助下开发的一个强制访问控制(MAC,Mandatory Access Control)的安全子系统。RHEL 7系统使用SELinux技术的目的是为了让各个服务进程都受到约束,使其仅获取到本应获取的资源。
“SELinux域”和“SELinux安全上下文”称为是Linux系统中的双保险,系统内的服务程序只能规规矩矩地拿到自己所应该获取的资源,这样即便黑客入侵了系统,也无法利用系统内的服务程序进行越权操作。但是,非常可惜的是,SELinux服务比较复杂,配置难度也很大,加之很多运维人员对这项技术理解不深,从而导致很多服务器在部署好Linux系统后直接将SELinux禁用了;这绝对不是明智的选择。
SELinux服务有三种配置模式,具体如下:

enforcing:强制启用安全策略模式,将拦截服务的不合法请求。
permissive:遇到服务越权访问时,只发出警告而不强制拦截。
disabled:对于越权的行为不警告也不拦截。

虽然在禁用SELinux服务后确实能够减少报错几率,但这在生产环境中相当不推荐
SELinux服务的主配置文件中,定义的是SELinux的默认运行状态,可以将其理解为系统重启后的状态,因此它不会在更改后立即生效。可以使用getenforce命令获得当前SELinux服务的运行模式:

getenforce:查看当前SELinxu服务的运行模式
setenforce [0|1]:修改SELinux当前的运行模式(0禁用,1启用)。此修改是临时的,在系统重启后就会失效

分析上面实例被SELinux拦截的原因:
httpd服务程序的功能是允许用户访问网站内容,因此SELinux会默认放行用户对网站的请求操作。但是,/home目录是用来存放普通用户的家目录数据的,而将网站数据的默认保存目录修改为了/home/wwwroot,导致httpd提供的网站服务要去获取普通用户家目录中的数据,这显然违反SELinux的监管原则
semanage命令: 用于管理SELinux的策略,格式:semanage [选项] [文件]。
semanage命令不仅能够像传统chcon命令那样—设置文件、目录的策略,还可以管理网络端口、消息接口。常用参数:

参数作用
-l用于查询
-a用于添加
-m用于修改
-d用于删除
-t指定要想修改的值

semanage命令没有递归功能,因此要先修改目录的安全上下文,再修改目录里所有文件的安全上下文。另外semanage命令修改好的配置不会立即生效。
restorecon命令: 将设置好的SELinux安全上下文立即生效。格式: restorecon [选项] [指定目录或文件]。
常用参数:

-R:对指定目录进行递归操作
-v:显示SELinux安全上下文的修改过程

实例:解决上面实例被SELinux拦截的问题。

ls -Zd /var/www/html  					  #查看原始网站数据的保存目录的SELinux安全上下文值,SElinux安全上下文为httpd_sys_content_t
ls -Zd /home/wwwroot  					  #查看当前网站数据的保存目录的SELinux安全上下文值,SELinux安全上下文为home_root_t
semanage  fcontext  -a  -t  httpd_sys_content_t  /home/wwwroot      					 #修改目录的安全上下文为httpd_sys_content_t
semanage  fcontext  -a  -t  httpd_sys_content_t  /home/wwwroot/*   					 #修改目录里的所有文件的安全上下文为httpd_sys_content_t(目录和文件分别进行修改)
restorecon -Rv /home/wwwroot/						#使设置好的SELinux安全上下文立即生效

在这里插入图片描述

个人用户主页功能

如果想在系统中为每位用户建立一个独立的网站,通常的方法是基于虚拟网站主机功能来部署多个网站。但这个工作会让管理员苦不堪言(尤其是用户数量很庞大时),而且在用户自行管理网站时,还会碰到各种权限限制,需要为此做很多额外的工作。其实,httpd服务程序提供的个人用户主页功能完全可以胜任这个工作。该功能可以让系统内所有的用户在自己的家目录中管理个人的网站,而且访问起来也非常容易。

getsebool命令:搭配-a参数输出所有安全策略(off禁止,on允许)
setsebool命令:修改SELinux策略中各条规则的布尔值。搭配-P参数使得修改后的SELinux策略规则立即且永久生效。

实例:实现个人用户主页功能

vim  /etc/httpd/conf.d/userdir.conf					#修改配置文件,让httpd服务程序开启个人用户主页功能
		17行  UserDir public_html  					#UserDir参数表示网站数据在用户家目录中的保存目录名称,即public_html目录,与31行目录名一致(或注释17行,开启24行)
su  -  linux					#切换到普通用户下
mkdir  public_html                       #注意要和配置文件中的目录名一致(在家目录中创建)
echo  "welcome"  >    public_html/index.html					#输入个人主页功能
chmod  -Rf  755  public_html					#给予个人主页755权限
su  -  
systemctl  restart  httpd					#重启服务,在浏览器输入网址验证(格式:网址/~用户名),会报错。原因依然在于SELinux。
getsebool  -a  |  grep  http					#查询并过滤出所有与http协议相关的安全策略
setsebool  -P  httpd_enable_homedirs=on					#修改httpd_enable_homedirs为on状态并立即且永久生效。
systemctl  restart  httpd

实例:在上面实例的基础上,为网站中添加口令功能,让只有通过身份验证的用户访客才能看到网站内容(添加用户名密码)
==htpasswd命令:==建立和更新存储用户名、密码的文本文件, 用于对HTTP用户的basic认证。
htpasswd 是开源 http 服务器apache httpd的一个命令工具。其中,用于验证的用户名称不必是系统已有的本地账户,该命令生成的账户密码和系统中的账户密码是独立的,没有联系。

htpasswd  -c  /etc/httpd/passwd linux						#生成密码文件,添加一个名为linux的用户(-c参数:创建密码文件.如果密码文件已经存在,那么它会重新写入并删去原有内容。)
vim  /etc/httpd/conf.d/userdir.conf					#修改31行<Directory "/home/*/public_html">后内容
		allowoverride  all                   #允许伪静态技术
		authuserfile  "/etc/httpd/passwd"    #指定生成的密码文件的存放路径
		authname  "Hello"                    #当用户尝试访问个人用户网站时的提示信息
		authtype  basic                      #认证级别:采用基本验证方式
		require  user  linux                   #指定用户进行账户密码认证时支持验证的用户(可以支持多个用户验证,比如:mumu,haha)
systemctl restart httpd

虚拟网站主机功能

利用虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个“虚拟的服务器”。但是,该技术无法实现目前云主机技术的硬件资源隔离,让这些虚拟的服务器共同使用物理服务器的硬件资源,供应商只能限制硬盘的使用空间大小。出于各种考虑的因素(主要是价格低廉),目前依然有很多企业或个人站长在使用虚拟主机的形式来部署网站。

Apache的虚拟主机功能是服务器基于用户请求的不同IP地址、主机域名或端口号,实现提供多个网站同时为外部提供访问服务的技术,如图所示,用户请求的资源不同,最终获取到的网页内容也各不相同
在这里插入图片描述在配置虚拟网站主机功能前,做些基本设置:分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首页文件。每个首页文件中要有明确区分不同网站内容的信息,以便能更直观地检查效果。由前面实例可知,目录/home/wwwroot及其下级目录和文件一定会受到SELinux安全上下文的制约,要修改相关内目录及其里面所有文件的SELinux安全上下文,并让设置立即生效

mkdir -p /home/wwwroot/A
mkdir -p /home/wwwroot/B
mkdir -p /home/wwwroot/C
echo "This is A" > /home/wwwroot/A/index.html
echo "This is B" > /home/wwwroot/B/index.html
echo "This is C" > /home/wwwroot/C/index.html

基于IP地址实现虚拟网站主机功能

vim /etc/sysconfig/network-scripts/ifcfg-eno16777728					##为网卡配置3个ip地址(方法很多)
		IPADDR0=192.168.23.10
		IPADDR1=192.168.23.20
		IPADDR2=192.168.23.30
vim /etc/httpd/conf/httpd.conf					#编辑httpd服务的主配置文件,追加写入3个基于IP地址的虚拟主机网站参数(113行后)
		 <virtualHost 192.168.23.10>  					   #虚拟主机参数开始
		 documentroot	 /home/wwwroot/A  				  #虚拟主机的家目录
		servername  www.a.com    					        #虚拟主机的域名
		 <directory	 /home/wwwroot/A >					    #子目录权限指定
		 allowoverride  none                  					 #关闭伪静态
		require  all  granted      					       #允许所有环回请求
		 </directory>
		</virtualhost>            		      #虚拟主机参数结束
		<virtualHost 192.168.23.20>  					   
		 documentroot	 /home/wwwroot/B  				
		servername  www.b.com    					        
		 <directory	 /home/wwwroot/B >					  
		 allowoverride  none                  					 
		require  all  granted      					       
		 </directory>
		</virtualhost>            		     
		<virtualhost 192.168.23.30>  					   
		 documentroot	 /home/wwwroot/C  				 
		servername  www.c.com    					       
		 <directory	 /home/wwwroot/C >					   
		 allowoverride  none                  					 
		require  all  granted      					       
		 </directory>
		</virtualhost>            		      
systemctl restart httpd					#重启httpd服务,在浏览器分别输入相应的ip地址进行验证

基于主机域名实现虚拟网站主机功能

vim /etc/httpd/conf/httpd.conf					#编辑httpd服务的主配置文件,追加写入3个基于主机域名的虚拟主机网站参数(113行后)
		 <virtualhost 192.168.23.10>  					   #虚拟主机参数开始
		 documentroot	 /home/wwwroot/A  				  #虚拟主机的家目录
		servername  www.a.com    					        #虚拟主机的域名
		 <directory	 /home/wwwroot/A >					    #子目录权限指定
		 allowoverride  none                  					 #关闭伪静态
		require  all  granted      					       #允许所有环回请求
		 </directory>
		</virtualhost>            		      #虚拟主机参数结束
		<virtualhost 192.168.23.10>  					   
		 documentroot	 /home/wwwroot/B  				
		servername  www.b.com    					        
		 <directory	 /home/wwwroot/B >					  
		 allowoverride  none                  					 
		require  all  granted      					       
		 </directory>
		</virtualhost>            		     
		<virtualhost 192.168.23.10>  					   
		 documentroot	 /home/wwwroot/C  				 
		servername  www.c.com    					       
		 <directory	 /home/wwwroot/C >					   
		 allowoverride  none                  					 
		require  all  granted      					       
		 </directory>
		</virtualhost>          
vim  /etc/hosts					  		#修改主机配置文件
		  		  192.168.10.10  www.a.com  www.b.com  www.c.com    
systemctl restart httpd					#重启httpd服务,在浏览器分别输入相应的主机域名进行验证

基于端口号实现虚拟网站主机功能

vim /etc/httpd/conf/httpd.conf					#编辑httpd服务的主配置文件,追加写入3个基于主机域名的虚拟主机网站参数
		Listen 80                          #监听端口80参数(43行左右)
		Listen 666
		Listen 888
		 <virtualhost 192.168.23.10:80>  					   #虚拟主机参数开始,基于端口的虚拟主机网站参数(113行左右)
		 documentroot	 /home/wwwroot/A  				  #虚拟主机的家目录
		servername  www.a.com    					        #虚拟主机的域名
		 <directory	 /home/wwwroot/A >					    #子目录权限指定
		 allowoverride  none                  					 #关闭伪静态
		require  all  granted      					       #允许所有环回请求
		 </directory>
		</virtualhost>            		      #虚拟主机参数结束
		<virtualhost 192.168.23.10:666>  					   
		 documentroot	 /home/wwwroot/B  				
		servername  www.b.com    					        
		 <directory	 /home/wwwroot/B >					  
		 allowoverride  none                  					 
		require  all  granted      					       
		 </directory>
		</virtualhost>            		     
		<virtualhost 192.168.23.10:888>  					   
		 documentroot	 /home/wwwroot/C  				 
		servername  www.c.com    					       
		 <directory	 /home/wwwroot/C >					   
		 allowoverride  none                  					 
		require  all  granted      					       
		 </directory>
		</virtualhost>          
semanage  port -l  |  grep  http                   #使用semanage命令查询并过滤出所有与HTTP协议相关且SELinux服务允许的端口列表。
semanage  port  -a  -t  http_port_t -p  tcp  666    #在SELinux允许的与HTTP协议相关的端口号中添加相应的端口号
semanage  port  -a  -t  http_port_t -p  tcp  888
semanage  port  -l  |  grep  http                   #添加端口号的操作会立即且永久生效,再一次查看与HTTP协议相关且SELinux服务允许的端口列表。
systemctl  restart  httpd
访问192.168.10.10:80,显示“This is A”

Apache的访问控制

Apache可以基于源主机名、源IP地址或源主机上的浏览器特征等信息对网站上的资源进行访问控制。它通过Allow指令允许某个主机访问服务器上的网站资源,通过Deny指令实现禁止访问。在允许或禁止访问网站资源时,还会用到Order指令,这个指令用来定义Allow或Deny指令起作用的顺序,其匹配原则是按照顺序进行匹配,若匹配成功则执行后面的默认指令。比如“Order Allow, Deny”表示先将源主机与允许规则进行匹配,若匹配成功则允许访问请求,反之则拒绝访问请求
设置Apache访问控制,使得只有ip地址为192.168.10.1或使用火狐浏览器的客户端才能访问指定的网页

vim  /etc/httpd/conf/httpd.conf						#修改httpd服务的主配置文件,编辑规则限制源主机的访问
		<directory  "/home/wwwroot/10/server"> 					   #针对该子目录的权限设置
		setenvIf  User-Agent  "Firefox"  ff=1					    #设置环境变量,相当于ff="用户通过Firefox访问" (User-Agent为浏览器标志,ff为别名)
		order  allow,deny                    					  #先匹配允许规则再匹配拒绝规则(重)
		deny  from  192.168.10.55     					          #拒绝ip地址为192.168.10.55的主机访问
		allow  from  env=ff             			        #允许使用火狐浏览器的人访问
		 allow  from  192.168.10.1   			            #允许ip地址192.168.10.1的主机访问
		</directory>
systemctl restart httpd

测试结果:
ip地址为192.168.10.1的主机使用非火狐浏览器也能访问;
ip地址为192.168.10.55的主机即使使用火狐浏览器也不能访问;
ip地址不是192.168.10.1的主机使用火狐浏览器可以访问。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值