CHAPTER 1 Web Server - apache(httpd)

news2024/9/20 22:53:58

Web Server - apache

    • 1.1 概念介绍
      • 1.1.1 什么是Web Service?
      • 1.1.2 什么是Web Server?
      • 1.1.3 常见的Web服务程序有哪些?
    • 1.2 httpd
      • 1.2.1 httpd和apache的区别关系
      • 1.2.2 httpd版本介绍
      • 1.2.3 httpd安装
        • 1. yum 安装
        • 2. 编译安装
    • 1.3 通过systemctl管理httpd
      • 1.3.1 配置文件原因
      • 1.3.2 为httpd添加.service文件
      • 1.3.3 通过systemctl管理httpd

1.1 概念介绍

1.1.1 什么是Web Service?

Web Service(Web网络服务)是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的 Web 服务器会通过 HTTP(超文本传输协议)或HTTPS(安全超文本传输协议)把请求的内容传送给用户。

1.1.2 什么是Web Server?

顾名思义,Web Server就是提供web服务的server,中文名称叫网页服务器web服务器,也称为WWW(WORLD WIDE WEB)服务器。Web server的主要功能是提供网上信息浏览服务,具体包括存储,处理和传递网页给客户,它只需要支持HTTP协议,HTML文档格式及URL,与客户端的网络浏览器配合使用。

主机与web服务器之间的通信:
在这里插入图片描述

1.1.3 常见的Web服务程序有哪些?

提供 Web 网络服务的程序比较常用的有 IIS、Nginx 和 Apache 等。

  1. IIS(Internet Information Services,互联网信息服务)是 Windows 系统中默认的 Web 服务程序,IIS 只能在 Windows 系统中使用,因此它不在我们的讨论范围内。

  2. 2004 年 10 月 4 日,为俄罗斯知名门户站点而开发的 Web 服务程序 Nginx 横空出世。Nginx 程序作为一款轻量级的网站服务软件,因其稳定性和丰富的功能而快速占领服务器市场,但 Nginx 最被认可的还当是系统资源消耗低且并发能力强,因此得到了国内诸如新浪、网易、腾讯等门户站的青睐。

  3. Apache 程序是目前拥有很高市场占有率的 Web 服务程序之一,其跨平台和安全性广泛被认可且拥有快速、可靠、简单的 API 扩展。Apache 服务程序可以运行在 Linux 系统、UNIX 系统甚至是 Windows 系统中,支持基于IP、域名及端口号的虚拟主机功能,支持多种认证方式,集成有代理服务器模块、安全Socket 层(SSL),能够实时监视服务状态与定制日志消息,并有着各类丰富的模块支持。Apache是RHEL5、6、7系统中默认的Web服务程序。

本章将介绍apache(httpd)程序的配置及使用

1.2 httpd

官网 https://httpd.apache.org/

1.2.1 httpd和apache的区别关系

  1. httpd是unix系统(例如Unix,bsd)apache服务程序的可执行文件的文件名,一般在这些系统中httpd指的就是apache。
  2. apache作为web服务,像win下面的IIS一样;apache2以上版本改称为httpd。

httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。通常,httpd不应该被直接调用,而应该在类Unix系统中由 apachectl 调用,在Windows NT/2000/XP/2003中作为服务运行和在Windows 95/98/ME中作为控制台程序运行。

http/https:hyper text transfer protocol 超文本传输协议,位于传输层,默认端口80/tcp
html:hyper text mark language 超文本标记语言
httpd:c/s架构(client/server),httpd通过http协议通信

1.2.2 httpd版本介绍

CentOS6系列的版本默认提供的是httpd-2.2版本的rpm包
CentOS7系列的版本默认提供的是httpd-2.4版本的rpm包
  1. httpd有很多特性,下面就分别来说说httpd-2.2版本和httpd-2.4版本各自的特性。
版本特性
2.2事先创建进程 按需维持适当的进程 模块化设计,核心比较小,各种功能通过模块添加(包括PHP),支持运行时配置,支持单独编译模块 支持多种方式的虚拟主机配置,如基于ip的虚拟主机,基于端口的虚拟主机,基于域名的虚拟主机等 支持https协议(通过mod_ssl模块实现) 支持用户认证 支持基于IP或域名的ACL访问控制机制 支持每目录的访问控制(用户访问默认主页时不需要提供用户名和密码,但是用户访问某特定目录时需要提供用户名和密码) 支持URL重写 支持MPM(Multi Path Modules,多处理模块)。用于定义httpd的工作模型(单进程、单进程多线程、多进程、多进程单线程、多进程多线程)
2.4httpd-2.4的新特性: MPM支持运行DSO机制(Dynamic Share Object,模块的动态装/卸载机制),以模块形式按需加载 支持event MPM,event MPM模块生产环境可用 支持异步读写 支持每个模块及每个目录分别使用各自的日志级别 每个请求相关的专业配置,使用来配置 增强版的表达式分析器 支持毫秒级的keepalive timeout 基于FQDN的虚拟主机不再需要NameVirtualHost指令 支持用户自定义变量 支持新的指令(AllowOverrideList) 降低对内存的消耗
  1. 共有模块
工作模型工作方式
prefork多进程模型,预先生成进程,一个请求用一个进程响应 一个主进程负责生成n个子进程,子进程也称为工作进程 每个子进程处理一个用户请求,即使没有用户请求,也会预先生成多个空闲进程,随时等待请求到达,最大不会超过1024个
worker基于线程工作,一个请求用一个线程响应(启动多个进程,每个进程生成多个线程)
event基于事件的驱动,一个进程处理多个请求
  1. httpd-2.4在之前的版本基础上新增了几大模块
模块功能
mod_proxy_fcgi反向代理时支持apache服务器后端协议的模块
mod_ratelimit提供速率限制功能的模块
mod_remoteip基于ip的访问控制机制被改变,不再支持使用Order,Deny,Allow来做基于IP的访问控制

1.2.3 httpd安装

Apache是RHEL5、6、7系统中默认的Web服务程序。如果未安装或想用较新版本,可以通过如下:

1. yum 安装

]# yum -y install httpd

2. 编译安装

https://downloads.apache.org/httpd/Announcement2.4.html说明:

This release requires the Apache Portable Runtime (APR), minimum version 1.5.x, and APR-Util, minimum version 1.5.x. Some features may require the 1.6.x version of both APR and APR-Util. The APR libraries must be upgraded for all features of httpd to operate correctly.

编译安装httpd依赖于apr,apr-util,httpd三个包
https://httpd.apache.org/download.cgi
https://apr.apache.org/download.cgi

  1. 准备工作
    安装开发工具及创建用户
[root@localhost ~]# yum groups mark install "Development Tools"   //安装开发工具包
[root@localhost ~]# useradd -r -M -s /sbin/nologin apache    //创建系统用户
[root@localhost ~]# id apache
uid=995(apache) gid=992(apache) groups=992(apache)
[root@localhost ~]# yum -y install openssl-devel pcre-devel expat-devel libtool  make   //安装依赖包
  1. 下载并解压安装包及依赖包
    ① 下载后上传到服务器
[root@k8s-node-02 share]# ll
total 11180
drwxr-xr-x 28  501 games    4096 Jan 31 15:56 apr-1.7.2
-rw-r--r--  1 root root  1115676 Feb 20 05:19 apr-1.7.2.tar.gz
drwxr-xr-x 20  501 games    4096 Jan 31 15:57 apr-util-1.6.3
-rw-r--r--  1 root root   556623 Feb 20 05:19 apr-util-1.6.3.tar.gz
drwxr-xr-x 12  501 games    4096 Jan 10 08:38 httpd-2.4.55
-rw-r--r--  1 root root  9758888 Feb 20 04:42 httpd-2.4.55.tar.gz

② 或直接下载到服务器,取决于网速或服务器网络状态

[root@localhost ~]# dnf -y install wget
[root@localhost ~]# wget https://downloads.apache.org/apr/apr-1.7.0.tar.gz
[root@localhost ~]# wget https://downloads.apache.org/apr/apr-util-1.6.1.tar.gz
[root@localhost ~]# wget https://downloads.apache.org/httpd/httpd-2.4.53.tar.gz
  1. 安装apr
[root@k8s-node-02 apr-1.7.2]# ./configure --prefix=/usr/local/apr
...
config.status: executing libtool commands
rm: cannot remove 'libtoolT': No such file or directory
config.status: executing default commands
config.status: include/apr.h is unchanged
config.status: include/arch/unix/apr_private.h is unchanged
[root@k8s-node-02 apr-1.7.2]# make
[root@k8s-node-02 apr-1.7.2]# make install

如果出现上面的报错,即未找到某文件,无法删除,可以如下修改,不删也不影响

[root@k8s-node-02 apr-1.7.2]# cat configure|grep '#    $RM'
#    $RM "$cfgfile"
  1. 安装apr-util
[root@localhost ~]# cd apr-util-1.6.1
[root@localhost apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@localhost apr-util-1.6.1]# make
[root@localhost apr-util-1.6.1]# make install
  1. 安装httpd
]# ./configure --prefix=/usr/local/apache \
--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
]# make
]# make install
  1. 设置环境变量
[root@k8s-node-02 httpd-2.4.55]# cd /usr/local/apache/
[root@k8s-node-02 apache]# ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  logs  man  manual  modules
[root@k8s-node-02 apache]# echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/apache.sh
[root@k8s-node-02 apache]# source /etc/profile.d/apache.sh
[root@k8s-node-02 apache]# which httpd
/usr/local/apache/bin/httpd
[root@k8s-node-02 apache]# which apachectl
/usr/local/apache/bin/apachectl
  1. 配置映射关系
[root@localhost ~]# ln -s /usr/local/apache/include /usr/include/apache   //软连接
[root@k8s-node-02 apache]# ll /usr/include/apache -d
lrwxrwxrwx 1 root root 25 Feb 20 05:55 /usr/include/apache -> /usr/local/apache/include
  1. 配置man文档
[root@k8s-node-02 apache]# grep apache /etc/man_db.conf
MANDATORY_MANPATH                       /usr/local/apache/man
  1. 关闭防火墙
[root@k8s-node-02 apache]# systemctl disable --now firewalld
[root@k8s-node-02 apache]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
  1. 关闭selinux
[root@localhost ~]# setenforce 0    //当前生效,当前关闭
[root@localhost ~]# getenforce
Permissive
[root@localhost ~]# vim /etc/selinux/config    //重启生效
SELINUX=disabled   //修改
  1. 检查默认端口80使用情况
[root@k8s-node-02 apache]# ss -nltp|grep 80
LISTEN     0      128          *:56805                    *:*                   users:(("rpc.statd",pid=123352,fd=9))
  1. 启动httpd
[root@k8s-node-02 apache]# httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe09:d272%ens33. Set the 'ServerName' directive globally to suppress this message
[root@k8s-node-02 apache]# ss -nltp|grep 80
LISTEN     0      128          *:56805                    *:*                   users:(("rpc.statd",pid=123352,fd=9))
LISTEN     0      128       [::]:80                    [::]:*                   users:(("httpd",pid=30152,fd=4),("httpd",pid=30151,fd=4),("httpd",pid=30150,fd=4),("httpd",pid=30149,fd=4),("httpd",pid=30148,fd=4),("httpd",pid=30147,fd=4))
[root@k8s-node-02 apache]# ps -ef|grep httpd
root      30147      1  0 06:03 ?        00:00:00 httpd
daemon    30148  30147  0 06:03 ?        00:00:00 httpd
daemon    30149  30147  0 06:03 ?        00:00:00 httpd
daemon    30150  30147  0 06:03 ?        00:00:00 httpd
daemon    30151  30147  0 06:03 ?        00:00:00 httpd
daemon    30152  30147  0 06:03 ?        00:00:00 httpd

解决:AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using fe80::20c:29ff:fe09:d272%ens33. Set the ‘ServerName’ directive globally to suppress this message
修改:ServerName

[root@k8s-node-02 conf]# grep '^Server' httpd.conf
ServerRoot "/usr/local/apache"
ServerAdmin you@example.com
ServerName localhost:80
  1. 显示页面
    使用浏览器访问 http://192.168.71.253,个人服务器IP,即可显示apache页面信息
    在这里插入图片描述
    自定义显示页面
[root@k8s-node-02 htdocs]# echo 'Hello apache!'> index.html
[root@k8s-node-02 htdocs]# pwd
/usr/local/apache/htdocs

在这里插入图片描述

1.3 通过systemctl管理httpd

1.3.1 配置文件原因

systemctl管理服务依靠的是/lib/systemd/system配置文件下有对应服务以.service结尾的文件,yum安装或者rpm安装服务时该文件是程序员已经写好了,但是编译安装没有此文件所以需要我们手写才可以通过systemctl来管理服务

1.3.2 为httpd添加.service文件

在/lib/systemd/system中添加httpd.service

[root@k8s-node-02 system]# cat httpd.service
[Unit]
Description=httpd web
[Service]
PIDFile=/usr/local/apache/logs/httpd.pid
ExecStart=/usr/local/apache/bin/httpd
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target

模板:

[Unit]  #软件描述
Description=httpd web  #服务的描述
[Service] #指定如何启动此程序
PIDFile=/opt/httpd/logs/httpd.pid  #pid号的配置文件存放位置一般存放在安装服务的logs中,以上httpd服务编译安装在/opt/httpd中,所以路径更改为/opt/httpd/logs/httpd.pid,httpd.pid文件会自动创建
ExecStart=/opt/httpd/bin/httpd  #绝对路径或脚本启动,上述编译安装的服务开启绝对路径为/opt/httpd/bin/httpd    httpd为bin下的用于systemctl启动的服务同名文件
ExecReload=/bin/kill -s HUP $MAINPID #热加载
ExecStop=/bin/kill -s TERM $MAINPID #杀死进程
[Install]
WantedBy=multi-user.target #在图形界面开启

1.3.3 通过systemctl管理httpd

[root@k8s-node-02 system]# systemctl daemon-reload
[root@k8s-node-02 system]# apachectl stop
[root@k8s-node-02 system]# systemctl start httpd
[root@k8s-node-02 system]# systemctl status httpd
● httpd.service - httpd web
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2023-02-20 10:14:03 EST; 6s ago
 Main PID: 113491 (httpd)
    Tasks: 6
   Memory: 1.7M
   CGroup: /system.slice/httpd.service
           ├─113491 /usr/local/apache/bin/httpd
           ├─113492 /usr/local/apache/bin/httpd
           ├─113493 /usr/local/apache/bin/httpd
           ├─113494 /usr/local/apache/bin/httpd
           ├─113495 /usr/local/apache/bin/httpd
           └─113496 /usr/local/apache/bin/httpd

Feb 20 10:14:03 k8s-node-02 systemd[1]: Started httpd web.
[root@k8s-node-02 system]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

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

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

相关文章

析构函数、拷贝构造

1、析构函数析构函数的定义方式函数名和类名相同,在类名前加~,没有返回值类型,没有函数形参(不能重载)当对象生命周期结束的时候,系统会自动调用析构函数先调用析构函数,再释放对象的空间析构函…

C#中多态、抽象类、虚方法

多态、重装、重写 •多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。抽象类、虚函数、接口三种方法实现的可以是多态性。•重载(overload):对象中同名函数&…

【Galois工具开发之路】给你的JVM安装一个插件~

什么是DCEVM Dcevm(DynamicCode Evolution Virtual Machine)是Java Hostspot的一个扩展插件,属于开源性工具,非JDK官方提供,它允许你在运行环境下修改加载的类文件。当前虚拟机只允许修改方法体(Method&am…

【Python学习笔记】43.Python3 JSON 数据解析及日期和时间

前言 本章介绍python的JSON及日期和时间。 Python3 JSON 数据解析 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。 Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数: json.dumps(): 对数据进行编码。json…

苏宁基于 AI 和图技术的智能监控体系的建设

汤泳,苏宁科技集团智能监控与运维产研中心总监,中国商业联合会智库顾问,致力于海量数据分析、基于深度学习的时间序列分析与预测、自然语言处理和图神经网络的研究。在应用实践中,通过基于 AI 的方式不断完善智能监控体系的建设&a…

C# 业务单据号生成器(定义编号规则、自动获取编号)

系列文章 C#底层库–数据库访问帮助类(MySQL版) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/126886379 C#底层库–JSON帮助类_详细(序列化、反序列化、list、datatable) 本文链接:htt…

用友Java架构师面试

自我介绍。项目中的一些优化。Q:kafka消息的时序性怎么保证?A1: 核心意思就是要实现局部有序,需要有序的消息应设置相同的key,这样通过哈希取模后会分到同一个partition。又因为一个partition只能被一个consumer组中的…

智慧校园信息化管理平台技术方案

1.2总体架构设计 智慧校园平台是以学校现有网络为基础,以服务于全校师生的教学、科研、生活为目的,建立在学校数据中心平台之上,涵盖了学校的学校管理、学生管理、教学管理、班级管理、家校共育、教务管理等全方位的管理信息平台与信息服务平…

阿里P8经验分享 —— 送给想要学习自动化测试的同学6条建议

基于我的经验,送给想要学习自动化测试的同学6条建议 第一条建议:先学习编程语言,然后再接触自动化工具。 语言选择上Java或者Python都是可以的,可以先从Python入手,之后再开始Java。在学习语言的过程中,一…

playwright python环境运行报错 ImportError: DLL load failed

网上建议网上好多文章介绍playwright的环境搭建,用以下两条语句即可完成pip install playwrightplaywright install安装完毕后,尝试执行一段经典的python demofrom playwright.sync_api import sync_playwright with sync_playwright() as p: browser p…

seo优化案例截图

点击进入》》三支一扶课程聚合页面 百度统计数据 流量稳步增长, 2022年9月比2021年9月 同期增长 约30%。

SpringCloud - Nacos

目录 服务注册到Nacos 服务分级存储模型 NacosRule负载均衡 服务实例的权重设置 环境隔离 Nacos与Eureka的对比 添加Nacos配置 微服务配置拉取 配置热更新 多环境配置共享 服务注册到Nacos 1.在父工程引入SpringCloudAlibaba的依赖 2.注释掉order-service和user-ser…

@KafkaListener 详解及消息消费启停控制

参考:Kafka参数一、KafkaListener注解KafkaListener(id "11111", groupId "demo-group",topics Constants.TOPIC)public void listen(String msgData) {LOGGER.info("收到消息" msgData); } KafkaListener(id "22222"…

React系列之Redux

1 Redux概述 Redux 是 JavaScript 状态容器,提供可预测化的状态管理。Redux中文文档 Redux 和react没有必然关系,redux可以应用于各种框架,包括jquery,甚至js都可以使用redux,只不过redux和react更加搭配。redux也推…

javaee之git

一张图说明git 分支之间的操作 这个 框里面的linux命令都可以用 操作开始: 在master分支里面创建了一个hello.txt,并且放入了一些数据进去 这个去查一下日志 问题:当你放入了暂存区,你去查看日志会报错 一个分支这个指针head永…

Django框架之Django使用自带模板

Django使用自带模板 1 配置 在工程中创建模板目录templates。 在settings.py配置文件中修改TEMPLATES配置项的DIRS值: TEMPLATES [{BACKEND: django.template.backends.django.DjangoTemplates,DIRS: [os.path.join(BASE_DIR, templates)], # 此处修改APP_DIR…

vue-router 的基本用法

vue-router 的基本用法 1.什么是 vue-router vue-router 是 vue.js 官方给出的路由解决方案。它只能结合 vue 项目进行使用,能够轻松的管理 SPA 项目中组件的切换。 vue-router 的官方文档地址:https://router.vuejs.org/zh/ 2.vue-router 安装和配置的…

GIT分支管理策略

git基本操作git操作的前提条件:本地windows安装git学习idea中的插件使用idea的git基本操作:远程仓库remote更新fetch:git fetch拉取pull: git pull上传push: git push合并merge: git merge 合并分支本地提交commit:git commit分支branch: git branch 查看分支或者 切换分支上述…

SpringBoot整合Junit

创建项目 idea创建空项目Empty Project。项目中创建模块,选择SpringBoot Initialize快速构建SpringBoot项目。 依赖这里什么也不用选择。 pom文件中默认有两个依赖: spring-boot-starter springboot如果不导入任何依赖,默认的一个基础依赖。spring-…

5.3 线程安全问题解决方案

文章目录1.概述2.同步和异步3.synchronized同步关键字3.1 写法3.2 前提3.3 特点4.练习-改造售票案例-继承Thread4.1 代码实现4.2 注意事项5.练习-改造售票案例-实现Runnable接口5.1 代码实现5.2 注意事项6.练习-改造售票案例-使用线程池6.1 代码实现6.2 代码分析7.线程锁7.1 悲…