Apache入门篇(三)之apache2.4.33的新特性解析与虚拟主机实战
1、http 2.4新特性
新特性:
	(1) 在编译时可以将多个MPM构建为可加载模块,可以在运行时通过LoadModule指令配置所选的MPM;
(2) 2.2版本的event MPM在实验阶段,到了2.4版本已经完全支持event MPM;
(3)更好地支持异步读写以支持MPM和各类平台;
(4) 支持每模块及每个目录分别使用各自的日志级别;
(5) 按请求配置;<If>,<ElseIf>和<Else>部分可用于根据每个请求标准设置配置;
(6) 增强版的表达式分析器;
(7) 支持毫秒级的keepalive timeout;
(8) 基于FQDN的虚拟主机不再需要NameVirtualHost指令;
(9)新AllowOverrideList指令允许更细粒度的控制,允许在.htaccess文件中使用哪些指令。
(10) 支持用户自定义变量;
(11)减少了内存的使用量
新模块:
	(1) mod_proxy_fcgi 实现httpd以fcgi和后端php服务器相结合
	(2) mod_ratelimit  实现速率限制
	(3) mod_remoteip   实现远端ip地址的控制
修改了一些配置机制:
	不再支持使用Order, Deny, Allow来做基于IP的访问控制;
2、centos 7上apache 2.4和2.2版本配置差异解析
[root@localhost ~]# yum install -y httpd [root@localhost ~]# rpm -qc httpd #查看yum安装的httpd的配置文件
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d/-base.conf
/etc/httpd/conf.modules.d/-dav.conf
/etc/httpd/conf.modules.d/-lua.conf
/etc/httpd/conf.modules.d/-mpm.conf
/etc/httpd/conf.modules.d/-proxy.conf
/etc/httpd/conf.modules.d/-systemd.conf
/etc/httpd/conf.modules.d/-cgi.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic
/etc/logrotate.d/httpd
/etc/sysconfig/htcacheclean
/etc/sysconfig/httpd
配置文件:
主配置文件:/etc/httpd/conf/httpd.conf
	模块配置文件:/etc/httpd/conf.modules.d/*.conf
	辅助配置文件:/etc/httpd/conf.d/*.conf
mpm:以DSO机制提供,配置文件00-mpm.conf,需要修改不同的模式加载,只需要修改这个文件,不再像2.2版本只能重新编译加载不同的模式。
服务控制:systemctl {start|stop|restart|status|reload} httpd.service
(1)切换使用MPM
修改配置文件加载MPM模式的格式:
LoadModule mpm_NAME_module modules/mod_mpm_NAME.so
	NAME: prefork, event, worker
[root@localhost ~]# vim /etc/httpd/conf.modules.d/-mpm.conf #修改mpm模块加载配置文件,加载使用event模式
LoadModule mpm_event_module modules/mod_mpm_event.so
[root@localhost ~]# apachectl -t
Syntax OK
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# httpd -M |grep mpm #重启后,可以看到httpd的mpm模式使用了动态共享模式进行加载
mpm_event_module (shared)
[root@localhost ~]# vim /etc/httpd/conf.modules.d/-mpm.conf #修改为work模式
LoadModule mpm_worker_module modules/mod_mpm_worker.so
[root@localhost ~]# apachectl -t
Syntax OK
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# httpd -M|grep mpm #重启后可以看到使用了work模式
mpm_worker_module (shared)
(2) 修改'Main' server的DocumentRoot
apache 2.4版本在设置虚拟主机时,已去除了NameVirtualHost的配置,直接在主配置文件中更改配置为
IncludeOptional conf.d/*.conf即可模块化修改虚拟主机的配置。
(3)基于IP的访问控制法则
允许所有主机访问:Require all granted
拒绝所有主机访问:Require all deny
[root@localhost ~]# curl 192.168.56.11 #在192.168.56.13上访问正常
<h1> welcome to use apache </h1> [root@localhost html]# vim /etc/httpd/conf/httpd.conf #修改主配置文件,拒绝所有主机访问 <Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all denied
</Directory>
[root@localhost html]# apachectl -t
Syntax OK
[root@localhost html]# systemctl restart httpd
[root@localhost ~]# curl 192.168.56.11 #重新访问提示403 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /on this server.</p>
</body></html>
在windows上访问测试页面,提示没有权限访问,如图:

控制特定IP访问:
	Require ip IPADDR:授权指定来源地址的主机访问
	Require not ip IPADDR:拒绝指定来源地址的主机访问
IPADDR:
		IP: 172.16.100.2
		Network/mask: 172.16.0.0/255.255.0.0
		Network/Length: 172.16.0.0/16
		Net: 172.16
控制特定主机(HOSTNAME)访问
	Require host HOSTNAME
	Require not host HOSTNAME
HOSTNAME:
		FQDN: 特定主机
		DOMAIN:指定域内的所有主机
[root@localhost html]# vim /etc/httpd/conf/httpd.conf #修改主配置文件httpd.conf <Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
<RequireAll>
Require all granted
Require not ip 192.168.56.13 #配置不允许192.168.56.13ip访问
</RequireAll>
</Directory>
[root@localhost html]# apachectl -t
Syntax OK
[root@localhost html]# systemctl restart httpd
[root@localhost ~]# curl 192.168.56.11 #访问测试
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title> Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /
on this server.</p>
</body></html>
3、apache 2.4编译安装虚拟主机配置实战
(1)虚拟主机分类
虚拟主机是在同一 http 服务下部署多个站点,每个站点都使用不同的域名和站点目录,或不同 IP 和端口。也就是
一个 http 服务配置多个站点。
①基于域名的虚拟主机
②基于端口的虚拟主机
③基于 IP 的虚拟主机
(2)配置基于域名的虚拟主机
需求
| 域名 | 目录 | 
| www.abc.org | /var/html/www | 
| blog.abc.org | /var/html/blog | 
| bbs.abc.org | /var/html/bbs | 
[root@localhost ~]# mkdir /var/html/{www,blog,bbs} -p  #创建网站目录
[root@localhost ~]# for name in www blog bbs;do echo "http://$name.abc.org" > /var/html/$name/index.html;done  #创建主页文件index.html
[root@localhost ~]# for name in www blog bbs;do cat /var/html/$name/index.html;done
http://www.abc.org
http://blog.abc.org
http://bbs.abc.org
[root@localhost ~]# cp /usr/local/apache-2.4./conf/extra/httpd-vhosts.conf{,.bak_$(date +%F)}
[root@localhost ~]# > /usr/local/apache-2.4./conf/extra/httpd-vhosts.conf  #配置虚拟主机文件http-vhosts.conf
[root@localhost ~]# vim !$
<VirtualHost *:>
   ServerAdmin aaa@abc.com
   DocumentRoot "/var/html/www"
   ServerName www.abc.org
   ServerAlias abc.org
   ErrorLog "logs/www-error-log"
   CustomLog "logs/www-access-log" common
</VirtualHost>
<VirtualHost *:>
   ServerAdmin aaa@abc.com
   DocumentRoot "/var/html/blog"
   ServerName blog.abc.org
   ErrorLog "logs/blog-error-log"
   CustomLog "logs/blog-access-log" common
</VirtualHost>
<VirtualHost *:>
   ServerAdmin aaa@abc.com
   DocumentRoot "/var/html/bbs"
   ServerName bbs.abc.org
   ErrorLog "logs/bbs-error-log"
   CustomLog "logs/bbs-access-log" common
</VirtualHost>[root@localhost ~]# vim /usr/local/apache-2.4./conf/httpd.conf  #修改主配置文件httpd.conf,加载相关扩展配置
# Server-pool management (MPM specific)
Include conf/extra/httpd-mpm.conf
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
[root@localhost ~]# /usr/local/apache-2.4./bin/apachectl -t  #检查配置文件语法
Syntax OK
[root@localhost ~]# /usr/local/apache-2.4./bin/apachectl graceful  #平滑重启apache
[root@localhost ~]# vim /etc/host   #配置本地域名解析
192.168.56.11 www.abc.org bbs.abc.org blog.abc.org
[root@localhost ~]# ping www.abc.org   #检查域名解析
[root@localhost ~]# ping bbs.abc.org
[root@localhost ~]# ping blog.abc.org
[root@localhost ~]# curl www.abc.org   #curl访问提示报错403:禁止访问
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title> Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /
on this server.<br />
</p>
</body></html>
报  错原因:
Apache 的主配置文件 httpd.conf 中没有配置站点目录的访问权限,程序不能访问/var/html/下的目录和文件。
[root@localhost conf]# vim httpd.conf #配置站点目录访问权限
#在 httpd.conf 文件最后添加如下代码:
<Directory "/var/html">
   Options FollowSymLinks
   AllowOverride None
   Require all granted
</Directory>
如果是apache .2版本使用如下配置:
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
</Directory>
[root@localhost conf]# /usr/local/apache-2.4./bin/apachectl -t
Syntax OK
[root@localhost conf]# /usr/local/apache-2.4./bin/apachectl graceful
[root@localhost ~]# curl www.abc.org
http://www.abc.org
[root@localhost ~]# curl bbs.abc.org
http://bbs.abc.org
[root@localhost ~]# curl blog.abc.org
http://blog.abc.org
(3)配置基于端口的虚拟主机
()修改 httpd.conf 文件,配置监听端口
[root@localhost conf]# vim httpd.conf
在 Listen 下面新增如下代码:
Listen
Listen () 将 blog 和 bbs 站点监听端口改为如下:
[root@localhost conf]# vim extra/httpd-vhosts.conf
<VirtualHost *:>
ServerAdmin aaa@abc.com
DocumentRoot "/var/html/www"
ServerName www.abc.org
ServerAlias abc.org
ErrorLog "logs/www-error-log"
CustomLog "logs/www-access-log" common
</VirtualHost> <VirtualHost *:> #监听8001端口
ServerAdmin aaa@abc.com
DocumentRoot "/var/html/blog"
ServerName blog.abc.org
ErrorLog "logs/blog-error-log"
CustomLog "logs/blog-access-log" common
</VirtualHost> <VirtualHost *:> #监听8002端口
ServerAdmin aaa@abc.com
DocumentRoot "/var/html/bbs"
ServerName bbs.abc.org
ErrorLog "logs/bbs-error-log"
CustomLog "logs/bbs-access-log" common
</VirtualHost>
[root@localhost conf]# /usr/local/apache-2.4./bin/apachectl -t #检查语法
Syntax OK
[root@localhost conf]# /usr/local/apache-2.4./bin/apachectl graceful #平滑启动apache
[root@localhost conf]# netstat -tulnp |grep httpd #检查监听端口
tcp6 ::: :::* LISTEN /httpd
tcp6 ::: :::* LISTEN /httpd
tcp6 ::: :::* LISTEN /httpd
[root@localhost conf]# curl blog.abc.org:8001 #测试访问结果
http://blog.abc.org
[root@localhost conf]# curl blog.abc.org:
http://bbs.abc.org
(4)配置基于IP的虚拟主机
()为 eth0 临时配置一个新 IP
[root@localhost ~]# ifconfig eth0: 192.168.56.110/ up ()检查
[root@localhost ~]# ifconfig eth0:
eth0:: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu
inet 192.168.56.110 netmask 255.255.255.0 broadcast 192.168.56.255
ether :0c::ce::fd txqueuelen (Ethernet) [root@localhost ~]# ping 192.168.56.110
PING 192.168.56.110 (192.168.56.110) () bytes of data.
bytes from 192.168.56.110: icmp_seq= ttl= time=0.104 ms
bytes from 192.168.56.110: icmp_seq= ttl= time=0.034 ms
bytes from 192.168.56.110: icmp_seq= ttl= time=0.044 ms
bytes from 192.168.56.110: icmp_seq= ttl= time=0.059 ms
^C
--- 192.168.56.110 ping statistics ---
packets transmitted, received, % packet loss, time 3001ms
rtt min/avg/max/mdev = 0.034/0.060/0.104/0.027 ms ()修改扩展配置文件 httpd-vhosts 文件,配置相关 IP
[root@localhost conf]# vim extra/httpd-vhosts.conf
#将blog.abc.org站点改为ip访问
<VirtualHost 192.168.56.110:>
ServerAdmin aaa@abc.com
DocumentRoot "/var/html/blog"
ServerName 192.168.56.110
ErrorLog "logs/blog-error-log"
CustomLog "logs/blog-access-log" common
</VirtualHost> [root@localhost conf]# /usr/local/apache-2.4./bin/apachectl -t
Syntax OK
[root@localhost conf]# /usr/local/apache-2.4./bin/apachectl graceful
[root@localhost conf]# curl 192.168.56.110
http://blog.abc.org
Apache入门篇(三)之apache2.4.33的新特性解析与虚拟主机实战的更多相关文章
- 【SSRS】入门篇(三) -- 为报表定义数据集
		
原文:[SSRS]入门篇(三) -- 为报表定义数据集 通过前两篇文件 [SSRS]入门篇(一) -- 创建SSRS项目 和 [SSRS]入门篇(二) -- 建立数据源 后, 我们建立了一个SSRS项 ...
 - Apache入门 篇(二)之apache 2.2.x常用配置解析
		
一.httpd 2.2.x目录结构 Cnetos 6.10 YUM安装httpd 2.2.x # yum install -y httpd 程序环境 主配置文件: /etc/httpd/conf/ht ...
 - Apache入门篇(四)之LAMP架构部署
		
一.LAMP解析 a: apachem: mariadb, mysqlp: php, perl, python 静态资源:静态内容:客户端从服务器获得的资源的表现形式与原文件相同:动态资源:通常是程序 ...
 - Apache入门篇(一)之安装部署apache
		
一.HTTPD特性 (1)高度模块化:core(核心) + modules(模块) = apache(2)动态模块加载DSO机制: Dynamic Shared Object(动态共享对象)(3)MP ...
 - Nginx入门篇(二)之Nginx部署与配置文件解析
		
一.Nginx编译安装 ()查看系统环境 [root@localhost tools]# cat /etc/redhat-release CentOS Linux release (Core) [ro ...
 - Apache虚拟主机实战
		
[root@localhost ~]# wget http://mirrors.hust.edu.cn/apache/httpd/httpd-2.2.32.tar.bz2 [root@localho ...
 - Nginx入门讲解——初步认识了解nginx.conf配置文件以及配置多个虚拟主机
		
本文引自网络进攻学习之用https://blog.csdn.net/weixin_38111957/article/details/81080539 一. 引言上节文章讲述了如何用信号控制Nginx服 ...
 - ElasticSearch7.3学习(三十)----ES7.X SQL新特性解析及使用Java api实现sql功能
		
一.ES7 sql新特性 1.1 数据准备 创建索引及映射 建立价格.颜色.品牌.售卖日期 四个字段 PUT /tvs PUT /tvs/_mapping { "properties&quo ...
 - 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息]
		
三.使用Azure AD管理用户信息 在上一章我们采用OpenID的方案和Azure AD交互进行身份验证,本章节我们继续了解如何在Azure AD中创建用户,列出用户信息,修改用户信息和删除用户信息 ...
 
随机推荐
- ubuntu服务器下tomcat安装(不推荐使用apt-get)
			
最近在阿里云服务器上装tomcat,一开始为了省事直接使用了apt-get安装,结果整个程序被拆开散到了好多地方,尤其是像网上说要把打包好了.war文件放到webapps文件夹下,但是开始并没有在/u ...
 - 学习python第二天数据库day1
			
day01: 关键字:desc 作用:查看表结构(字段名,数据类型&长度) 举例: desc python1808_laoguo; 追加数据到表中:(新增操作) 关键字:insert into ...
 - urlparse 用法
			
ifrom urllib2 import urlparse ‘’ captcha_id = urlparse.parse_qs(urlparse.urlparse(link).query, True) ...
 - Unity3D-制作火焰效果
			
1.插件的准备 随着官网上的迭代更新,连下载按钮都找了好久,今天制作的火焰效果要依赖一个插件,LowPoly Environment Pack 输入网址unity3d.com在Assert Store ...
 - 关于Oracle 数据库死锁 转
			
转自 https://zhidao.baidu.com/question/200422068111653165.html 一.数据库死锁的现象程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没 ...
 - 精读 SBAR SDN flow-Based monitoring and Application Recognition
			
目录 架构 测量模块 分类模块 具体实现 实验:最后接入巴塞罗那的校园网流量测试: SBAR: SDN flow-Based monitoring and Application Recognitio ...
 - 极光客户互动云java post请求
			
package com.common.utils; import java.io.IOException; import java.net.URLDecoder; import java.util.M ...
 - 解决apache启动错误:Could not reliably determine the server's fully qualified domain name
			
启动apache遇到错误:httpd: Could not reliably determine the server's fully qualified domain name [root@serv ...
 - MySQL5.7.19 免安装配置 + Navicat for MySQL安装和破解(附全部资源)
			
近段时间因为工作原因安装了好多次本地MySQL,安装过程也是时有曲折,索性记录一下. 环境: Win10 家庭版 MySQL5.7.19 (链接:https://pan.baidu.com/s/1 ...
 - T-SQL查询:WITH AS 递归计算某部门的所有上级机构或下级机构
			
drop table #Area; CREATE TABLE #Area ( id INT NOT NULL, city_name NVARCHAR(100) NOT NULL, parent_id ...