当前位置: 首页 > news >正文

Apache HTTP Server部署全攻略

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.lryc.cn/news/578593.html

相关文章:

  • 第八十六篇 大数据排序算法:从厨房整理到分布式排序的智慧
  • DBA 命令全面指南:核心操作、语法与最佳实践
  • 爱回收平台接口开发指南
  • 变幻莫测:CoreData 中 Transformable 类型面面俱到(七)
  • 打造 AI 产品的前端架构:响应式、流式、智能交互三合一
  • 基于SSM万华城市货运服务系统的设计与实现
  • OpenCV CUDA模块设备层-----反向二值化阈值处理函数thresh_binary_inv_func()
  • Python学习Day48
  • golang generic 2022-04-13
  • 技术学习_人工智能_1_神经网络是如何实现的?
  • IDE全家桶专用快捷键----------个人独家分享!!
  • 02.SpringBoot常用Utils工具类详解
  • pytorch学习—7.处理多维特征的输入
  • 通达信【极弱强势指标与股道波段交易系统】幅图
  • 【学习笔记】Python中主函数调用的方式
  • 修改Spatial-MLLM项目,使其专注于无人机航拍视频的空间理解
  • Electron 应用中的内容安全策略 (CSP) 全面指南
  • AbMole| H₂DCFDA(M9096;活性氧(ROS)探针)
  • 医学编码:临床试验数据标准化的关键
  • Next.js 安装使用教程
  • 多容器应用与编排——AI教你学Docker
  • Web性能测试常用指标(转自百度AI)
  • 开关电源和线性电源Multisim电路仿真实验汇总——硬件工程师笔记
  • 暖通锅炉的智能管控:物联网实现节能又舒适​
  • grom使用mysql快速上手
  • [论文阅读] 人工智能 + 软件工程 | 从软件工程视角看大语言模型:挑战与未来之路
  • 使用 icinga2 写入 TDengine
  • 基于ApachePOI实现百度POI分类快速导入PostgreSQL数据库实战
  • SpringBoot计时一次请求耗时
  • 基于netmiko模块实现支持SSH or Telnet的多线程多厂商网络设备自动化巡检脚本