1.httpd简介 当今主流的开源Web服务器软件有httpd(Apache),lighttpd,nginx,thttpd等,而httpd是迄今为止使用量多的web服务器,据统计目前httpd的全球占有量是47%左右,虽然有所下降但是使用两仍然是最多的,统计web服务器使用率的网站是:http://news.netcraft.com/ httpd工作的原理:httpd是Apache超文本传输协议(HTTP)服务器的主程序,被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。 通常httpd不应该被直接调用,而应该在类Unix系统中由apachectl调用,在Windows作为服务运行。
2.httpd的版本
httpd-1.3
httpd-2.0
httpd-2.2
httpd-2.4
目前为止最新的版本是httpd-2.4.6,但是这里我用的是系统自带的RPM包安装的httpd-2.2.15版本的,最新版本配置可能会有所不同
本文主要介绍httpd的两大版本,httpd-2.2和httpd-2.4。
CentOS6系统的版本默认提供的是httpd-2.2版本的rpm包
CentOS7系统的版本默认提供的是httpd-2.4版本的rpm包
3.httpd工作模型
高度模块化:DSO
MPM:Multipath Processing Module #多处理模块
prefork:一次一个进程响应一个请求
worker:一个进程生成多个线程,一个线程响应一个请求
event:基于事件驱动,一个进程响应多个请求
4.httpd自带的工具程序
工具 | 功能 |
---|---|
htpasswd | basic认证于文件实现时,用到的账号密码生成工具 |
apachectl | httpd自带的服务控制脚本,支持start,stop,restart |
apxs | 由httpd-devel包提供的,扩展httpd使用第三方模块的工具 |
rotatelogs | 日志滚动工具 |
suexec | 访问某些有特殊权限配置的资源时,临时切换至用户运行的工具 |
ab | apache benchmark,httpd的压力测试工具 |
5.rpm包安装的httpd程序环境
文件/目录 | 对应的功能 |
---|---|
/var/log/httpd/access.log | 访问日志 |
/var/log/httpd/error_log | 错误日志 |
/var/www/html/ | 站点文档目录 |
/usr/lib64/httpd/modules/ | 模块文件路径 |
/etc/httpd/conf/httpd.conf | 主配置文件 |
/etc/httpd/conf.modules.d/*.conf | 模块配置文件 |
/etc/httpd/conf.d/*.conf | 辅助配置文件 |
6.httpd常用的 配置 #切换使用MPM(编辑/etc/httpd/conf.modules.d/00-mpm.conf文件) //LoadModule mpm_NAME_module modules/mod_mpm_NAME.so //NAME有三种,分别是: prefork event worker
访问控制法则:
法则 | 功能 |
---|---|
Require all granted | 允许所有主机访问 |
Require all deny | 拒绝所有主机访问 |
Require ip IPADDR | 授权指定来源地址的主机访问 |
Require not ip IPADDR | 拒绝指定来源地址的主机访问 |
Require host HOSTNAME | 授权指定来源主机名的主机访问 |
Require not host HOSTNAME | T拒绝指定来源主机名的主机访问 |
注意:httpd-2.4版本默认是拒绝所有主机访问的,所以安装以后必须做显示授权访问 示例: <RequireAll> Require not ip 192.168.1.20 Require all granted </RequireAll>
虚拟主机有三类: 1.相同IP不同端口 2.不同IP相同端口 3.相同Ip相同端口不同域名
7.编译安装httpd-2.4(以下实例是编译安装,相同IP相同端口不同域名) httpd依赖于apr-1.4+,apr-util-1.4+,[apr-icon]
//安装开发环境
[root@lanzhiyong ~]# yum groups mark install "Development Tools"
[root@lanzhiyong ~]# groupadd -r apache
[root@lanzhiyong ~]# useradd -M -s /sbin/nologin -g apache apache
[root@lanzhiyong ~]# yum -y install openssl-devel pcre-devel expat-devel libt ool
//下载并安装apr-1.4+和apr-util-1.4+
[root@lanzhiyong ~]# cd /usr/src/
[root@lanzhiyong ~]# wget http://mirrors.shu.edu.cn/apache//apr/apr-1.6.3.tar.bz2
[root@lanzhiyong ~]# wget http://mirrors.shu.edu.cn/apache//apr/apr-util-1.6.1.tar.bz2
[root@lanzhiyong ~]# tar xf apr-1.6.3.tar.bz2
[root@lanzhiyong ~]# tar xf apr-util-1.6.1.tar.bz2
[root@lanzhiyong ~]# cd apr-1.6.3
[root@lanzhiyong ~]# vim configure
# $RM "$cfgfile" // 将此行加上注释,或者删除此行
[root@lanzhiyong ~]# ./configure --prefix=/usr/local/apr
配置过程略过…
[root@lanzhiyong ~]# make && make install
编译安装过程略…
[root@lanzhiyong ~]# cd /usr/src/apr-util-1.6.1
[root@lanzhiyong ~]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@lanzhiyong ~]# make && make install
//编译安装httpd
[root@lanzhiyong ~]# cd
[root@lanzhiyong ~]# wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.34.tar.bz2
[root@lanzhiyong ~]# tar xf httpd-2.4.34.tar.bz2
[root@lanzhiyong ~]# cd httpd-2.4.34
[root@lanzhiyong ~]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --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=worker
[root@lanzhiyong ~]# make && make install
编译安装过程略…
//设置主机名
[root@lanzhiyong ~]# vim /etc/httpd24/httpd.conf
#ServerName www.example.com:80 //取消#号
//在最后一行加上一下内容,下面是配置相同IP相同端口不同域名,直接访问域名
[root@lanzhiyong ~]# vim /etc/httpd24/httpd.conf
<VirtualHost 192.168.209.12:80>
ServerName www.wangqing.com
DocumentRoot "/usr/local/apache/htdocs/lan"
ErrorLog "logs/lan/error_log"
CustomLog "logs/lan/access_log" combined
<Directory "/usr/local/apache/htdocs/lan">
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
<VirtualHost 192.168.209.12:80>
ServerName www.lanzhiyong.com
DocumentRoot "/usr/local/apache/htdocs/yong"
ErrorLog "logs/yong/error_log"
CustomLog "logs/yong/access_log" combined
<Directory "/usr/local/apache/htdocs/yong">
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
//创建相应网页的日志目录
[root@lanzhiyong ~]# mkdir /usr/local/apache/logs/{lan,yong}
[root@lanzhiyong ~]# chown -R apache.apache /usr/local/apache/logs
//创建网页目录并修改属主属组
[root@lanzhiyong ~]# cd /usr/local/apache/htdocs/
[root@lanzhiyong htdocs]# mkdir lan yong
[root@localhost htdocs]# chown -R apache.apache lan
[root@localhost htdocs]# chown -R apache.apache yong
//创建网页
[root@localhost htdocs]# pwd
/usr/local/apache/htdocs
[root@localhost htdocs]# echo 'hello welcome to visit lan' > lan/index.html
[root@localhost htdocs]# echo 'hello welcome to visit yong' > yong/index.html
//启动httpd服务 80端口
[root@lanzhiyong ]# cd /usr/local/apache/bin
[root@lanzhiyong bin]# ./apachectl start
//查看 80端口是否启动
[root@lanzhiyong bin]# ss -antl
//在浏览器上验证
******输入www.wangqing.com*********
*******输入www.lanzhiyong.com********