httpd 简介

httpd(Apache HTTP Server)是一款历史悠久的开源 Web 服务器软件,由 Apache 软件基金会开发和维护。自 1995 年首次发布以来,Apache 一直是 Web 服务器领域的领导者,以其稳定性、安全性和灵活性著称。根据 W3Techs 的最新统计,httpd 支持着全球超过 40%的网站运行,特别是在企业级应用中占据重要地位。

httpd 的主要特点包括:

  • 模块化架构:通过动态加载模块扩展功能
  • 支持多种编程语言:如 PHP、Python、Perl 等
  • 丰富的认证机制:包括基本认证、摘要认证等
  • 强大的 URL 重写功能:通过 mod_rewrite 模块实现
  • 虚拟主机支持:可在一台服务器上托管多个网站

一、环境准备

1. 系统要求

以 CentOS 7/RHEL 7 为例进行说明,建议系统满足以下最低配置:

  • CPU:1 核以上
  • 内存:1GB 以上
  • 磁盘空间:10GB 以上
  • 网络:稳定的互联网连接

2. 系统检查

在开始安装前,建议先检查系统状态:

# 检查系统版本
cat /etc/redhat-release# 检查内核版本
uname -r# 检查磁盘空间
df -h# 检查内存
free -m

3. 更新系统

建议使用新安装的系统环境,确保干净无冲突。在安装前先更新系统:

# 更新系统软件包
sudo yum update -y# 安装常用工具
sudo yum install -y wget vim net-tools

4. 防火墙配置

确保防火墙允许 HTTP(80) 和 HTTPS(443) 端口:

# 检查防火墙状态
sudo systemctl status firewalld# 开放端口
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

5. SELinux 配置

如果系统启用了 SELinux,需要进行适当配置:

# 检查 SELinux 状态
getenforce# 临时关闭(如需)
sudo setenforce 0# 永久关闭(如需)
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

二、安装 httpd

# 安装httpd主程序
sudo yum install -y httpd# 验证安装版本
httpd -v# 启动服务并设置开机自启
sudo systemctl start httpd
sudo systemctl enable httpd# 检查服务状态(应显示active/running)
sudo systemctl status httpd# 查看监听端口(默认80)
sudo netstat -tulnp | grep httpd

三、配置防火墙

现代 Linux 系统通常使用 firewalld 作为防火墙管理工具。

# 查看防火墙状态
sudo firewall-cmd --state# 永久开放HTTP(80)和HTTPS(443)服务
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https# 如果需要开放自定义端口(如8080)
sudo firewall-cmd --permanent --add-port=8080/tcp# 重新加载防火墙配置
sudo firewall-cmd --reload# 查看当前开放的端口和服务
sudo firewall-cmd --list-all

四、配置文件结构

httpd 采用模块化设计,主要文件和目录结构如下:

/etc/httpd/
├── conf/                  # 主配置目录
│   ├── httpd.conf         # 主配置文件
│   └── magic              # 文件类型识别
├── conf.d/                # 附加配置文件目录
│   ├── autoindex.conf     # 目录列表配置
│   ├── userdir.conf       # 用户目录配置
│   └── welcome.conf       # 默认欢迎页
├── conf.modules.d/        # 模块配置文件
├── logs -> ../../var/log/httpd  # 日志目录
├── modules/               # 模块文件
├── run/                   # PID文件
└── state/                 # 状态文件/var/www/html/             # 默认网站根目录
/var/log/httpd/            # 日志目录(access_log, error_log)

五、基础配置详解

通过编辑主配置文件进行基本设置:

sudo vim /etc/httpd/conf/httpd.conf

常见配置项说明:

# 全局配置
ServerRoot "/etc/httpd"       # 服务器根目录
Listen 80                     # 监听端口
User apache                   # 运行用户
Group apache                  # 运行组
ServerAdmin webmaster@example.com # 管理员邮箱# 主服务器配置
ServerName www.example.com:80 # 服务器域名
DocumentRoot "/var/www/html"  # 网站根目录
ErrorLog "logs/error_log"     # 错误日志路径# 目录权限设置
<Directory "/var/www/html">Options Indexes FollowSymLinks  # 允许目录列表和符号链接AllowOverride None        # 是否允许.htaccess覆盖Require all granted       # 访问控制
</Directory># 日志格式定义
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

六、虚拟主机配置

虚拟主机允许在单台服务器上运行多个网站。

1.创建网站目录结构:

sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html
sudo chown -R apache:apache /var/www/example.com
sudo chown -R apache:apache /var/www/test.com

2.创建虚拟主机配置文件:

sudo vim /etc/httpd/conf.d/vhosts.conf

示例配置:

# 第一个虚拟主机
<VirtualHost *:80>ServerAdmin admin@example.comServerName example.comServerAlias www.example.comDocumentRoot /var/www/example.com/public_htmlErrorLog /var/log/httpd/example.com-error.logCustomLog /var/log/httpd/example.com-access.log combined<Directory "/var/www/example.com/public_html">Options -Indexes +FollowSymLinksAllowOverride AllRequire all granted</Directory># 重定向非www到wwwRewriteEngine OnRewriteCond %{HTTP_HOST} ^example\.com [NC]RewriteRule ^(.*)$ http://www.example.com$1 [L,R=301]
</VirtualHost># 第二个虚拟主机
<VirtualHost *:80>ServerName test.comDocumentRoot /var/www/test.com/public_html...
</VirtualHost>

七、安全加固配置

1.隐藏服务器信息:

# 在httpd.conf中添加
ServerTokens Prod       # 仅显示Apache
ServerSignature Off     # 关闭页脚签名
TraceEnable Off         # 禁用TRACE方法

2.限制敏感目录访问:

<DirectoryMatch "^/.*/\.(svn|git|ht)/">Require all denied
</DirectoryMatch><Files ".ht*">Require all denied
</Files>

3.禁用不必要的HTTP方法:

<Location "/"><LimitExcept GET POST HEAD>Deny from all</LimitExcept>
</Location>

八、SSL/TLS 配置(启用 HTTPS)

1.安装 SSL 模块:

sudo yum install -y mod_ssl openssl

2.生成证书(生产环境建议使用 Let's Encrypt):

# 创建证书目录
sudo mkdir /etc/httpd/ssl
sudo chmod 700 /etc/httpd/ssl# 生成自签名证书(测试用)
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \-keyout /etc/httpd/ssl/server.key \-out /etc/httpd/ssl/server.crt \-subj "/C=CN/ST=Beijing/L=Beijing/O=Example Inc/CN=example.com"

3.配置 HTTPS 虚拟主机:

<VirtualHost *:443>ServerName example.comDocumentRoot "/var/www/example.com/public_html"SSLEngine onSSLCertificateFile /etc/httpd/ssl/server.crtSSLCertificateKeyFile /etc/httpd/ssl/server.key# 强制HTTP跳转到HTTPSRewriteEngine OnRewriteCond %{HTTPS} offRewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]# 启用HSTSHeader always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
</VirtualHost>

九、性能优化配置

1.调整 MPM 模块(多处理模块):

sudo vim /etc/httpd/conf.modules.d/00-mpm.conf

选择事件驱动模式(适合高并发):

LoadModule mpm_event_module modules/mod_mpm_event.so

相关参数调整:

<IfModule mpm_event_module>StartServers             3MinSpareThreads         75MaxSpareThreads        250ThreadsPerChild         25MaxRequestWorkers      400MaxConnectionsPerChild   0
</IfModule>

2.启用内容压缩:

LoadModule deflate_module modules/mod_deflate.so<IfModule mod_deflate.c>AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript application/javascriptDeflateCompressionLevel 6SetOutputFilter DEFLATE
</IfModule>

3.启用缓存控制:

LoadModule expires_module modules/mod_expires.so<IfModule mod_expires.c>ExpiresActive OnExpiresByType image/jpg "access plus 1 month"ExpiresByType text/css "access plus 1 week"ExpiresDefault "access plus 2 days"
</IfModule>

十、测试与验证

1.创建测试页面:

sudo bash -c 'cat > /var/www/html/index.html <<EOF
<!DOCTYPE html>
<html>
<head><title>Apache Test Page</title><meta charset="UTF-8">
</head>
<body><h1>Apache HTTP Server Works!</h1><p>Server time: <?php echo date("Y-m-d H:i:s"); ?></p>
</body>
</html>
EOF'

2.检查配置文件语法:

sudo httpd -t

3.重新加载配置:

sudo systemctl reload httpd
# 或完全重启
sudo systemctl restart httpd

4.访问测试:

  • 本地测试:curl http://localhost
  • 远程访问:浏览器输入服务器IP或域名

十一、故障排除指南

1.常见问题排查命令:

# 查看错误日志
sudo tail -50 /var/log/httpd/error_log# 查看访问日志
sudo tail -f /var/log/httpd/access_log# 测试端口连通性
telnet your-server-ip 80
nc -zv your-server-ip 80# SELinux相关检查
sudo ausearch -m avc -ts recent  # 查看安全事件
sudo sealert -a /var/log/audit/audit.log  # 分析SELinux问题

2.SELinux 配置(生产环境建议保持开启):

# 临时设置
sudo setenforce 0   # 宽松模式
sudo setenforce 1   # 强制模式# 永久设置(编辑/etc/selinux/config)
SELINUX=enforcing  # 强制模式
SELINUX=permissive # 仅记录不阻止
SELINUX=disabled   # 完全禁用# 调整文件上下文标签
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
sudo restorecon -Rv /var/www/html

十二、进阶配置选项

1.URL 重写(mod_rewrite):

LoadModule rewrite_module modules/mod_rewrite.so<Directory "/var/www/html">RewriteEngine On# 示例1:重定向旧URLRewriteRule ^oldpage\.html$ newpage.html [R=301,L]# 示例2:隐藏.php扩展名RewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME}\.php -fRewriteRule ^(.*)$ $1.php [L]
</Directory>

2.反向代理配置:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so<Location "/app/">ProxyPass http://localhost:8080/ProxyPassReverse http://localhost:8080/
</Location>

3.HTTP/2 支持(需要 httpd 2.4.17+):

sudo yum install -y mod_http2

配置示例:

LoadModule http2_module modules/mod_http2.soProtocols h2 http/1.1<VirtualHost *:443>...Protocols h2 http/1.1H2Direct on
</VirtualHost>

4.日志分析工具集成:

# 安装GoAccess日志分析工具
sudo yum install -y goaccess# 生成HTML报告
goaccess /var/log/httpd/access_log -a -o /var/www/html/report.html

十三、维护与管理

1.日常维护命令:

# 检查配置更改
sudo apachectl configtest# 优雅重启(不中断连接)
sudo apachectl graceful# 查看已加载模块
sudo apachectl -M# 查看完整配置
sudo apachectl -S

2.日志轮转配置:

sudo vim /etc/logrotate.d/httpd

示例配置:

/var/log/httpd/*log {dailymissingokrotate 30compressdelaycompressnotifemptysharedscriptspostrotate/bin/systemctl reload httpd > /dev/null 2>/dev/null || trueendscript
}

3.监控设置:

# 安装mod_status用于服务器状态监控
sudo yum install -y mod_status

配置示例:

<Location "/server-status">SetHandler server-statusRequire ip 192.168.1.0/24  # 限制访问IP
</Location>

十四、备份与恢复

1.重要文件备份:

# 备份配置文件
sudo tar czvf httpd_conf_backup.tar.gz /etc/httpd/# 备份网站数据
sudo tar czvf web_content_backup.tar.gz /var/www/# 备份SSL证书
sudo tar czvf ssl_certs_backup.tar.gz /etc/httpd/ssl/

2.恢复步骤:

# 停止服务
sudo systemctl stop httpd# 恢复配置
sudo tar xzvf httpd_conf_backup.tar.gz -C /# 恢复网站内容
sudo tar xzvf web_content_backup.tar.gz -C /# 恢复证书
sudo tar xzvf ssl_certs_backup.tar.gz -C /# 重启服务
sudo systemctl start httpd

通过以上完整配置,您已经成功部署了一个功能全面、安全可靠的 Apache HTTP Server。根据实际业务需求,可以进一步调整和优化各项参数。

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

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

相关文章

信号处理学习——文献精读与code复现之TFN——嵌入时频变换的可解释神经网络(下)

书接上文: 信号处理学习——文献精读与code复现之TFN——嵌入时频变换的可解释神经网络&#xff08;上&#xff09;-CSDN博客 接下来是重要的代码复现&#xff01;&#xff01;&#xff01;GitHub - ChenQian0618/TFN: this is the open code of paper entitled "TFN: A…

线上故障排查:签单合同提交报错分析-对接e签宝

在企业管理系统中&#xff0c;合同生成与签署环节至关重要&#xff0c;尤其是在使用第三方平台进行电子签署时。本文将通过实际的报错信息&#xff0c;分析如何进行线上故障排查&#xff0c;解决合同生成过程中出现的问题。 #### 1. 错误描述 在尝试生成合同并提交至电子签署…

知攻善防靶机 Linux easy溯源

知攻善防 【护网训练-Linux】应急响应靶场-Easy溯源 小张是个刚入门的程序猿&#xff0c;在公司开发产品的时候突然被叫去应急&#xff0c;小张心想"早知道简历上不写会应急了"&#xff0c;于是call了运维小王的电话&#xff0c;小王说"你面试的时候不是说会应急…

原神八分屏角色展示页面(纯前端html,学习交流)

原神八分屏角色展示页面 - 一个精美的前端交互项目 项目简介 这是一个基于原神游戏角色制作的八分屏展示页面&#xff0c;采用纯前端技术实现&#xff0c;包含了丰富的动画效果、音频交互和视觉设计。项目展示了一些热门原神角色&#xff0c;每个角色都有独立的介绍页面和专属…

华为认证二选一:物联网 VS 人工智能,你的赛道在哪里?

一篇不讲情怀只讲干货的科普指南 一、华为物联网 & 人工智能到底在搞什么&#xff1f; 华为物联网&#xff08;IoT&#xff09; 的核心是 “万物互联”。 通过传感器、通信技术&#xff08;如NB-IoT/5G&#xff09;、云计算平台&#xff08;如OceanConnect&#xff09;&…

CloudLens for PolarDB:解锁数据库性能优化与智能运维的终极指南

随着企业数据规模的爆炸式增长,数据库性能管理已成为技术团队的关键挑战。本文深入探讨如何利用CloudLens for PolarDB实现高级监控、智能诊断和自动化运维,帮助您构建一个自我修复、高效运行的数据库环境。 引言:数据库监控的演进 在云原生时代,传统的数据库监控方式已不…

MySQL中TINYINT/INT/BIGINT的典型应用场景及实例

以下是MySQL中TINYINT/INT/BIGINT的典型应用场景及实例说明&#xff1a; 一、TINYINT&#xff08;1字节&#xff09; 1.状态标识 -- 用户激活状态&#xff08;0未激活/1已激活&#xff09; ALTER TABLE users ADD is_active TINYINT(1) DEFAULT 0; 适用于布尔值存储和状态码…

YOLOv13:最新的YOLO目标检测算法

[2506.17733] YOLOv13: Real-Time Object Detection with Hypergraph-Enhanced Adaptive Visual Perception Github: https://github.com/iMoonLab/yolov13 YOLOv13&#xff1a;利用超图增强型自适应视觉感知进行实时物体检测 主要的创新点提出了HyperACE机制、FullPAD范式、轻…

【深入浅出:计算流体力学(CFD)基础与核心原理--从NS方程到工业仿真实践】

关键词&#xff1a;#CFD、#Navier-Stokes方程、#有限体积法、#湍流模型、#网格收敛性、#工业仿真验证 一、CFD是什么&#xff1f;为何重要&#xff1f; 计算流体力学&#xff08;Computational Fluid Dynamics, CFD&#xff09; 是通过数值方法求解流体流动控制方程&#xff0…

qt常用控件--04

文章目录 qt常用控件labelLCD NumberProgressBar结语 很高兴和大家见面&#xff0c;给生活加点impetus&#xff01;&#xff01;开启今天的编程之路&#xff01;&#xff01; 今天我们进一步c11中常见的新增表达 作者&#xff1a;٩( ‘ω’ )و260 我的专栏&#xff1a;qt&am…

Redmine:一款基于Web的开源项目管理软件

Redmine 是一款基于 Ruby on Rails 框架开发的开源、跨平台、基于 Web 的项目管理、问题跟踪和文档协作软件。 Redmine 官方网站自身就是基于它构建的一个 Web 应用。 功能特性 Redmine 的主要特点和功能包括&#xff1a; 多项目管理&#xff1a; Redmine 可以同时管理多个项…

FPGA FMC 接口

1 FMC 介绍 FMC 接口即 FPGA Mezzanine Card 接口,中文名为 FPGA 中间层板卡接口。以下是对它的详细介绍: 标准起源:2008 年 7 月,美国国家标准协会(ANSI)批准和发布了 VITA 57 FMC 标准。该标准由从 FPGA 供应商到最终用户的公司联盟开发,旨在为位于基板(载卡)上的 …

C++中std::atomic_bool详解和实战示例

std::atomic_bool 是 C 标准库中提供的一种 原子类型&#xff0c;用于在多线程环境下对布尔值进行 线程安全的读写操作&#xff0c;避免使用 std::mutex 带来的性能开销。 1. 基本作用 在多线程环境中&#xff0c;多个线程同时访问一个 bool 类型变量可能会出现 竞态条件&…

深度学习之分类手写数字的网络

面临的问题 定义神经⽹络后&#xff0c;我们回到⼿写识别上来。我们可以把识别⼿写数字问题分成两个⼦问题&#xff1a; 把包含许多数字的图像分成⼀系列单独的图像&#xff0c;每个包含单个数字&#xff1b; 也就是把图像 &#xff0c;分成6个单独的图像 分类单独的数字 我们将…

nginx基本使用 linux(mac下的)

目录结构 编译后会有&#xff1a;conf html logs sbin 四个文件 &#xff08;其他两个是之前下载的安装包&#xff09; conf&#xff1a;配置文件html&#xff1a;页面资源logs&#xff1a;日志sbin&#xff1a;启动文件&#xff0c;nginx主程序 运行后多了文件&#xff1a;&l…

基于大众点评的重庆火锅在线评论数据挖掘分析(情感分析、主题分析、EDA探索性数据分析)

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍数据采集数据预处理EDA探索性数据分析关键词提取算法情感分析LDA主题分析总结每文一语 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍 本…

鸿蒙系统(HarmonyOS)应用开发之经典蓝色风格登录页布局、图文验证码

一、项目概述 本项目是一款基于鸿蒙 ArkTS&#xff08;ETS&#xff09;开发的用户登录页面&#xff0c;集成了图文验证码功能&#xff0c;旨在为应用提供安全、便捷的用户身份验证入口。项目采用现代化 UI 设计&#xff0c;兼顾用户体验与安全性&#xff0c;适用于多种需要用户…

0.96寸OLED显示屏 江协科技学习笔记(36个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 33 34 35 36

Flutter SnackBar 控件详细介绍

文章目录 Flutter SnackBar 控件详细介绍基本特性基本用法1. 显示简单 SnackBar2. 自定义持续时间 主要属性高级用法1. 带操作的 SnackBar2. 自定义样式3. 浮动式 SnackBar SnackBarAction 属性实际应用场景注意事项完整示例建议 Flutter SnackBar 控件详细介绍 SnackBar 是 F…

【C++】头文件的能力与禁忌

在C中&#xff0c;​头文件&#xff08;.h/.hpp&#xff09;​​ 的主要作用是声明接口和共享代码&#xff0c;但如果不规范使用&#xff0c;会导致编译或链接错误。以下是详细总结&#xff1a; 一、头文件中可以做的事情 1.1 声明 函数声明&#xff08;无需inline&#xff…