Ubuntu20.4利用httpd(Apache2)源码搭建web服务器

news2024/11/19 15:38:09

        Apache取自“a patchy server”的读音,源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一,Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。

        本来它只用于小型或试验Internet网络,后来逐步扩充到各种Unix系统中,尤其对Linux的支持相当完美。Apache有多种产品,可以支持SSL技术,支持多个虚拟主机。Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此,在一个Apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。到目前为止Apache仍然是世界上用的最多的Web服务器,市场占有率达60%左右。世界上很多著名的网站如Amazon、Yahoo!、W3 Consortium、Financial Times等都是Apache的产物,它的成功之处主要在于它的源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix、Windows、Linux系统平台上)以及它的可移植性等方面。

        本文通过下载Apache2的httpd的源码,在ubuntu20.4的虚拟机计算机上搭建web服务器,基于Apache2的httpd在编译的过程中依赖于APR的开发环境(含APR、APR util和pcre2软件),其中apr-util依赖expat的软件。因此httpd的源码移植包括apr源码移植、expat源码移植、apr-util源码移植、pcre2源码移植和httpd源码移植等部分组成,并进行ubuntu20.4的httpd的web服务器的配置与测试。

(一) APR软件源码移植

1.首先在apache的官网下载APR的最新软件压缩包(V1.7.4)

http://archive.apache.org/dist/apr/

图1 下载最新的apr压缩包

 

2.拷贝apr压缩包到工作目录,并解压。

图2 拷贝解压apr最新源码压缩包

 

3.在apr的解压目录下新建编译脚本build_x86.sh。

图3 新建编译脚本

 

4.编译脚本build_x86.sh的内容如下所示:

图4 APR的编译脚本

 

5.给编译脚本添加可执行权限,并运行编译脚本进行APR的配置、编译与安装。

图5 APR进行配置、编译与安装

 

6.安装完成后,在/usr/local/apr目录生成如下文件目录。

图6 APR编译安装完成

 

(二)expat源码移植

1.Github下载expat的最新版本压缩包(V2.5.0),由于apr-util依赖expat的头文件,因此需要移植。

Release 2.5.0 · libexpat/libexpat · GitHub

图7 下载expat最新源码压缩包

 

2.拷贝expat源码压缩包到工作目录,并解压expat源码压缩包。

图8 拷贝并解压expat源码

 

3.在解压后新建编译脚本build_x86.sh,如下图所示:

图9 expat目录新建编译脚本

 

4.编译脚本build_x86.sh的内容如下所示:

图10 build_x86.sh编译脚本

 

5.给编译脚本添加可执行权限,运行编译脚本,在/usr/local/expat目录下生成安装文件如下所示:

图11 expat移植成功

 

(三)apr-util源码移植

1.在apr源码移植章节的步骤1,在官方下载apr-util的最新版本压缩包(V1.6.3)。

图12 下载apr-util V1.6.3压缩包

 

2.拷贝apr-util压缩包到工作目录,并解压。

图13 拷贝解压apr-util

 

3.在apr-util解压目录新建编译脚本build_x86.sh

图14 新建编译脚本和安装目录

 

4.编译脚本build_x86.sh的内容如下所示:

图15 apr-util编译脚本内容

 

5.给编译脚本添加可执行权限,运行编译脚本,在安装目录/usr/local/apr_util下生成文件列表如下:

图16 apr-util移植成功

 

(四)pcre2源码移植

1.github官方下载pcre2的最新源码压缩包(V10.42)。

https://github.com/PCRE2Project/pcre2/tags

图17 下载pcre2源码压缩包

2.拷贝pcre2源码压缩包到工作目录,并解压pcre2源码压缩包。

图18 pcre2源码拷贝与解压

 

3.进入pcre2解压目录,新建编译脚本build_x86.sh,如下所示

图19 新建编译脚本

 

4.运行antogen.sh脚本,生成配置文件和Makefile。

图20 运行autogen.sh脚本文件生成配置文件和Makefile

 

5.编译脚本build_x86.sh的内容如下所示:

图21 编译脚本build_x86.sh内容

 

6.给编译脚本build_x86.sh添加可执行权限,运行编译脚本,在安装目录/usr/local/pcre2生成如下目录。

图22 pcre2移植成功

 

(五)httpd源码移植

1.首先在apache的官网下载httpd的最新源码压缩包,有两个官方下载网址(其中有一个是github),具体如下图所示:

Index of /dist/httpd

图23 apache官网httpd下载

 

2.拷贝httpd的源码压缩包到工作目录,并解压,如下图所示:

图24 拷贝解压httpd

 

3.新建编译脚本build_x86.sh,如下图所示:

图25 新建编译脚本

 

4.编辑编译脚本build_x86.sh,具体如下所示:

图26 编译脚本build_x86.sh内容

 

5.给编译脚本添加可执行权限,并运行编译脚本进行httpd的编译。在安装目录/usr/local/httpd下生成移植后的文件目录,如下图所示:

图27 httpd移植成功

 

(六)基于httpd的web服务器配置与测试

1.Ubuntu首先输入ifconfig命令获得本地网口的ip地址(192.168.50.151),如下所示:

图28 本地网卡ip地址

 

2.进入httpd的安装目录的配置文件目录/usr/local/httpd/conf,打开配置文件httpd.conf(注意:sudo权限),修改监听IP地址和端口号:

图29 修改监听ip和端口号
图30 设置服务ip与端口号

3.进入httpd的安装目录/usr/local/httpd的子目录bin目录下,运行启动脚本,开启web服务。如果外部浏览器访问本web服务器,会显示httpd的安装目录/usr/local/httpd/htdocs子目录下的index.html文件。

sudo ./apachectl start         //开启httpd的web服务

sudo ./apachectl stop         //停止httpd的web服务(用于关闭web服务使用)

图31 开启web服务器

 

图32 /usr/local/httpd/htdocs下的index.html网页内容

 

4.在浏览器输入web服务器的IP地址和端口号,访问浏览器如下所示:

图33 搭建的web服务器访问成功

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/444704.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TinyOS 配置教程

文章目录 前言1. 安装1.1. 实验环境1.2. TinyOS基础工作1.3. TinyOS 的配置1.4. 安装 java1.5. 安装编译器 2. 测试仿真程序总结 前言 本文主要用于记录在 WSN 课程中,配置大作业所需使用的 TinyOS 仿真环境 1. 安装 1.1. 实验环境 本实验以如下版本为例&#xf…

Python面向对象详解(非常详细)

非常详细的讲解(爆肝1w字)👏🏻👏🏻👏🏻 零基础一样学得会👌🏻 干货满满不看后悔👍👍👍 📝个人主页→数据…

函数重载注意事项

C为什么支持函数重载,C语言不支持函数重载? C代码产生函数符号时, 是函数名参数列表类型组成的!如_Z3sumii C代码产生函数符号时,只由函数名决定 什么是函数重载? 一组函数,其中函数名相同&…

读书笔记-《ON JAVA 中文版》-摘要14[第十四章 流式编程]

文章目录 第十四章 流式编程1. 流支持2. 流创建2.1 流创建2.2 随机数流2.3 int 类型的范围2.4 generate()2.5 iterate()2.6 流的建造者模式2.7 Arrays2.8 正则表达式 3. 中间操作3.1 跟踪和调试3.2 流元素排序3.3 移除元素3.4 应用函数到元素3.5 在 map() 中组合流 4. Optional…

电脑文件恢复怎么做?3个方法快速恢复文件!

案例:电脑文件恢复怎么操作? 【我的电脑已经好久没用了,最近因为需要查看一些相关的文件才用到电脑,但是我打开后发现里面很多重要的文件都不见了,请问电脑文件应该怎么恢复呢?感谢回答!】 电…

AIGC从入门到精通

一键起飞 # 提前安装好python 3.10.9 ​git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui cd stable-diffusion-webui ./webui.sh -f --api --listen --enable-insecure-extension-access 非常详细!6000字详解AI绘画文生图干货、技巧&#xf…

【多线程】线程的状态

1. 等待一个线程 join 有一天张三与小美在家里吃饭,张三早早的把饭吃完了,对小美说,等你把饭吃完了,我就去洗碗了! 此时张三就要等待小美吃完饭才能去洗碗,就好比线程 A 要等待线程 B 执行完,线…

Ansys Lumerical | 光子集成电路之PN 耗尽型移相器仿真工作流

01 说明 本文旨在介绍Ansys Lumerical针对有源光子集成电路中PN耗尽型移相器的仿真分析方法。通过FDE和CHARGE求解器模拟并计算移相器的性能指标(如电容、有效折射率扰动和损耗等),并创建用于INTERCONNECT的紧凑模型,然后将其表征…

vue_03

文章目录 导航菜单功能的实现在Admin.vue中添加下列代码布局选择点击跳转事件 vuex的安装及配置安装配置新建store和index.js在index.js下写如下代码在main.js中引入store 封装菜单请求工具类新建menus.js编写menus.js文件 解决F5刷新数据丢失问题 导航菜单功能的实现 在Admin…

多项开发任务,如何做好任务分配和管理?

1、确定任务清单 任务精细化分解 需要将任务进行精细化分解,每个子任务时间最好不超过一周,明确子任务的目标、时间点和交付物。 多项开发任务,如何做好任务分配和管理? 2、优先级排序 需要将精细化好的任务,进行优先级…

TFTP+Filezilla文件双向传输(2)-ubuntu(VMware)-win10(host)

TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。 ftpd-hpa是tftp服务器 tftp-hpa是tftp客服端 inetd的全称…

设计尝试用Microsoft Visual Studio 在网络上架构一个电影院网络订票系统

设计尝试用Microsoft Visual Studio 在网络上架构一个电影院网络订票系统的设计,以使每一位客户不用出门就能看到最新的电影信息和预定电影票。本文从理论和实践两个角度出发,对一个具有数据挖掘功能电影院网络订票系统的设计进行设计与实现分析。随着电…

windows下运行dpdk下的helloworld

打开“本地安全策略”管理单元,在搜索框输入secpol。 打开本地策略->用户权限分配->锁定内存页->添加用户或组->高级->立即查找 输入电脑用户名,选择并添加。点击确定后,重启电脑。 安装内核驱动,下载地址https:…

srm 采购管理系统是如何赋能企业降本的?

近年来,随着全球经济的不断发展,企业的竞争也日趋激烈,企业为适应市场需求,加强产品创新和技术升级,加大产品研发和生产投入,然而在新冠肺炎疫情的影响下,许多企业经营出现困境。在这种情况下&a…

基于时间戳和序列号的mac地址生成策略

基于时间戳 基于时间戳生成MAC地址的具体操作步骤如下: 获取设备的出厂日期和时间。一般情况下,这个信息可以在设备的测试报告或者出厂记录中找到。 将设备的出厂日期和时间转换成时间戳格式。时间戳指的是一个从1970年1月1日00:00:00 UTC开始的秒数。…

自动化数据驱动?最全接口自动化测试yaml数据驱动实战,看这一篇就够了

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 我们在做自动化测…

ROS学习第十九节——TF静态坐标变换

1.坐标msg消息 订阅发布模型中数据载体 msg 是一个重要实现,首先需要了解一下,在坐标转换实现中常用的 msg:geometry_msgs/TransformStamped和geometry_msgs/PointStamped 前者用于传输坐标系相关位置信息,后者用于传输某个坐标系内坐标点的…

js面试题

在全局作用域下声明了一个变量 arr, 它的初始值是一个空数组 第二段代码,循环计数器变量i的初始值为0,循环条件是i的值小于2, 也就是说当i的值为0或者1时, 循环条件才能成立 才能够进入到循环体 当i的值为2时循环条件不成立&…

ConcurrentLinkedQueue

唯一一个使用cas实现的线程安全并发效率高的集合。 一、为什么叫松散队列? 链表是松散的,链表节点并不都是有效的,允许存在无效节点valnull,但是只有最后一个节点才能nextnull 为什么线程安全需要把链表做成松散的。就是因为入队…

蓝精灵协会 (The Smurfs‘ Society) 宣布与著名艺术家展开一系列的合作,打造传奇 PFP 系列

4 月 18 日,The Smurfs Society 将推出第一个由 Smurfs 品牌支持的官方 PFP 系列。该系列建立在链上游戏的基础之上,该游戏聚集了超过 85,000 名玩家,并在设计、创意和与著名艺术家的合作方面设立了新标准。 而最近,蓝精灵官方&am…