Apache HTTP服务器项目
Apache HTTP服务器项目旨在为包括UNIX和Windows在内的现代操作系统开发和维护开源HTTP服务器。该项目的目标是提供一个安全、高效和可扩展的服务器,提供与当前HTTP标准同步的HTTP服务。
Apache HTTP服务器(“httpd”)于1995年推出,自1996年4月以来一直是互联网上最受欢迎的网络服务器。它在2020年2月作为一个项目庆祝了25岁生日。
Apache HTTP服务器是Apache软件基金会的一个项目。
官网地址:Welcome! - The Apache HTTP Server Project
部署Apache
部署方案:
- 基于仓库
- 基于源码
基于仓库
- 配置仓库
- 安装服务器
实现步骤:
一、规划
服务器
- IP地址:192.168.107.154/24
- 主机名:test_web.com
修改主机名:
[abbott@test_154 ~]$ sudo hostnamectl set-hostname test_web.com
[abbott@test_154 ~]$ bash
[abbott@test_web ~]$
二、确定部署方案
基于本地仓库
- 配置本地源
镜像放置虚拟光驱中
挂载
[abbott@test_web ~]$ sudo mount /dev/sr0 /mnt/
mount: /mnt: WARNING: device write-protected, mounted read-only.
修改配置文件
[abbott@test_web ~]$ sudo vi /etc/yum.repos.d/redhat.repo
[Appstream]
name=Rehat 8 Appstream
baseurl=file:///mnt/AppStream
enabled=1
gpgcheck=0
[BaseOS]
name=Rehat 8 BaseOS
baseurl=file:///mnt/BaseOS
enabled=1
gpgcheck=0
- 测试本地源
[abbott@test_web ~]$ sudo dnf search httpd
- 部署httpd服务
[abbott@test_web ~]$ sudo dnf -y install httpd
三、启动Apache
管理服务的命令:
systemctl
[abbott@test_web ~]$ sudo systemctl start httpd #临时启动服务
[abbott@test_web ~]$ systemctl status httpd #查看服务状态
[abbott@test_web ~]$ systemctl enable httpd --now #将服务加入开机自启且现在立刻运行此服务
四、检查服务是否启动成功
[abbott@test_web ~]$ ss -luntp | grep 80
[abbott@test_web ~]$ ps -aux
[abbott@test_web ~]$ lsof -i: 80
[abbott@test_web ~]$ netstat -luntp
[abbott@test_web ~]$ sudo systemctl status httpd
五、防火墙(firewalld)
[abbott@test_web ~]$ sudo systemctl stop firewalld #临时关闭防火墙
六、访问测试
- 在本地测试
[abbott@test_web ~]$ curl 127.0.0.1
- 使用客户端访问测试
七、 创建一个自己html页面
创建一个项目index.html文件
<html>
<body>
<font color=red>
<h1>这是我的第一个web-test页面</h1>
</font>
</body>
</html>
将项目文件放置到HTTP服务的默认存放路径/var/www/html/
测试结果
Apache 的相关配置文件
[abbott@test_web html]$ sudo rpm -ql httpd
/etc/httpd/conf #httpd 的主配置目录
/etc/httpd/logs #服务日志目录
/usr/sbin/httpd #服务启动脚本程序
/var/log/httpd #存放log日志
/run/ #运行服务的进程ID
如果安装服务时候使用的(基于仓库yum/dnf/apt安装),默认配置文件都会存放/etc/目录下
主配置目录:
[abbott@test_web html]$ tree /etc/httpd/ -L 1
/etc/httpd/
|-- conf
|-- conf.d
|-- conf.modules.d
|-- logs -> ../../var/log/httpd
|-- modules -> ../../usr/lib64/httpd/modules
|-- run -> /run/httpd
`-- state -> ../../var/lib/httpd
解析主配置文件httpd.conf
[abbott@test_web html]$ cat /etc/httpd/conf/httpd.conf
源码部署
一、什么是源码
源代码:人类可读的代码
二、为什么要使用源码
- 解决软件仓库中没有的软件
- 灵活性比较高;需要使用插件添加什么插件
- 方便管理
三、源码编译的口诀(三板斧)
- 检查环境(系统环境)
- 编译(编译测试)
- 编译安装
四、源码编译安装apache
通过测试获取软件包依赖关系,然后在官网网站获取所有的软件包
通过dnf/yum/apt获取软件包的依赖关系
一、获取软件(通过官网)
https://dlcdn.apache.org/httpd/httpd-2.4.62.tar.bz2
https://dlcdn.apache.org//apr/apr-1.7.5.tar.gz
https://dlcdn.apache.org//apr/apr-util-1.6.3.tar.gz
二、创建管理目录
约定:在安装源码包的时候定义的目录为(/usr/local/)
[abbott@localhost ~]$ sudo mkdir /usr/local/http24
三、将软件包推送至服务器上
➜ Downloads scp apr-1.7.5.tar.gz apr-util-1.6.3.tar.gz httpd-2.4.62.tar.gz abbott@192.168.107.50:~
四、解压软件包(tar)
- apr软件包
[abbott@localhost http24]$ sudo mkdir apr
[abbott@localhost http24]$ sudo tar -xvf apr-1.7.5.tar.gz
[abbott@localhost http24]$ sudo mv apr-1.7.5 apr
- apr-util
[abbott@localhost http24]$ sudo mkdir apr-util
[abbott@localhost http24]$ sudo tar xf apr-util-1.6.3.tar.gz -C apr-util
- httpd
[abbott@localhost apr-util-1.6.3]$ cd ../..
[abbott@localhost http24]$ sudo mkdir apache24
[abbott@localhost http24]$ sudo tar xf httpd-2.4.62.tar.gz -C apache24/
五、检查环境
- apr软件包
[abbott@localhost apr-1.7.5]$ sudo ./configure --prefix=/usr/local/http24/apr
- apr-util
[abbott@localhost apr-util-1.6.3]$ sudo ./configure --prefix=/usr/local/http24/apr-util --with-apr=/usr/local/http24/apr
- httpd
[abbott@localhost httpd-2.4.62]$ sudo ./configure --prefix=/usr/local/http24/apache24/ --with-apr=/usr/local/http24/apr --with-apr-util=/usr/local/http24/apr-util
六、编译
- apr编译
[abbott@localhost apr-1.7.5]$ sudo make
- apr-util
[abbott@localhost apr-util-1.6.3]$ sudo make
- http
[abbott@localhost httpd-2.4.62]$ sudo make
七、编译安装
- apr 安装
[abbott@localhost apr-1.7.5]$ sudo make install
- apr-util
[abbott@localhost apr-util-1.6.3]$ sudo make install
- httpd
[abbott@localhost httpd-2.4.62]$ sudo make install
八、启动服务
[abbott@localhost apache24]$ sudo bin/apachectl
九、测试
- 查看端口号
[abbott@localhost apache24]$ dnf -y install net-tools lsof
[abbott@localhost apache24]$ sudo netstat -luntp | grep httpd
- 通过浏览器
十、添加规则
[abbott@localhost apache24]$ sudo firewall-cmd --add-port=80/tcp
十一、编译apache的错误
- 检查环境时错误:缺少运行环境
解决方法:
- 通过软件仓库安装C环境(推荐)
sudo dnf -y install gcc gcc-c++
-
通过源码编译C环境
-
找不到命令
解决方法:
sudo dnf -y install make
Apr-util 错误信息
- 编译时错误缺少expat的函数库
解决方法:
sudo dnf -y install expat-devel
httpd 错误
- 缺少libpcre库
解决方法:
sudo dnf -y install pcre-devel
make错误
解决方法:清楚所有的编译(所有apr apr-util httpd)
sudo make clean
源码HTTP服务的目录的结构
所有的服务的相关配置文件都会存放在你所指定的目录中; --prefix=
[root@localhost apache24]# tree -L 1 .
.
|-- bin
|-- build
|-- cgi-bin
|-- conf
|-- error
|-- htdocs
|-- include
|-- logs
`-- modules
Httpd 的配置文件目录
[root@localhost apache24]# tree -L 1 conf/
conf/
|-- extra
|-- httpd.conf
|-- magic
|-- mime.types
`-- original
httpd的日志存放目录
[root@localhost apache24]# tree -L 1 logs/
logs/
|-- access_log
|-- error_log
`-- httpd.pid
解析主配置httpd.conf
#定义服务的根目录
31 ServerRoot "/usr/local/http24/apache24/"
#定义监听端口号
51 #Listen 12.34.56.78:80
52 Listen 80
连接进程
- 父进程
- 子进程
[root@localhost apache24]# lsof -i:80
问题:
如何在一台服务器上跑多个web服务
为什么?
解决
- 利用虚拟化(虚拟化产品)
- 在一台上部署多个web组件
以上显的比较笨重;不好维护
- 基于web服务器上的虚拟主机的功能可以帮我实现以上的能
虚拟主机实现方式:
- 基于端口
- 基于IP地址
- 基于域名
实现过程
一、开启虚拟主机的模块(修改主配置文件)
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
二、配置虚拟主机conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/usr/local/http24/apache24//docs/dummy-host.example.com"
ServerName dummy-host.example.com
ServerAlias www.dummy-host.example.com
ErrorLog "logs/dummy-host.example.com-error_log"
CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>
实现步骤(基于端口号):
一、 准备项目
[root@test_51 apache24]# cat htdocs/test.com/index.html
[root@test_51 apache
二、修改配置文件
2.1 打开主配置文件中虚拟主机
2.2 修改虚拟主机的配置文件
<VirtualHost *:80>
DocumentRoot "/usr/local/http24/apache24/htdocs/test.com"
ErrorLog "logs/test.com-error_log"
CustomLog "logs/test.com-access_log" common
</VirtualHost>
Listen 81
<VirtualHost *:81>
DocumentRoot "/usr/local/http24/apache24/htdocs/test2.com"
ErrorLog "logs/test2.com-error_log"
CustomLog "logs/test2.com-access_log" common
</VirtualHost>
三、重启和检查配置文件的语法
[root@test_51 apache24]# bin/apachectl -t
[root@test_51 apache24]# bin/apachectl -k restart
四、测试
客户端测试:
本地测试:
[root@test_51 apache24]# curl 127.0.0.1:81
[root@test_51 apache24]# curl 192.168.107.50
基于域名实现虚拟主机
一、什么域名(dns)
实现步骤:
- server修改本地域名解析
[root@test_51 apache24]# cat /etc/hosts
- 修改客户端的本地域名解析
Windows
- 修改配置文件
<VirtualHost *:80>
ServerName test_51.com
ServerAlias www.test_51.com
DocumentRoot "/usr/local/http24/apache24 
评论已关闭