HTTPD2.4的安装与配置详解

时间:2024-03-03 20:08:32

HTTPD2.4的安装与配置详解

httpd2.4

  • httpd2.4新特性
    • MPM支持DSO机制
    • 支持event MPM
    • 支持异步读写
    • 支持增强版的表达式分析器
    • 支持毫秒级别的keepalive timeout
    • 基于FQDN的虚拟主机不再需要NameVirtualHost指令
    • 支持用户自定义变量
  • http2.4 新模块
    • mod_proxy_fcgi:通过代理的方式运行php程序,将对php网页的请求转发给代理给后台的程序
    • mod_ratelimit:限制下载速度
    • mod_remoteip:通常情况apache位于前端默认是可以识别真实IP的,但是如果用了CDN等apache位于后端的情况下则只能识别CDN节点服务器的IP而无法识别用户真实IP,该模板就是用来获取得到用户真实IP
  • 默认情况下http2.4配置文件路径
    • 主配置文件:/etc/httpd/conf/httpd.conf
    • 辅助配置文件:/etc/httpd/conf.d/
    • 模块文件位置:/usr/lib64/httpd/modules/
    • 模块配置文件:/etc/httpd/conf.modules.d/
    • 日志文件: /var/log/httpd

httpd2.4在centos6上的源码安装

  • 实验环境
    • httpd2.4 server:Centos6 192.168.10.110
    • client :windows10 192.168.10.1
    • 已关闭防火墙、selinux
  • 所需源码包下载并上传至服务端
    Apache download
    image-20191031133837149
    或使用wget下载
wget http://archive.apache.org/dist/apr/apr-1.5.1.tar.gz
wget http://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz
wget http://archive.apache.org/dist/httpd/httpd-2.4.33.tar.gz
  • 依赖包安装
    image-20191031133924426
    image-20191031134038809
    image-20191031134122342
    image-20191031140034813
    image-20191031140101015
yum install gcc
yum install gcc-c++
yum install openssl-devel
yum install perl
yum install pcre-devel
  • 源码安装依赖包apr与apr-utils(需要1.4及以上版本,centos6默认提供的版本为1.3)
    image-20191031135047657
    image-20191031135100874
    image-20191031135407362
    image-20191031135213460
    image-20191031135242940
    image-20191031135505891
    image-20191031135715311
cd apr-1.5.2
./configure --prefix=/usr/local/apr
make && make install
cd ../apr-util-1.5.3
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install

  • 若之前安装过httpd的其他版本需要先卸载并删除目录
    image-20191031140317908
    image-20191031140411690

  • 源码安装httpd 2.4

    • 创建httpd的系统用户
      image-20191031140758612
    • 解压
      image-20191031141035998
    • 安装
      image-20191031141058822
      image-20191031141924951
      image-20191031142015313
 cd httpd-2.4.10
./configure --prefix=/usr/local/apache --sysconf=/etc/httpd2.4 --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
make && make install
  • 生成httpd控制脚本(手动编写或修改自带控制脚本)
    image-20191031142652950
    image-20191031142854142
#chkconfig: 35 85 21 #设定默认启动级别3、5,85为启动优先级 21为关闭优先级,数字越小,优先级越高
#description:wwww #描述信息 
  • 添加环境变量
    image-20191031143029560
    image-20191031143157535
    image-20191031143231421
export PATH=/usr/local/apache/bin:$PATH
  • 自定义启动deflate和rewrite模块并修改servername属性
    image-20191031143424176
    image-20191031143540405
    image-20191031143621572
    image-20191031143817850

  • 启动服务并设定开机自启
    image-20191031143907790
    image-20191031144424744
    也可以使用apachectl命令进行控制

  • 测试
    image-20191031154216881

  • 修改主页
    image-20191031154335292

  • 重启服务
    image-20191031154408222

  • 测试
    image-20191031154427343

Centos7安装配置httpd

  • 实验环境

    • httpd2.4 server:Centos7 192.168.10.120
    • client :windows10 192.168.10.1
    • 已关闭防火墙、selinux
  • 安装httpd,centos7.6默认提供httpd2.4(使用yum安装,需要确保yum配置正确)

    image-20191031154801182

  • 主配置文件配置

    image-20191031155048976

    image-20191031155012361

  • 添加测试网页

    image-20191031155247881

  • 启动服务并设置开机启动

    image-20191031155347133

  • 测试

    image-20191031155528577

内置status状态页面启用

  • httpd内置的status用于查看当前http服务的状态,包括启用的进程数或线程数、响应的进程或线程等,便于分析服务器的进程状态、负载状态
  • 启用方法:在Location中进行定义(可以被定义在指定的虚拟主机中)
  • 修改模块配置文件,确保info模块与status被加载并启用
    image-20191031160122336
    image-20191031160017757
    image-20191031160100469
    image-20191031160201387
  • 修改主配置文件/etc/httpd/conf/httpd.conf添加location设置
    image-20191031162938312
<location /server-status>
    SetHandler server-status
    Require ip 192.168.10.1 #允许访问的主机
</location>
  • 重启服务
    image-20191031161656969

  • 测试(网站地址后添加 server-status访问status页面,还可以指定刷新时间(秒)?refresh=5 )
    image-20191031163024473

页面缓存配置

  • 启用 expires模块
    image-20191031162425634
    image-20191031162415419
    image-20191031162510717
  • 修改主配置文件
    image-20191031163607398
    image-20191031163556264
  • 重启服务
    image-20191031163631109
  • 测试
    • 未开启缓存时头部信息
      image-20191031164349544
    • 开启缓存后的响应头部信息出现缓存相关信息
      image-20191031164229822

防盗链配置

  • 盗链:是指以未经原始web服务器允许,私自超链接到原始web站点的方式和行为,通常会盗取对方web服务器中的图片、文件、视频等静态资源。被盗web服务器会承受额外的带宽压力,所以需要对服务器配置防盗链
  • 对某种特定的文件实现refer访问控制,以rewrite模块的URL重写功能来实现
  • 查看是否启用rewrite模块
    image-20191031185923490
    image-20191031185903409
    image-20191031185955515
  • 修改测试主页
    image-20191031164827299
  • 将welcome.jpg与error.png存放在网站根目录下
    image-20191031165942778
  • 在盗链的http服务器(192.168.10.122)上创建主页如下,模拟盗链
    image-20191031170114985
  • 重启盗链服务器http服务
    image-20191031170300423
  • 测试盗链
    image-20191031170229118
  • 在被盗链的主机(192.168.10.120)设置防盗链规则
    image-20191031170816834
    image-20191031170831907
<Directory "/var/www/html"> 
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
    RewriteEngine On #启用rewrite
    RewriteCond %{HTTP_REFERER} !^http://192.168.10.120/.*$  #匹配所有非直接访问本机的请求
    RewriteCond %{HTTP_REFERER} !^http://192.168.10.120/*$
    RewriteRule .*\.(gif|swf|jpg)$ http://192.168.10.120/error.png [R,NC] #对匹配到的请求进行重定向,返回指定页面或资
</Directory> 
    #返回的资源类型不能与匹配项相同,否则会陷入循环
    #RewriteCond 匹配条件
    #RewriteRule 重写规则
    #%{HTTP_REFERER} 引导用户代理到当前页的前一页的地址,即用户浏览器直接输入的访问地址
    #[NC]指的是不区分大小写,[R]强制重定向redirect
    #[L]表示如果能匹配本条规则,那么本条规则是最后一条(Last),忽略之后的规则

  • 重启服务
    image-20191031171837579
  • 再次访问盗链主机,查看防盗链效果
    image-20191031185629919
  • 访问被盗链主机查看是否受到影响
    image-20191031172051998

隐藏Apache版本号

  • 为提高服务器安全性有时会选择将软件的版本号隐藏
  • 修改主配置文件
    image-20191031190632162
    image-20191031190552737
ServerTokens Prod #返回的头部信息中版本信息
ServerSignature Off
#ServerTokens Major|Minor|Minimal|ProductOnly|OS|Full
	#Prod[uctOnly] 只显示服务名-->Server:Apache
	#Major 服务/主版本号  Server:Apache/2
	#Minor 服务/主版本号.次版本号  Server:Apache/2.4
	#Min[imal] 服务/主版本号.次版本号.末版本号  Server:Apache/2.4.6
	#Min[imal] 服务/主版本号.次版本号.末版本号(系统类型)  Server:Apache/2.4.6(CentOS)
	#Full 显示全部相关信息
#ServerSignature 控制由系统生成的页面(错误信息,mod_proxy ftp directory listing等等)的页脚中如何显示信息
#注设置需要声明在全局配置中
  • 重启服务
    image-20191031190818969
  • 测试
    • 关闭前响应头部信息
      image-20191031190859775
    • 关闭后响应头部信息
      image-20191031190946657

虚拟主机配置

  • httpd2.4的虚拟主机配置文件为: /etc/httpd/conf.d/vhost.conf (缺省下不存在)

  • httpd2.4 的虚拟主机不再需要NameVirtualHost 参数开启

  • 创建并修改vhost.conf文件
    image-20191031193839147
    image-20191031193821727

    <VirtualHost 192.168.10.120:80> #指定虚拟主机
        ServerAdmin root@web1.lg.com #管理邮箱地址
        DocumentRoot /www/docs/web1 #站点根目录
        <Directory "/www/docs/web1"> #权限控制
            AllowOverride None #是否允许权限覆盖
            Options Indexes #使用的选项参数 Indexs若无匹配的主页则列表显示站点目录内容
            Require all granted #允许全部
        </Directory>
        ServerName web1.lg.com #站点域名
        ErrorLog logs/web1-error_log #错误日志存放位置及名称
        CustomLog logs/web1-access_log common #访问日志存放位置及名称common为设定的别名
    </VirtualHost>
    
    <VirtualHost 192.168.10.120:80>
        ServerAdmin admin@web2.lg.com
        DocumentRoot /www/docs/web2
        <Directory "/www/docs/web2">
            AllowOverride None
            Options Indexes
            Require all granted
        </Directory>
        ServerName web2.lg.com
        ErrorLog logs/web2-error_log
        CustomLog logs/web2-access_log common
    </VirtualHost>
    
  • 创建指定的站点根目录,并添加测试主页
    image-20191031194130390

  • 重启服务
    image-20191031194153505

  • win客户机修改hosts(C:\Windows\System32\drivers\etc\hosts),添加主机映射
    image-20191031194441386

  • 域名访问测试
    image-20191031194513765
    image-20191031194528757

httpd2.4访问控制

  • 访问控制Require相关选项放置在<RequireAll> 或<RequireAny>容器中,也可出现在Directory容器中(这时可以不要标签对),也可以出现在其他标签中(Directory、Location等或配置文件 .htaccess 中)
  • Require all granted 允许所有的访问,使用容器<RequireAll>
  • Require all denied 拒绝所有访问,使用容器<RequireAny>
  • Require ip x.x.x.x 指定IP或网段可以访问,多个ip或网段使用空格分割(网段省略主机位如 192.168.10)
  • Require not ip x.x.x.x 指定IP或网段不可以访问,多个ip或网段使用空格分割(网段省略主机位如 192.168.10)
  • Require host HOSTNAME (包括DOMAIN),多个主机名使用空格分割
  • Require not host HOSTNAME (包括DOMAIN),多个主机名使用空格分割
  • Require env env-var [env-var] ... #允许,匹配环境变量中任意一个
  • Require method http-method [http-method] ... #允许 ,特定的HTTP方法
  • Require expr expression #允许,表达式为true
  • Require user userid [ userid ] ... #允许,特定用户
  • Require group group-name [group-name] ... #允许,特定用户组
  • Require valid-user # #允许,有效用户
    image-20191031212718942
    注:匹配顺序从上到下,后面的覆盖前面的规则,要注意<RequireAll> 或<RequireAny>的使用