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
或使用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
- 依赖包安装
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)
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的其他版本需要先卸载并删除目录
-
源码安装httpd 2.4
- 创建httpd的系统用户
- 解压
- 安装
- 创建httpd的系统用户
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控制脚本(手动编写或修改自带控制脚本)
#chkconfig: 35 85 21 #设定默认启动级别3、5,85为启动优先级 21为关闭优先级,数字越小,优先级越高
#description:wwww #描述信息
- 添加环境变量
export PATH=/usr/local/apache/bin:$PATH
-
自定义启动deflate和rewrite模块并修改servername属性
-
启动服务并设定开机自启
也可以使用apachectl命令进行控制 -
测试
-
修改主页
-
重启服务
-
测试
Centos7安装配置httpd
-
实验环境
- httpd2.4 server:Centos7 192.168.10.120
- client :windows10 192.168.10.1
- 已关闭防火墙、selinux
-
安装httpd,centos7.6默认提供httpd2.4(使用yum安装,需要确保yum配置正确)
-
主配置文件配置
-
添加测试网页
-
启动服务并设置开机启动
-
测试
内置status状态页面启用
- httpd内置的status用于查看当前http服务的状态,包括启用的进程数或线程数、响应的进程或线程等,便于分析服务器的进程状态、负载状态
- 启用方法:在Location中进行定义(可以被定义在指定的虚拟主机中)
- 修改模块配置文件,确保info模块与status被加载并启用
- 修改主配置文件/etc/httpd/conf/httpd.conf添加location设置
<location /server-status>
SetHandler server-status
Require ip 192.168.10.1 #允许访问的主机
</location>
-
重启服务
-
测试(网站地址后添加 server-status访问status页面,还可以指定刷新时间(秒)?refresh=5 )
页面缓存配置
- 启用 expires模块
- 修改主配置文件
- 重启服务
- 测试
- 未开启缓存时头部信息
- 开启缓存后的响应头部信息出现缓存相关信息
- 未开启缓存时头部信息
防盗链配置
- 盗链:是指以未经原始web服务器允许,私自超链接到原始web站点的方式和行为,通常会盗取对方web服务器中的图片、文件、视频等静态资源。被盗web服务器会承受额外的带宽压力,所以需要对服务器配置防盗链
- 对某种特定的文件实现refer访问控制,以rewrite模块的URL重写功能来实现
- 查看是否启用rewrite模块
- 修改测试主页
- 将welcome.jpg与error.png存放在网站根目录下
- 在盗链的http服务器(192.168.10.122)上创建主页如下,模拟盗链
- 重启盗链服务器http服务
- 测试盗链
- 在被盗链的主机(192.168.10.120)设置防盗链规则
<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),忽略之后的规则
- 重启服务
- 再次访问盗链主机,查看防盗链效果
- 访问被盗链主机查看是否受到影响
隐藏Apache版本号
- 为提高服务器安全性有时会选择将软件的版本号隐藏
- 修改主配置文件
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等等)的页脚中如何显示信息
#注设置需要声明在全局配置中
- 重启服务
- 测试
- 关闭前响应头部信息
- 关闭后响应头部信息
- 关闭前响应头部信息
虚拟主机配置
-
httpd2.4的虚拟主机配置文件为: /etc/httpd/conf.d/vhost.conf (缺省下不存在)
-
httpd2.4 的虚拟主机不再需要NameVirtualHost 参数开启
-
创建并修改vhost.conf文件
<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>
-
创建指定的站点根目录,并添加测试主页
-
重启服务
-
win客户机修改hosts(C:\Windows\System32\drivers\etc\hosts),添加主机映射
-
域名访问测试
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 # #允许,有效用户
注:匹配顺序从上到下,后面的覆盖前面的规则,要注意<RequireAll> 或<RequireAny>的使用