阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Apache Httpd服务器之基础教程

447次阅读
没有评论

共计 6469 个字符,预计需要花费 17 分钟才能阅读完成。

Httpd 服务器是 Apache 产品线下的一款 web 服务器,常与 PHP 或 Python 等 CGI 脚本一起配合使用,为用户提供动态 Web 服务。httpd,从名字就可以看出,它提供的主要是基于 http 协议的 Web 服务。本篇为介绍 Httpd 服务器的第一篇,主要介绍下 Httpd 服务器的安装,运行模式,容器配置,以及 CGI 的配置,目的是使大家能通过阅读此篇文章来从零建立起一个可运行的 Web 服务器。

Httpd 从哪下载?请访问 http://httpd.apache.org/download.cgi,这里就有最新的 httpd 服务器的源码。如果想把你的服务器部署在生产环境,又或者不想在使用过程中出现一些意想不到的问题的话,还是下载 Stable Release 版比较好。目前的稳定版本为 2.4.10。

如果我们的操作系统是 Linux,下载好 httpd-2.4.10.tar.gz 后,我们就可以通过 tar zxvf httpd-2.4.10.tar.gz 命令释出所有的源代码。但此时不见得能够成功的对源代码进行编译安装,因为要安装 httpd 服务器,首先得安装好几个其它的软件,他们分别是 APR,APR-Util,PCRE,ZLIB。请确保 APR,APR-Util,PCRE 以及 ZLIB 都是最新的版本,尽量不要用 yum 库里的版本,因为如果你的操作系统不是最新的版本,比如你的操作系统为 CentOS 5,那么当你使用 yum 安装 APR 时,就会安装到老版本的 APR,从而导致 2.4.10 的 httpd 服务器编译失败(当然还是推荐使用新版本的操作系统,否则可能会出其它问题,如 C 编译器版本,autoconf 版本问题等,会带来一些麻烦)。所以为了不区分与平台,我们还是麻烦下,通过官方发布的最新版本的源代码来编译安装这些前置软件。APR 及 APR-Util 的下载地址在 http://apr.apache.org 上,在这里你可以下载到 APR 1.5.1 及 APR-Util 1.5.4。PCRE 下载地址在 http://sourceforge.net/projects/pcre/files/pcre/。在这里下载 PCRE 8.36。ZLIB 下载地址在 http://zlib.net,下载后,我们有 apr-1.5.1.tar.gz,apr-util-1.5.4.tar.gz,pcre-8.36.tar.gz,zlib-1.2.8.tar.gz 这三个文件。我以人格担保,它们与 httpd 2.4.10 是 100% 匹配的。

在安装 httpd 之前,我们应先安装好 apr,apr-util,pcre 及 zlib。下面就给出安装它们的具体过程,值得注意的是 apr 应在 apr-util 之前安装好,因为 apr-util 依赖于 apr。下面假如你所有的文件都在 /usr/local 下。

apr 安装过程:

    cd /usr/local/apr-1.5.1
        ./configure —prefix=/usr/local/apr
        make && make install

        apr-util 安装过程:

    cd /usr/local/apr-util-1.5.4
        ./configure —prefix=/usr/local/apr-util —with-apr=/usr/local/apr

        pcre 安装过程:

    cd /usr/local/pcre-8.36
        ./configure —prefix=/usr/local/pcre
        make && make install

    zlib 安装过程:

        cd /usr/local/zlib-1.2.8
        ./configure —prefix=/usr/local/zlib
        make && make install

    安装完以上三个前置软件,就可以安装 apache httpd 服务器了。
    httpd 安装过程:

        cd /usr/local/httpd-2.4.10
        ./configure —prefix=/usr/local/httpd \
        —with-apr=/usr/local/apr \
        —with-apr-util=/usr/local/apr-util \ 
        —with-pcre=/usr/local/pcre \ 
        —with-z=/usr/local/zlib —with-mpm=worker \
        —enable-modules=all —enable-so
        make && make install

    其中 —with-mpm 为多路处理模块的设置,如设置为 worker,则系统将以多进程多线程模型运行,这种设置适合于配合 php-fpm 管理 php cgi 进程,但不适合通过 libphp.so 模块进行 php 内容的解析。—enable-modules 代表启动 httpd 内所有模块.—enable-so 代表启动动态库加载功能(这个是默认就开启的)。前面的—with-xxx 是所需要的前置软件的安装路径。
    这样,我们就完成了 httpd 的安装工作。在启动 httpd 前,我们应对 httpd 进行必要的配置。httpd 的配置文件名为 httpd.conf,位置在 /usr/local/httpd/conf/httpd.conf。下面就简单的介绍下我们的 httpd 配置文件。
    httpd 的配置文件分为全局和容器两个部分,在容器外的配置指令即为全局指令,在整个配置文件范围内均有效,而容器内的指令,则只在容器范围内有效。那么什么是容器呢?简单点说,大部分以尖括号 <xxx> 开头,以 </xxx> 结尾的就是容器。比如 <Directory></Directory>,又比如 <Location></Location> 等。首先讨论下常用的全局指令,基础的常用的全局指令有 ServerRoot,Listen,LoadModule,User,Group,ServerName,DocumentRoot 等。因为此篇是基础,所以也就只简单介绍下比较基础的 ^_^。
    ServerRoot,为服务器所在根目录,一般为服务器的安装目录,配置文件里的相对路径一般以它作为参照。
    Listen,服务器的监听端口,可以以 IP: 端口的形式设置,也可以只设置端口。如果设置了 IP,则服务器只会监听此 IP 对应的网络接口。
    LoadModule,加载动态库,比如你要开启代理功能,那么应该利用 LoadModule 加载 proxy.so 模块。
        User,服务器运行时使用的用户名,此用户为 Linux 系统用户。
    Group,服务器运行时使用的用户组,此用户组为 Linux 系统用户组。
    ServerName,服务器名可用你申请的域名或 IP 表示,不设置这个在启动时会有一个警告,但也不会报错。设不设置无所谓啦。
    DocumentRoot,服务器检索内容的根目录,比如用户在浏览器输入 url 为 http://ip/index.html,那么这个 index.html 在哪呢?就在 DocumentRoot 设置的值下。
    这些指令,一般默认的配置文件已经帮你设置好了,除非你的 80 端口被某项进程所占,否则服务器应该能正常启动。可以通过 linux 命令 netstat -ant 查看 tcp 端口的情况。如果在 Local Address 这一列没看到 80 端口被占用的话,恭喜你,启动服务器吧。否则,请更改 Listen 的值。
    如果你不需要建立虚拟主机,也许 <Directory> 容器会是你主要的设置点。Directory 按字面意义就是设置目录,设置服务器检索内容的目录。如果你的 DocumentRoot 的值为 /usr/local/httpd/htdocs。那么当用户的 uri 为 index.html 时,服务器将在 /usr/local/httpd/htdocs 下寻找 index.html 文件,当 uri 为 test/index.php 时,服务器将在 /usr/local/httpd/htdocs/test 下寻找 index.php 文件。那么如果我想在 /usr/local/httpd/htdocs 自定义一些设置,比如想显示目录下的文件列表,就应该利用 <Directory> 容器。下面是一段目录设置代码:

    <Directory“/usr/local/httpd/htdocs”>
        Options Indexes
        AllowOverride None
                Require all granted
    </Directory>

    这段代码很简单,主要达成三个目的。一是允许显示目录列表,二是禁止.htaccess 文件覆盖配置,三是允许所有用户访问该目录,也就是说只要 uri 映射到此目录,则就可以将内容返回给用户。Options 是目录的一些设置选项,如允许显示列表,允许目录内有软链接等。AllowOverride 是是否允许其它的配置文件覆盖此配置。Require 是授权。
   
    我们用 /usr/local/httpd/bin/httpd -k start 命令来启动服务器。如果没有任何回显,则表示服务器启动成功。进一步可以用 ps aux | grep httpd 来确定以下,如果有很多 /usr/local/httpd/bin/httpd -k start 进程,则表明服务器启动成功。利用浏览器访问下服务器,如服务器 IP 为 192.168.1.6,则在浏览器内输入 http://192.168.1.6/,如果页面显示”It works!”,则表示服务器一切 OK。至此,服务器的安装到此结束,下面介绍以下服务器的运行模式。
    Httpd 服务器的运行模式主要分为 prefork 和 worker,它们属于多路处理模块 MPM,由—with-mpm 参数在./configure 时设置。prefork 为非线程型,预派生的多路处理模块,而 worker 属于线程型的。也就是说 prefork 使用进程处理请求,而 worker 可以使用线程处理请求。它们各有优缺点,对于非线程安全的脚本处理系统,适合与使用 prefork 模块,如 php-cli。对于线程安全的脚本处理系统,如果你的机器是多核并且配置足够高,选择 worker 模块也许是更好的选择。
    prefork 使用一个单独的控制进程负责产生子进程,这些子进程用于监听请求并给出应答。Apache 总是试图保持一些备用的子进程用于迎接即将到来的请求,这样客户端就不用在得到服务前等待子进程的产生。配置 mpm 模块可以在配置文件的全局部分进行设置。当然,一般来说我们在设置 mpm 时会加上 <IfModule></IfModule> 先判断下该模式是否正应用在服务器中。如下是一段 prefork 的配置代码:
    <IfModule mpm_prefork_module> #这个判断可以不加,除非你非常确定自己启动了 prefork 的模式
        StartsServers    5    #服务器启动时创建的进程数
        MinSpareServers    5    #最小空闲进程数
        MaxSpareServers    10    #最大空闲进程数
        MaxRequestWorkers    250    #最高并发量
        MaxConnectionsPerChild    0    #单个进程能处理的连接数,如果设置为正整数值,则在超过此连接数后,
                                        该子进程会被 Kill 掉。当设置为 0 时,表示无限制                             
    </IfModule>

    worker 为��线程多进程的服务器,可以处理海量请求,前提是你的服务器能抗的住。如下是一段 worker 的配置代码:

    <IfModule mpm_worker_module>
        StartServers    3                #同 prefork 下的 StartServers 指令
        MinSpareThreads    75            #最小空闲线程数
        MaxSpareThreads    250            #最大空闲线程数
        ThreadsPerChild    25            #每个子进程的线程数
        MaxRequestWorkers    400        #同 prefork 下的 MaxRequestWorkers 指令
        MaxConnectionsPerChild    0    #同 prefork 下的 MaxConnectionsPerChild 指令
    </IfModule>

   
    最后,我们来探讨下 httpd 如何与 CGI 脚本进行交互,实现动态内容。以普通的 bash 脚本为例。我们创建一个 bash 脚本如下:
   

    #!/bin/bash
    echo Content-type: text/html
    echo Hello, World.

    脚本文件命名为 hello.cgi。
   
    我们将此脚本放到 /usr/local/httpd/cgi-bin 目录中,目的是使用户在浏览器上访问 http://192.168.1.6/cgi-bin/hello.cgi,就能在网页上显示”Hello, World.”。那么该如何设置呢?打开 httpd.conf 文件,参考如下配置代码:

    <IfModule alias_module>
        ScriptAlias /cgi-bin/“/usr/local/httpd/cgi-bin/”
    </IfModule>
    <IfModule mime_module>
        AddHandler cgi-script .cgi
    </IfModule>
    <Directory“/usr/local/httpd/cgi-bin”>
        Options ExecCGI
        Require all granted
    </Directory>

    下面依次解释下以上指令的意义。大家可以看到命令分别包含在 alias 和 mime 的模块判断中,所以先在 LoadModule 中找到 alias 和 mime 两个模块并取消注释,同时确认你的 /usr/local/httpd/modules 中真有这两个模块(应该都有,这属于 httpd 的核心模块)。ScriptAlias 的意义是将 uri 为 /cgi-bin/ 的路径映射到物理目录 /usr/local/httpd/cgi-bin 中,也就是你放 cgi 脚本的那个目录。AddHandler 命令表示添加一个 cgi 的脚本处理器,使 httpd 能处理 cgi 脚本,这个 cgi 脚本处理器名为 cgi-script,它处理以.cgi 后缀结尾的文件。Options 下的 ExecCGI 选项表示,该目录下可以执行 CGI 脚本。配置完后重启服务器,然后就可以愉快的进行动态内容的访问了。
    此篇文章仅仅介绍了 httpd 服务器的 9 牛之 1 毛,使大家对 httpd 服务器有个基础的认识。当然 httpd 服务器还有很多功能,如日志、重写、认证、授权、与 php 模块进行结合使用、与 php-fpm 管理器进行结合使用。它是 web 服务架构中重要的一环,为 web 服务基础设施贡献了许多力量。

CentOS 6.5 编译安装 httpd-2.4.7 http://www.linuxidc.com/Linux/2014-02/97265.htm

httpd 中工作模型的比较  http://www.linuxidc.com/Linux/2014-03/99093.htm

源码编译安装 httpd2.4 及虚拟主机 http://www.linuxidc.com/Linux/2014-08/105384.htm

编译安装最新版 httpd-2.4 http://www.linuxidc.com/Linux/2014-03/98761.htm

httpd2.4 基本功能的实现 … http://www.linuxidc.com/Linux/2014-03/98762.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计6469字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7959364
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024 程序员】我劝你赶紧去免费领一个 AWS、华为云等的主机 每年 10 月 24 日,程序员们都会迎来...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...