一.httpd介绍一.httpd介绍1.httpd是http协议的一个经典实现,也是apache组织中的一个顶级项目,其官方站点为httpd.apache.org。2.httpd的运行机制高度模块化(Core+Modules):采用核心模块+扩展模块的机制DSO(Dynamic Shared ...
1.httpd是http协议的一个经典实现,也是apache组织中的一个顶级项目,其官方站点为httpd.apache.org。
2.httpd的运行机制
高度模块化(Core+Modules):采用核心模块+扩展模块的机制
DSO(Dynamic Shared Object)机制:可以按需动态的装载模块来实现相应的功能
采用MPM(Multipath Processing Moules):使用多路处理模块,有三种工作模型
(1)prefork模型:多进程模型,一个主进程负责管理子进程,创建套接字,接受用户请求,并将请求分发给子进程,由子进程具体负责处理用户请求,工作方式为,事先生成几个空闲的进程,随时等待着处理用户请求。
(2)worker模型:多进程,多线程模型,一个主进程负责管理子进程,创建套接字,接受用户请求,并将用户请求分发给每个子进程,而每个子进程又生成多个线程,每个线程负责具体的处理用户请求。
(3)event:事件驱动,多进程模型,一个主进程负责管理子进程,创建套接字,接受用户请求,并将用户请求交给子进程,每个子进程基于事件驱动处理多个请求,并将结果返回给客户端。
3.httpd有丰富的功能特性,常用的有:
支持CGI(Common Gataway Interface)协议
支持虚拟主机:可以基于ip,port,FQDN实现虚拟主机
支持反向代理机制
支持负载均衡功能
具有丰富的认证机制
支持第三方模块
支持路径别名
三.httpd常用的配置
1.在httpd中实现虚拟主机
所谓的虚拟主机是指在通过在配置文件中提供不同的配置,从而可以实现在同一台物理服务器上提供多个站点的访问路径,实现方式有三种,分别是:
IP地址相同,监听的端口不同,通过不同的端口号来访问
IP地址不同,端口可以相同,通过不同的IP来访问
主机名不同,端口号和IP地址可以相同,通过不同的主机名称来访问。
使用虚拟主机的前提是关闭中心主机功能,即将主配置文件中的DocumentRoot这一指令注释。
2.持久和非持久连接
当客户端与服务器端进行长时间的通信时,客户端会发出一系列的请求,服务器端要这些请求一一进行响应,而http协议基于tcp协议建立连接,于是对这一系列的请求和响应可以每次经过一个单独的tcp连接发送,也可以都经过同一个tcp连接进行发送;每次(每个资源的传输)都使用不同的tcp进行发送的方式就叫做非持久连接,每次都经过同一个tcp连接发送的方式叫做持久连接。在httpd中实现持久功能:
KeepAlive {on|off}:开启或关闭持久连接功能
MaxKeepAliveRequests 100 :允许建立持久连接的最大客户端请求数量
KeepAliveTimeout 15 :每个连接的最大持久连接时长
3.监听的端口号
Listen 80
4.控制访问法则
法则 | 功能 |
---|---|
Require all granted | 允许所有主机访问 |
Require all deny | 拒绝所有主机访问 |
Require ip IPADDR | 授权指定来源地址的主机访问 |
Require not ip IPADDR | 拒绝指定来源地址的主机访问 |
Require host HOSTNAME | 授权指定来源主机名的主机访问 |
Require not host HOSTNAME | 拒绝指定来源主机名的主机访问 |
Require not ip | 拒绝指定ip主机访问 |
httpd编译安装
实验环境说明:
主机名 | IP |
---|---|
[root@linfan ~] | 192.168.24.157.24 |
###环境准备:
关闭防火墙和selinux
[root@linfan ~]# systemctl stop firewalld
[root@linfan ~]# systemctl disable firewalld
[root@linfan ~]# sed -ri ‘s/^(SELINUX=).*/\1disabled/g‘ /etc/selinux/config
[root@linfan ~]# setenforce 0
安装开发环境:
[root@linfan ~]# yum groups mark install "Development Tools"
[root@linfan ~]# groupadd -r apache
[root@linfan ~]# useradd -M -s /sbin/nologin -g apache apache
[root@linfan ~]# yum -y install openssl-devel pcre-devel expat-devel libtool
下载并安装apr-1.4+和apr-util-1.4+
[root@linfan ~]# cd /usr/src/
[root@linfan src]#yum -y install wget
wget http://mirrors.shu.edu.cn/apache//apr/apr-1.6.3.tar.bz2
wget http://mirrors.shu.edu.cn/apache//apr/apr-util-1.6.1.tar.bz2
ls
解压软件包:
tar xf apr-1.6.3.tar.bz2
tar xf apr-util-1.6.1.tar.bz2
ls
编译安装:
[root@linfan src]# cd apr-1.6.3cd apr-1.6.3
[root@linfan apr-1.6.3]# vim configure
cfgfile="${ofile}T"
trap "$RM \"$cfgfile\"; exit 1" 1 2 15
# $RM "$cfgfile //将此行#号取消 或删除此行
[root@linfan apr-1.6.3]# ./configure --prefix=/usr/local/apr
[root@linfan apr-1.6.3]# make && make install
[root@linfan apr-1.6.3]# cd /usr/src/apr-util-1.6.1
[root@linfan apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@linfan apr-util-1.6.1]# make && make install
###编译安装httpd
[root@linfan ~]# wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.34.tar.bz2
[root@linfan ~]# ls
[root@linfan ~]# tar xf httpd-2.4.34.tar.bz2
[root@linfan ~]# cd httpd-2.4.34
[root@linfan httpd-2.4.34]# ./configure --prefix=/usr/local/apache \ //网站发布存放的目录
> --sysconfdir=/etc/httpd24 \ //httpd编译安装的主配置文件
> --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=prefork
[root@linfan ~]# make && make install
#虚拟主机:
虚拟主机有三种类型
相同IP不同端口
不同IP相同端口
相同IP相同端口不同域名
1.当相同IP不同端口时:
编辑httpd编译安装的主配置文件
[root@linfan ~]# vim /etc/httpd24/httpd.conf
//找到ServerName www.example.com:80 取消#号注释
//找到Listen 80 在下面添加不同端口 Listen 81
//在最后面添加下面如下内容
#virtual host 1
<VirtualHost 192.168.24.157:80>
DocumentRoot "/usr/local/apache/htdocs/lin" //存放网站路径
ErrorLog "logs/lin/error_log"
CustomLog "logs/lin/access_log" combined
<Directory "/usr/local/apache/htdocs/lin">
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
#virtual host 2
<VirtualHost 192.168.24.157:81> //编辑此行端口号
DocumentRoot "/usr/local/apache/htdocs/fan"
ErrorLog "logs/fan/error_log"
CustomLog "logs/fan/access_log" combined
<Directory "/usr/local/apache/htdocs/fan">
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
[root@linfan ~]# tail -25 /etc/httpd24/httpd.conf
[root@linfan ~]# cd /usr/local/apache/logs/ //建立与httpd主配置文件相同路径的目录
[root@linfan logs]# mkdir lin
[root@linfan logs]# mkdir fan
[root@linfan logs]# cd /usr/local/apache/htdocs/ //在网站存放目录下 也创建与之相同的目录
[root@linfan htdocs]# mkdir lin
[root@linfan htdocs]# mkdir fan
[root@linfan htdocs]# chown -R apache.apache /usr/local/apache/htdocs/
//给网站存放的目录更改属主属组为apache
ll
[root@linfan htdocs]# echo ‘hello lin‘ > lin/index.html
[root@linfan htdocs]# echo ‘hello fan‘ > fan/index.html
[root@linfan ~]# pkill httpd
[root@linfan ~]# ps -ef|grep httpd
[root@linfan ~]# ss -natl
[root@linfan ~]# cd /usr/local/apache/bin
[root@linfan bin]# ./apachectl start 启动httpd服务
[root@linfan bin]# ./apachectl -t
//检查是否有语法错误
###在客户端检测
2.不同IP相同端口
[root@linfan ~]# vim /etc/httpd24/httpd.conf
找到ServerName www.example.com:80 取消#号注释
找到listen 80 删除之前的 listen 81
在最后面添加下面如下内容
#virtual host 1
<VirtualHost 192.168.24.157:80>编辑此行的IP
DocumentRoot "/usr/local/apache/htdocs/lin"
ErrorLog "logs/lin/error_log"
CustomLog "logs/lin/access_log" combined
<Directory "/usr/local/apache/htdocs/lin">
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
#virtual host 2
<VirtualHost 192.168.24.180:80>
DocumentRoot "/usr/local/apache/htdocs/fan"
ErrorLog "logs/fan/error_log"
CustomLog "logs/fan/access_log" combined
<Directory "/usr/local/apache/htdocs/fan">
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
[root@linfan ~]ip addr add 192.168.24.180/24 dev eth0
//建立与编辑文件对应的临时IP
[root@linfan ~]# pkill httpd
[root@linfan ~]# ps -ef|grep httpd
[root@linfan ~]# ss -natl
[root@linfan ~]# cd /usr/local/apache/bin
[root@linfan bin]# ./apachectl start 启动httpd服务
[root@linfan bin]# ./apachectl -t
//检查是否有语法错误
在客户端检测
###3.相同IP相同端口不同域名
[root@linfan ~]vim /etc/httpd24/httpd.conf
找到ServerName www.example.com:80 取消#号注释
找到Listen 80 删除之前的 Listen 81
在最后面添加下面如下内容
#virtual host 1
<VirtualHost 192.168.24.157:80>
ServerName www.doudou.com:80 //添加此行
DocumentRoot "/usr/local/apache/htdocs/lin"
ErrorLog "logs/lin/error_log"
CustomLog "logs/lin/access_log" combined
<Directory "/usr/local/apache/htdocs/lin">
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
#virtual host 2
<VirtualHost 192.168.24.157:80>
ServerName www.dou.com:80 //添加此行
DocumentRoot "/usr/local/apache/htdocs/fan"
ErrorLog "logs/fan/error_log"
CustomLog "logs/fan/access_log" combined
<Directory "/usr/local/apache/htdocs/fan">
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
[root@linfan ~]# pkill httpd
[root@linfan ~]# ps -ef|grep httpd
[root@linfan ~]# ss -natl
[root@linfan ~]# cd /usr/local/apache/bin
[root@linfan bin]# ./apachectl start 启动httpd服务
[root@linfan bin]# ./apachectl -t
//检查是否有语法错误
##在客户端检测
在mac电脑上修改/etc/hosts/文件
ip 域名
ip 域名
在windows电脑上修改
C:\Windows\System32\drivers\etc 文件
ip 域名
ip 域名
在客户端检测
原文:http://blog.51cto.com/13858192/2157138
本文标题为:httpd/apache编译安装配置详解
- 【转载】CentOS安装Tomcat 2023-09-24
- nginx中封禁ip和允许内网ip访问的实现示例 2022-09-23
- CentOS7安装GlusterFS集群的全过程 2022-10-10
- CentOS_mini下安装docker 之 安装docker CE 2023-09-23
- 解决:apache24 安装后闪退和配置端口映射和连接超时设置 2023-09-11
- 阿里云ECS排查CPU数据分析 2022-10-06
- KVM虚拟化Linux Bridge环境部署的方法步骤 2023-07-11
- 利用Docker 运行 python 简单程序 2022-10-16
- 教你在docker 中搭建 PHP8 + Apache 环境的过程 2022-10-06
- IIS搭建ftp服务器的详细教程 2022-11-15