httpd/apache编译安装配置详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了httpd/apache编译安装配置详解相关的知识,希望对你有一定的参考价值。

一.httpd介绍

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
[[email protected] ~] 192.168.24.157.24

###环境准备:
关闭防火墙和selinux

[[email protected] ~]# systemctl stop firewalld
[[email protected] ~]# systemctl disable firewalld
[[email protected] ~]# sed -ri ‘s/^(SELINUX=).*/1disabled/g‘ /etc/selinux/config
[[email protected] ~]# setenforce 0

安装开发环境:

[[email protected] ~]# yum groups mark install "Development Tools"

[[email protected] ~]# groupadd -r apache

[[email protected] ~]# useradd -M -s /sbin/nologin -g apache apache

[[email protected] ~]# yum -y install openssl-devel pcre-devel expat-devel libtool

下载并安装apr-1.4+和apr-util-1.4+


[[email protected] ~]# cd /usr/src/

[[email protected] 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

编译安装:

[[email protected] src]# cd apr-1.6.3cd apr-1.6.3

[[email protected] apr-1.6.3]# vim configure

cfgfile="${ofile}T"
trap "$RM "$cfgfile"; exit 1" 1 2 15
# $RM "$cfgfile   //将此行#号取消 或删除此行

[[email protected] apr-1.6.3]# ./configure --prefix=/usr/local/apr
[[email protected] apr-1.6.3]# make && make install
[[email protected] apr-1.6.3]# cd /usr/src/apr-util-1.6.1
[[email protected] apr-util-1.6.1]#  ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[[email protected] apr-util-1.6.1]# make && make install

###编译安装httpd

[[email protected] ~]# wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.34.tar.bz2
[[email protected] ~]# ls
[[email protected] ~]# tar xf httpd-2.4.34.tar.bz2
[[email protected] ~]# cd httpd-2.4.34
[[email protected] 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
[[email protected] ~]# make && make install

#虚拟主机:
虚拟主机有三种类型

相同IP不同端口

不同IP相同端口

相同IP相同端口不同域名

1.当相同IP不同端口时:

编辑httpd编译安装的主配置文件

[[email protected] ~]# 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>
[[email protected] ~]# tail -25 /etc/httpd24/httpd.conf
[[email protected] ~]# cd /usr/local/apache/logs/   //建立与httpd主配置文件相同路径的目录
[[email protected] logs]# mkdir lin
[[email protected] logs]# mkdir fan
[[email protected] logs]# cd /usr/local/apache/htdocs/  //在网站存放目录下 也创建与之相同的目录
[[email protected] htdocs]# mkdir lin
[[email protected] htdocs]# mkdir fan
[[email protected] htdocs]# chown -R apache.apache /usr/local/apache/htdocs/
  //给网站存放的目录更改属主属组为apache
ll
[[email protected] htdocs]# echo ‘hello lin‘ > lin/index.html
[[email protected] htdocs]# echo ‘hello fan‘ > fan/index.html
[[email protected] ~]# pkill httpd  
[[email protected] ~]# ps -ef|grep httpd
[[email protected] ~]# ss -natl 
[[email protected] ~]# cd /usr/local/apache/bin
[[email protected] bin]# ./apachectl  start   启动httpd服务
[[email protected] bin]# ./apachectl  -t  
//检查是否有语法错误

###在客户端检测
技术分享图片
技术分享图片

2.不同IP相同端口

[[email protected] ~]# 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>

[[email protected] ~]ip addr add 192.168.24.180/24 dev eth0 
//建立与编辑文件对应的临时IP
[[email protected] ~]# pkill httpd  
[[email protected] ~]# ps -ef|grep httpd
[[email protected] ~]# ss -natl 
[[email protected] ~]# cd /usr/local/apache/bin
[[email protected] bin]# ./apachectl  start   启动httpd服务
[[email protected] bin]# ./apachectl  -t  
//检查是否有语法错误

在客户端检测
技术分享图片技术分享图片


###3.相同IP相同端口不同域名

[[email protected] ~]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>
[[email protected] ~]# pkill httpd  
[[email protected] ~]# ps -ef|grep httpd
[[email protected] ~]# ss -natl 
[[email protected] ~]# cd /usr/local/apache/bin
[[email protected] bin]# ./apachectl  start   启动httpd服务
[[email protected] bin]# ./apachectl  -t  
//检查是否有语法错误

##在客户端检测

在mac电脑上修改/etc/hosts/文件
ip 域名
ip 域名

技术分享图片

在windows电脑上修改

   C:WindowsSystem32driversetc 文件

   ip  域名
   ip  域名

在客户端检测

技术分享图片

以上是关于httpd/apache编译安装配置详解的主要内容,如果未能解决你的问题,请参考以下文章

Apache httpd(apache2)服务配置详解,Mac下设置虚拟主机部署多个web项目,及反向代理部署Java项目

基于Linux搭建Apache网站服务配置详解

编译安装LAMP环境:httpd-2.4+mysql5.6+php5.5

httpd源码编译安装

CentOS Apache 安装 配置 启动

编译安装httpd apache服务器