网站服务程序
网站服务程序
目前能够提供Web网络服务的程序有IIS、Nginx和Apache等。其中,IIS(Internet Information Services,互联网信息服务)是Windows系统中默认的Web服务程序,这是一款图形化的网站管理工具,不仅可以提供Web网站服务,还可以提供FTP、NMTP、SMTP等服务。但是,IIS只能在Windows系统中使用.

2004年10月4日,为俄罗斯知名门户站点而开发的Web服务程序Nginx横空出世。Nginx程序作为一款轻量级的网站服务软件,因其稳定性和丰富的功能而快速占领服务器市场,但Nginx最被认可的还当是系统资源消耗低且并发能力强,因此得到了国内诸如新浪、网易、腾讯等门户站的青睐。
Apache程序是目前拥有很高市场占有率的Web服务程序之一,其跨平台和安全性广泛被认可且拥有快速、可靠、简单的API扩展。的名字取自美国印第安人的土著语,寓意着拥有高超的作战策略和无穷的耐性。Apache服务程序可以运行在Linux系统、UNIX系统甚至是Windows系统中,支持基于IP、域名及端口号的虚拟主机功能,支持多种认证方式,集成有代理服务器模块、安全Socket层(SSL),能够实时监视服务状态与定制日志消息,并有着各类丰富的模块支持。

Apache程序也是在RHEL 5、6、7、8系统的默认Web服务程序.
1 | # 安装Apache 服务程序, 添加自启动 |
1 | systemctl list-units --type=service # 查看所有服务状态 |
可以访问回环地址 127.0.0.1 看到web 服务器的默认页面

配置服务文件参数

在httpd服务程序的主配置文件中,存在三种类型的信息:注释行信息、全局配置、区域配置

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

SELinux 安全子系统
SELinux(Security-Enhanced Linux)是美国国家安全局在Linux开源社区的帮助下开发的一个强制访问控制
(MAC,Mandatory Access Control)的安全子系统。Linux系统使用SELinux技术的目的是为了让各个服务进程
都受到约束,使其仅获取到本应获取的资源。
它能够从多方面监控违法行为:对服务程序的功能进行限制-- SELinux域限制可以确保服务程序做不了出格的事情;对文件资源的访问限制-- SELinux安全上下文确保文件资源只能被其所属的服务程序进行访问。
SELinux服务有三种配置模式:
- enforcing:强制启用安全策略模式,将拦截服务的不合法请求。
- permissive:遇到服务越权访问时,只发出警告而不强制拦截。
- disabled:对于越权的行为不警告也不拦截。
1 | vim /etc/selinux/config |

SELinux服务的主配置文件中,定义的是SELinux的默认运行状态, 不会在更改后立即生效
1 | getenforce # 获取当前 SELinux 服务的运行模式 |
s命令中“-Z”参数用于查看文件的安全上下文值
1 | ls -Zd /var/www/html |

semanage命令用于管理SELinux的策略,英文全称为:“SELinux manage”,

向新的网站数据目录中新添加一条SELinux安全上下文,让这个目录以及里面的所有文件能够被httpd服务程序所访问到:
1 | semanage fcontext -a -t httpd_sys_content_t /home/wwwroot |
使用restorecon命令将设置好的SELinux安全上下文立即生效。在使用 restorecon命令时,可以加上-Rv参数对指定的目录进行递归操作,以及显示SELinux安全上下文的修改过程。
1 | restorecon -Rv /home/wwwroot |

个人用户主页功能
httpd服务程序提供个人用户主页功能, 能让系统内所有用户在自己的家目录中管理个人网站.
1 | vim /etc/httpd/conf.d/userdir.conf |
启用UserDir, 数据在用户家目录中的保存目录为public_html目录

1 | cd ~ |
有SE限制
1 | getsebool -a | grep http |

有时,网站的拥有者并不希望直接将网页内容显示出来,只想让通过身份验证的用户访客看到里面的内容。
- 使用htpasswd命令生成密码数据库。-C参数表示第一次生成; 后面再分别添加密码数据库的存放文件,以及验证要用到的用户名称(该用户不必是系统中已有的本地账户)。
1 | htpasswd -c /etc/httpd/passwd slacr |


虚拟网站主机功能
在虚拟专用服务器(Virtual Private Server,VPS) 与云计算技术诞生以前,IDC服务供应商为了能够更充分地利用服务器资源,同时也为了降低购买门槛,于是纷纷启用了虚拟主机功能。
利用虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个“虚拟的服务器”。但是,该技术无法实现目前云主机技术的硬件资源隔离,让这些虚拟的服务器共同使用物理服务器的硬件资源,供应商只能限制硬盘的使用空间大小。出于各种考虑的因素(主要是价格低廉),目前依然有很多企业或个人站长在使用虚拟主机的形式来部署网站。
Apache的虚拟主机功能是服务器基于用户请求的不同IP地址、主机域名或端口号,实现提供多个网站同时为外部提供访问服务的技术
基于IP地址
如果一台服务器有多个IP地址,而且每个IP地址与服务器上部署的每个网站——对应,这样当用户请求访问不同的IP地址时,会访问到不同网站的页面资源。



1 | systemctl reload httpd |

把firewalld的http服务启用, 可以允许局域网上的其他设备访问

基于主机域名
当服务器无法为每个网站都分配一个独立IP地址的时候,可以尝试让Apache自动识别用户请求的域名,从而根据不同的域名请求来传输不同的内容。在这种情况下的配置更加简单,只需要保证位于生产环境中的服务器上有一个可用的IP地址就可以了。由于当前还没有介绍如何配置DNS解析服务,因此需要手工定义IP地址与域名之间的对应关系。/etc/hosts是Linux系统中用于强制把某个主机域名解析到指定IP地址的配置文件。
1 | vi /etc/hosts |


1 | mkdir -p /home/wwwroot/a /home/wwwroot/b /home/wwwroot/c |

1 | systemctl reload httpd |

基于端口号
基于端口号的虚拟主机功能可以让用户通过指定的端口号来访问服务器上的网站资源。在使用Apache配置虚拟网站主机功能时,基于端口号的配置方式是最复杂的。因此我们不仅要考虑httpd服务程序的配置因素,还需要考虑到SELinux服务对新开设端口的监控。一般来说,使用80、443、8080等端口号来提供网站访问服务是比较合理的,如果使用其他端口号则会受到SELinux服务的限制.
1 | mkdir -p /home/wwwroot/6111 /home/wwwroot/6222 /home/wwwroot/6333 |


1 | semanage fcontext -a -t httpd_sys_content_t /home/wwwroot |
6111、6222和6333端口原本不属于Apache服务应该需要的资源,但现在却以httpd服务程序的名义监听使用了,所以SELinux会拒绝使用Apache服务使用这三个端口。我们可以使用semanage命令查询并过滤出所有与HTTP协议相关且SELinux服务允许的端口列表。
SELinux允许的与HTTP协议相关的端口号中默认没有包含6111、6222和6333,因此需要将这三个端口号手动添加进去。该操作会立即生效,而且在系统重启过后依然有效。
1 | semanage port -l | grep http |

Apache 的访问控制
Apache可以基于源主机名、源IP地址或源主机上的浏览器特征等信息对网站上的资源进行访问控制。它通过Allow指令允许某个主机访问服务器上的网站资源,通过Deny指令实现禁止访问。在允许或禁止访问网站资源时,还会用到Order指令,这个指令用来定义Allow或Deny指令起作用的顺序,其匹配原则是按照顺序进行匹配,若匹配成功则执行后面的默认指令。比如"Order Allow, Deny"表示先将源主机与允许规则进行匹配,若匹配成功则允许访问请求,反之则拒绝访问请求。
1 | mkdir /var/www/html/server |

这段规则的含义是允许使用Firefox浏览器的主机访问服务器上的首页文件,除此之外的所有请求都将被拒绝。
1 | systemctl restart httpd |

除了匹配源主机的浏览器特征之外,还可以通过匹配源主机的IP地址进行访问控制.


测试的时候发现, 如果多条规则同时存在, 只要满足其中一条就允许访问该目录. 比如限制了User-Agent也就是浏览器和源IP, 就算源IP不满足, 如果满足浏览器的要求还是有访问权限.
参考