沃梦达 / IT编程 / 服务器 / 正文

httpd/apache编译安装配置详解

一.httpd介绍1.httpd是http协议的一个经典实现,也是apache组织中的一个顶级项目,其官方站点为httpd.apache.org。2.httpd的运行机制高度模块化(Core+Modules):采用核心模块+扩展模块的机制DSO(Dynamic Shared ...

一.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
[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编译安装配置详解