Apache 详解(在 Ubuntu 24 中安装和配置 Apache,超详细)

news/2026/1/18 11:04:53/文章来源:https://www.cnblogs.com/jeanwaljean/p/19497993

零散知识讲解

目录
  • 零散知识讲解
    • 站点配置和全局配置的区别
    • www-data 用户介绍
    • 什么是进程的上下文切换?
    • TCP 连接的三个阶段
      • 客户端和服务器通信的过程
      • 开启 AcceptFilter 和关闭 AcceptFilter的区别
  • 在 Ubuntu 24 中安装和配置 Apache
    • 安装 Apache
    • 为开发 Drupal 项目而配置 Apache
      • 解决 Apache 经常出现的连接延迟和超时问题
      • 开启 Apache 的简洁链接功能
      • 修改 Apache 的默认站点根目录
        • 补充知识
        • 配置过程
          • 第一步:修改 Apache 站点配置文件(指定新根目录)
          • 第二步:修改 huagai 的父目录的访问权限
          • 第三步:设置huagai目录及其子目录和文件的权限
          • 第四步:验证上述配置的语法是否正确
          • 第五步:检查 Apache 状态,看配置是否有误
          • 第六步:验证配置是否成功


站点配置和全局配置的区别

全局配置文件(例如:/etc/apache2/apache2.conf)。
站点配置文件(例如:/etc/apache2/sites-available/000-default.conf)。

二者的区别

  1. 全局配置是 Apache 的 "全局基准",管所有站点,核心参数不轻易动;
  2. 站点配置是单个站点的 "专属配置",管单个站点,灵活修改无副作用;
  3. 作用域和优先级是两者最核心的区别,站点配置可覆盖全局配置的局部规则,例如:当全局配置和站点配置中出现相同类型的配置项(比如都配置了/home/jean/personal/huagai的访问权限)时,站点配置的优先级高于全局配置。实际操作中,推荐优先修改站点配置(不污染全局规则,风险更低)。
  4. 实际运维中,遵循 "全局配置少改,站点配置按需改" 的原则,更安全、更易维护。

www-data 用户介绍

即使你已经设置了目标目录 /home/jean/personal/huagai 的权限,如果其父目录(如 /home/jean/personal 和 /home/jean)没有适当的权限,Apache 也无法访问最终的目标目录。 这是因为:Apache 使用用户 www-data 对网站进行访问,这个用户既不是/home/jean目录的所有者(所有者是jean),也不属于 jean 的用户组,而是属于其他用户,这个用户不具备访问父目录的权限。

额外补充: 所有对www-data的权限配置,都要针对o来设置,o是Other的简写;x是excute的简写,代表执行某个文件或进入某个目录的权限。

什么是进程的上下文切换?

  • 进程从运行状态切换到睡眠状态
  • 保存当前 CPU 寄存器、内存映射等
  • 恢复另一个进程的状态
  • 开销很大: 通常需要几千个 CPU 周期

TCP 连接的三个阶段

客户端和服务器通信的过程

客户端:SYN → SYN-ACK → ACK → 数据
服务器:监听 → 接受连接 → 读取数据

当客户端连接到服务器时:

  1. 三次握手(SYN, SYN-ACK, ACK)在内核中完成
  2. 连接进入服务器的 “等待接受队列”
  3. 服务器应用程序(如 Apache)需要接受这个连接
  4. 然后才能读取数据

开启 AcceptFilter 和关闭 AcceptFilter的区别

一、启用 AcceptFilter 时
AcceptFilter 默认是开启状态。在这种情况下:
在支持 AcceptFilter 的系统上(如 FreeBSD、Linux 的某些版本):内核会等待客户端发送数据后才将连接交给 Apache 进程,这样可以过滤掉大量的空连接、端口扫描、DDoS攻击连接。

工作原理:

  1. 客户端发送 SYN
  2. 内核完成三次握手
  3. 连接进入特殊队列(不是等待接受队列)
  4. 客户端发送第一个数据包(如 HTTP 请求的 "GET /")
  5. 内核收到数据后,将连接放入等待接受队列
  6. 这时 Apache 调用 accept() 才会收到这个连接

二、关闭 AcceptFilter 时
设置为 none 后,系统使用传统的 accept() 系统调用,工作原理是:

  1. 客户端发送 SYN(开始连接)
  2. 内核完成三次握手
  3. 连接进入等待队列
  4. Apache 调用 accept()
  5. 内核返回连接给 Apache
  6. Apache 调用 recv() 等待数据

使用传统的 accept() 系统调用的特点:

  • 立即接受:禁用内核级别的连接过滤,连接建立后立即交给 Apache。
  • 立即接受所有 TCP 连接,即使连接上没有数据。
  • 阻塞等待:如果没有连接,进程会休眠
  • 一对一处理:每个连接都需要单独的 accept() 调用

禁用 AcceptFilter(设置为 none)的好处:

  1. 立即接受所有连接。
  2. 兼容性最好
  3. 延迟最低

注意: 在 Windows 系统中,不支持 AcceptFilter,配置会被忽略。

在 Ubuntu 24 中安装和配置 Apache

安装 Apache

说明: 这个安装过程对于在Ubuntu 24 系统中安装Apache、在 Windows 系统上的WSL2中的Ubuntu 24系统中安装Apache,都适用。

  • 第一步:先更新软件仓库、升级软件模块。打开 Ubuntu 终端,更新软件源并升级现有包,确保系统处于最新状态:sudo apt update -y && sudo apt upgrade -y

  • 第二步:安装 Apache 服务器:sudo apt install apache2 -y

  • 第三步:查看安装的 Apache 的版本:apache2 -v

第四步:启动 Apache 服务:sudo systemctl start apache2

第五步:设置开机自动启动 Apache 服务:sudo systemctl enable apache2

第六步:验证 Apache 是否安装成功:

  • 方法一:在 Windows 浏览器中访问 http://localhost。
  • 方法二:通过检查Apache状态:sudo systemctl status apache2【若显示 active (running),则代表 Apache 已启动】

为开发 Drupal 项目而配置 Apache

解决 Apache 经常出现的连接延迟和超时问题

在 Ubuntu 中输入命令:sudo nano /etc/apache2/apache2.conf(Apache 的全局配置文件),在文件中添加如下参数:

	AcceptFilter https noneAcceptFilter http none
  • AcceptFilter 指令是什么?
    详见本文的“TCP 连接的三个阶段”部分,同时在此处进行简要介绍。
    • 用途: 配置操作系统内核如何处理新的网络连接
    • 目的: 提高服务器性能,减少进程上下文切换开销
    • 原理: 让内核在连接真正有数据到达时才唤醒 Apache 进程

开启 Apache 的简洁链接功能

说明:

  1. 对于 Drupal 开发来说,必须要开启 Apache 的 URL 重写模块,才能开启 Apache 的简洁链接功能。
  2. 默认情况下,Apache 没有开启该模块。可以通过命令 apache2ctl -M 或 apachectl -M,查看Apache当前已经加载的模块,看是否有rewrite_module 模块。

具体开启步骤:

  • 启用 rewrite_module 模块:sudo a2enmod rewrite【a2enmod是 Apache 2 enable module 的缩写】
  • 重启 Apache,激活新的配置:sudo systemctl restart apache2
  • 检查 Apache 配置是否有误:sudo apache2ctl configtest(语法正确的话会返回Syntax OK)
  • 给 Apache 启用简洁链接功能:在Ubuntu系统中,执行命令 sudo nano /etc/apache2/apache2.conf,把其中的 AllowOverride None 改为 AllowOverride All,如图:
  • 重启 Apache 使配置生效:sudo systemctl restart apache2

修改 Apache 的默认站点根目录

补充知识

  • Apache 的默认根目录是:/var/www/html
  • 修改目标:把 Apache 的默认根目录改为:/home/jean/personal/huagai

配置过程

第一步:修改 Apache 站点配置文件(指定新根目录)
  • 先备份原始的站点配置文件:sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/000-default.conf.bak

  • 用文本编辑器打开默认站点配置文件:sudo nano /etc/apache2/sites-available/000-default.conf

  • 找到 DocumentRoot 配置项,将其默认值(通常是/var/www/html)修改为你的目标目录:

    # 原配置# DocumentRoot /var/www/html# 新配置DocumentRoot /home/jean/personal/huagai
  • 找到或新建(若没有则手动添加)对应的 配置块,该配置块的作用是配置目录访问权限(允许 Apache 读取该目录):

    <Directory /home/jean/personal/huagai># 允许目录索引Options Indexes FollowSymLinks# 允许使用.htaccess文件AllowOverride All# 核心:授权所有客户端访问该目录(Apache 2.4+ 语法)Require all granted
    </Directory>
    
  • 保存并退出(在 nano 中按 Ctrl+O,回车,再按 Ctrl+X)。以上几步操作后的完整代码如下:

    <VirtualHost *:80>ServerAdmin webmaster@localhostDocumentRoot /home/jean/personal/huagai<Directory /home/jean/personal/huagai>Options Indexes FollowSymLinksAllowOverride AllRequire all granted</Directory>ErrorLog ${APACHE_LOG_DIR}/error.logCustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    
第二步:修改 huagai 的父目录的访问权限

Apache 进程默认以www-data用户(组)运行站点,而目标目录/home/jean/personal/huagai属于用户jean和用户组jean,需要赋予www-data足够的读取权限,或者将www-data加入到用户组jean中。在这步操作中,我们选择”将www-data加入到用户组jean中“。

方法一:把用户www-data加入到用户组jean中(推荐)

    sudo usermod -a -G jean www-data

方法二:赋予其他用户(也包括了www-data用户)进入目录的权限(不推荐)

  • 对必要的父目录设置合适的权限,允许 Apache 进入这些目录但不读取它们的内容:给 /home/jean/ 和 /home/jean/personal 目录的「其他用户(包含 www-data)」,新增「进入 / 搜索目录的权限」,让 Apache 能从/home/进入/home/jean/,再继续进入personal/,最终访问到huagai/。
    chmod o+x /home/jeanchmod o+x /home/jean/personal
第三步:设置huagai目录及其子目录和文件的权限

现在,www-data用户可以进入到 personal 目录了,但还无法操作 huagai 目录。下一步,以管理员权限,递归地将 /home/jean/personal/huagai 目录本身、以及该目录下的所有子目录和文件的所有者设置为 jean,所属用户组设置为 jean。
sudo chown -R jean:jean /home/jean/personal/huagai

  • 以管理员权限,递归地为 /home/jean/personal/huagai 目录及其所有子目录、文件设置权限:所有者和所属组拥有完整的读、写、执行权限,其他用户仅拥有读和执行权限,无写入权限。
    sudo chmod -R 775 /home/jean/personal/huagai

因为之前设置了 www-data 在用户组 jean 中,因此,www-data 现在可以操作(读、写、执行)huagai目录及其所有子目录、文件了。

第四步:验证上述配置的语法是否正确
  • 先验证配置语法是否正确(避免配置错误导致服务无法启动):sudo apache2ctl configtest,若输出 Syntax OK 则说明配置无误;若有报错,根据提示修正配置文件。
  • 重启 Apache 服务使配置生效:sudo systemctl restart apache2
第五步:检查 Apache 状态,看配置是否有误
    sudo systemctl status apache2sudo tail -f /var/log/apache2/error.log
第六步:验证配置是否成功

在浏览器中输入:http://localhost

补充说明

  • 若出现 403 Forbidden 错误,大概率是权限问题,优先检查目标目录及其上级目录的权限是否配置正确,以及www-data是否有访问权限。

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

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

相关文章

Invicti Standard v26.1.0 发布 - 企业级 Web 应用与 API 安全

Invicti Standard v26.1.0 for Windows - 企业级 Web 应用与 API 安全Invicti Standard v26.1.0 for Windows - 企业级 Web 应用与 API 安全 Invicti (formerly Netsparker) | Web Application and API Security for E…

4.4 虚拟人口型驱动:让静态图像开口说话的魔法

4.4 虚拟人口型驱动:让静态图像开口说话的魔法 引言 在前三节中,我们学习了虚拟人的视觉外观生成、扩散模型与ControlNet技术以及声音克隆技术。现在,我们来到了让虚拟人真正"活起来"的关键环节——口型驱动技术。这项技术能够让静态的虚拟人图像根据语音内容同…

leetcode 881. Boats to Save People 救生艇

Problem: 881. Boats to Save People 救生艇 解题过程 排序&#xff0c;然后查找可以配对的&#xff0c;而且右上界是不断缩小的&#xff0c;用到了状态数组 优化版本只需要求出可以配对的&#xff0c;然后总数减去配对数量 Code class Solution { public:int numRescueBoats…

5.2 多模态OCR架构:Donut、TrOCR、LayoutLMv3全面对比

5.2 多模态OCR架构:Donut、TrOCR、LayoutLMv3全面对比 引言 在上一节中,我们回顾了OCR技术的发展历程,从传统的模板匹配方法到现代的深度学习和生成式AI技术。随着多模态学习的兴起,OCR技术也迎来了新的发展机遇。现代多模态OCR架构不仅能够识别文本内容,还能理解文档的…

5.1 OCR技术进化史:从传统方法到生成式AI突破

5.1 OCR技术进化史:从传统方法到生成式AI突破 引言 光学字符识别(Optical Character Recognition, OCR)是人工智能领域的一个重要分支,它使得计算机能够从图像中识别和提取文本信息。从早期的模板匹配到现代的深度学习方法,OCR技术经历了数十年的发展和演进。 在本节中…

[ARC135D] Add to Square

对网格 \(A\)黑白染色,黑色位置正负取反。这样操作就变为,左上右下加 \(x\),右上左下减 \(x\)。记 \(sx_i=\sum_{j=1}^m A_{i,j}\),\(sy_j=\sum_{i=1}^n A_{i,j}\)。 容易发现,任意行列的和都与 \(A\) 相同的所有…

yaml在嵌入式软件开发中的作用

在嵌入式软件开发领域,高效、可靠和可维护的代码是项目的核心目标。随着嵌入式系统的复杂度日益增加,开发团队需要更灵活的工具来管理配置、自动化流程和优化跨团队协作。 YAML(YAML Aint Markup Language)作为一种…

2026年出国留学机构排行榜:五家优选全面对比 - 速递信息

——文章最新发布时间:2026年1月 一、推荐背景与评价体系 在出国留学需求持续增长的背景下,权威榜单已成为学生和家长选择留学机构的重要参考依据。全球名校申请门槛不断提高,申请流程日趋复杂,留学机构的综合实力与行…

通过mathtype将公式插入word中

通过mathtype将公式插入word中利用mathtype配合word进行公式编辑,可以提高文档撰写效率。具体过程如下: 1.下载mathtype 通过百度网盘进行下载:https://pan.baidu.com/s/1qZFDtIg9Qou4gUjUQ86-UQ?pwd=jgv5 提取码:…

SAM1gptans

下面我会按“整体思路 → 关键数据结构含义 → 每个函数在干什么 → 正确性为什么成立 → 复杂度怎么分析/哪里我也卡住”的顺序,把这段代码尽可能还原成一道可理解的算法。先给一个一句话的总体概括: 把所有旋转状态…

2026智能马桶深度评测:希箭马桶,家庭如厕健康新标准 - charlieruizvin

希箭智能马桶核心产品详细推荐作为智能坐便器国家标准起草单位、十大智能卫浴品牌,希箭凭借12年技术沉淀与4大生产基地的制造实力,推出多款覆盖不同需求的智能马桶,以下为核心产品深度解析:旗舰级健康之选:希箭S2…

瞧瞧别人家的接口重试,那叫一个优雅!

前言 记得五年前的一个深夜,某个电商平台的订单退款接口突发异常,因为银行系统网络抖动,退款请求连续失败。 原本技术团队只是想“好心重试几次”,结果开发小哥写的重试代码竟疯狂调用了银行的退款接口 82次! 最终…

完整教程:算法王冠上的明珠——动态规划之路径问题(第一篇)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

论文查重前必备的5款AIGC检测工具盘点 - 还在做实验的师兄

2026年几乎所有高校都要求进行AIGC检测,AI率超过20%就会被标记。提交学校前一定要自己先测一下,但不同平台算法差异大,最好用学校指定的同款。这篇文章盘点5款主流AIGC检测工具,附带高效的降AI方案。论文查重前必备…

python学习笔记-并发和异步IO

一、并发请求实现 1、多线程实现并发from concurrent.futures import ThreadPoolExecutor import requests import timedef task(url):response=requests.get(url)print(url,response)pool=ThreadPoolExecutor(7)url_l…

2026年胶囊充填机优质生产商Top10,天宏机械实力入选 - 工业品牌热点

在制药装备行业快速发展的当下,一款高效合规的胶囊充填设备是药企提升产能、降低风险的核心利器。面对市场上参差不齐的供应商,如何找到既能满足GMP标准、又能适配不同生产规模的胶囊充填机优质生产商?以下结合行业…

从零开始:用 Android Studio 开发一个 AI 智能日记 App - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

聊聊压缩空气检测资深企业,杭州华量检测技术实力和口碑咋样? - 工业品牌热点

问题1:压缩空气检测对企业来说有什么实际意义?为什么不能随便找家公司做? 压缩空气检测看似是幕后工作,实则是生产安全与产品质量的隐形防线。对于食品、医药、电子等行业而言,压缩空气中的油分、水分、微生物或固…

EtherCAT总线通信学习资料:STM32 MCU AX58100 ESC从站实现方案及一手资源

EtherCAT总线通信学习资料&#xff0c;一手资料。 提供基于stm32 mcuAX58100 ESC实现从站的具体方案&#xff0c;有完整的工程文件&#xff0c;提供源码以及工程配置、程序修改的视频&#xff0c;工程在开发板上已测。 提供不同版本工具从站工程。 支持主站下发固件程序&#x…

详细介绍:算法王冠上的明珠——动态规划之斐波那契数列问题(第二篇)

详细介绍:算法王冠上的明珠——动态规划之斐波那契数列问题(第二篇)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &q…