1. Apache程序作为老牌的Web服务程序,一方面在Web服务器软件市场具有相当高的占有率,另一方面Apache也是RHEL 7系统中默认的Web服务程序,而且还是RHCSARHCE认证考试的必考内容,因此无论从实际应用角度还是从应对红帽认证考试的角度,我们都有必要好好学习Apache服务程序的部署,并深入挖掘其可用的丰富功能。

    安装:
    yum install httpd
    systemctl start httpd
    systemctl enable httpd

    Apache 配置文件

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

    image.png

    参数 用途
    ServerRoot 服务目录
    ServerAdmin 管理员邮箱
    User 运行服务的用户
    Group 运行服务的用户组
    ServerName 网站服务器的域名
    DocumentRoot 网站数据目录
    Directory 网站数据目录的权限
    Listen 监听的IP地址与端口号,可监听多个IP与端口
    DirectoryIndex 默认的索引页页面
    ErrorLog 错误日志文件
    CustomLog 访问日志文件
    Timeout 网页超时时间,默认为300秒

    在执行下面命令,创建网站首页
    [root@redhat ~]# echo “Welcome to REHL 7” >> /var/www/html/index.html
    打开 127.0.0.1
    image.png
    个人主页功能

    1. 编辑配置文件
    2. 创建文件夹,配置权限
    3. 修改 SELinux 权限

    [root@linux ~]# vim /etc/httpd/conf.d/userdir.conf
    #

    #
    # UserDir is disabled by default since it can confirm the presence
    # of a username on the system (depending on home directory
    # permissions).
    #
    UserDir enable

    1. #<br /> # To enable requests to /~user/ to serve the user's public_html<br /> # directory, remove the "UserDir disabled" line above, and uncomment<br /> # the following line instead:<br /> #<br /> UserDir public_html<br /></IfModule><br />[linux@linux ~]$ mkdir public_html<br />[linux@linux ~]$ echo "This is Linux's website" > public_html/index.html<br />[linux@linux ~]$ chmod 755 /home/linux/

    [root@linux ~]# setsebool httpd_enable_homedirs on
    访问测试
    image.png

    apache 配置 HTTP 基本身份验证

    1. 使用 htpasswd 生产数据库。-c 表示第一次生成,后面再分别添加密码数据库的存放文件,以及验证要用到的用户名称。
    2. 配置 /etc/httpd/conf.d/userdir.conf

    [root@linux ~]# htpasswd -c /etc/httpd/pass redhat
    New password:
    Re-type new password:
    Adding password for user redhat

    AllowOverride all // 伪静态
    authuserfile “/etc/httpd/pass”
    authname “My privately website”
    authtype basic
    require user linux
    allauthname //网站提示信息

    Apache的虚拟主机功能是服务器基于用户请求的不同IP地址、主机域名或端口号,实现提供多个网站同时为外部提供访问服务的技术
    image.png

    基于 IP 地址
    如果一台服务器有多个IP地址,而且每个IP地址与服务器上部署的每个网站一一对应,这样当用户请求访问不同的IP地址时,会访问到不同网站的页面资源。而且,每个网站都有一个独立的IP地址,对搜索引擎优化也大有裨益。

    1. 给网卡添加多个IP地址并测试(相关命令 nmtui)。
    2. 创建不同 IP 地址的目录 (mkdir -p /home/wwwroot/{10,20,30})
    3. 配置 httpd 服务参数

    DocumentRoot /home/wwwroot/10
    ServerName bbs.linux.com

    AllowOverride None
    Require all granted

    基于主机域名
    当服务器无法为每个网站都分配一个独立IP地址的时候,可以尝试让Apache自动识别用户请求的域名,从而根据不同的域名请求来传输不同的内容。在这种情况下的配置更加简单,只需要保证位于生产环境中的服务器上有一个可用的IP地址就可以了。

    1. 配置 /etc/hosts 文件,将不同域名解析到本机IP
    2. 创建不同web应用目录
    3. 配置 httpd 服务参数

    [root@linux ~]# cat /etc/hosts
    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
    172.20.10.10 www.linux.com bbs.linux.com tech.linux.com

    //本机ip
    DocumentRoot /home/wwwroot/tech
    ServerName tech.linux.com

    AllowOverride None
    Require all granted



    //本机ip
    DocumentRoot /home/wwwroot/www
    ServerName www.linux.com

    AllowOverride None
    Require all granted

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

    1. 创建不同目录,保存不同端口访问到的页面数据
    2. 修改配置文件,监听若干个端口
    3. 修改配置文件,添加虚拟主机(基于端口)
    4. 修改SELinux 上下文,使目录可以被http访问,修改SELinux 域,可以使http监听非常用端口。


    //本机ip
    DocumentRoot /home/wwwroot/tech
    ServerName tech.linux.com

    AllowOverride None
    Require all granted



    //本机ip
    DocumentRoot /home/wwwroot/www
    ServerName www.linux.com

    AllowOverride None
    Require all granted


    [root@linuxprobe ~]# 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@linuxprobe ~]# semanage port -a -t http_port_t -p tcp 6111
    [root@linuxprobe ~]# semanage port -a -t http_port_t -p tcp 6222
    [root@linuxprobe ~]# 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 6222, 6111, 80, 81, 443, 488, 8008, 8009, 8443, 9000
    pegasus_http_port_t tcp 5988
    pegasus_https_port_t tcp 5989
    [root@linuxprobe ~]# systemctl restart httpd
    [root@linuxprobe ~]# firefox

    Apache的访问控制
    Apache可以基于源主机名、源IP地址或源主机上的浏览器特征等信息对网站上的资源进行访问控制。它通过Allow指令允许某个主机访问服务器上的网站资源,通过Deny指令实现禁止访问。在允许或禁止访问网站资源时,还会用到Order指令,这个指令用来定义Allow或Deny指令起作用的顺序,其匹配原则是按照顺序进行匹配,若匹配成功则执行后面的默认指令,使用较少。
    Example:
    [root@linuxprobe ~]# vim /etc/httpd/conf/httpd.conf
    ………………省略部分输出信息………………
    129
    130 Order allow,deny
    131 Allow from 192.168.10.20
    132

    [root@linuxprobe ~]# vim /etc/httpd/conf/httpd.conf
    ………………省略部分输出信息………………
    129
    130 SetEnvIf User-Agent “Firefox” ff=1
    131 Order allow,deny
    132 Allow from env=ff
    133

    //Env 环境变量