Apache

由 下次换你说安 发布

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

部署方案:

  1. 基于仓库
  2. 基于源码

基于仓库

  1. 配置仓库
  2. 安装服务器

实现步骤:

一、规划

服务器

  • 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 ~]$

二、确定部署方案

基于本地仓库

  1. 配置本地源
镜像放置虚拟光驱中

挂载
[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
  1. 测试本地源
[abbott@test_web ~]$ sudo dnf  search  httpd
  1. 部署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  #临时关闭防火墙

六、访问测试

  1. 在本地测试
[abbott@test_web ~]$ curl 127.0.0.1
  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

源码部署

一、什么是源码

源代码:人类可读的代码

二、为什么要使用源码

  1. 解决软件仓库中没有的软件
  2. 灵活性比较高;需要使用插件添加什么插件
  3. 方便管理

三、源码编译的口诀(三板斧)

  1. 检查环境(系统环境)
  2. 编译(编译测试)
  3. 编译安装

四、源码编译安装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

九、测试

  1. 查看端口号
[abbott@localhost apache24]$ dnf -y install  net-tools  lsof

[abbott@localhost apache24]$ sudo  netstat  -luntp | grep  httpd
  1. 通过浏览器

十、添加规则

[abbott@localhost apache24]$ sudo  firewall-cmd --add-port=80/tcp

十一、编译apache的错误

  1. 检查环境时错误:缺少运行环境

解决方法:

  1. 通过软件仓库安装C环境(推荐)
sudo dnf -y install  gcc gcc-c++
  1. 通过源码编译C环境

  2. 找不到命令

解决方法:

sudo dnf -y install make

Apr-util 错误信息

  1. 编译时错误缺少expat的函数库

解决方法:

sudo dnf -y install expat-devel

httpd 错误

  1. 缺少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)

实现步骤:

  1. server修改本地域名解析
[root@test_51 apache24]# cat /etc/hosts
  1. 修改客户端的本地域名解析

Windows

  1. 修改配置文件

<VirtualHost *:80>
    ServerName test_51.com
    ServerAlias www.test_51.com
    DocumentRoot "/usr/local/http24/apache24

0条评论

评论已关闭