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.com
servername example.com
serveralias www.example.com
documentroot /var/www/example.com/public_html
errorlog /var/log/httpd/example.com-error.log
customlog /var/log/httpd/example.com-access.log combined
<directory "/var/www/example.com/public_html">
options -indexes +followsymlinks
allowoverride all
require all granted
</directory>
# 重定向非www到www
rewriteengine on
rewritecond %{http_host} ^example\.com [nc]
rewriterule ^(.*)$ http://www.example.com$1 [l,r=301]
</virtualhost>
# 第二个虚拟主机
<virtualhost *:80>
servername test.com
documentroot /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.com
documentroot "/var/www/example.com/public_html"
sslengine on
sslcertificatefile /etc/httpd/ssl/server.crt
sslcertificatekeyfile /etc/httpd/ssl/server.key
# 强制http跳转到https
rewriteengine on
rewritecond %{https} off
rewriterule ^(.*)$ https://%{http_host}%{request_uri} [l,r=301]
# 启用hsts
header 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 3
minsparethreads 75
maxsparethreads 250
threadsperchild 25
maxrequestworkers 400
maxconnectionsperchild 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/javascript
deflatecompressionlevel 6
setoutputfilter deflate
</ifmodule>3.启用缓存控制:
loadmodule expires_module modules/mod_expires.so
<ifmodule mod_expires.c>
expiresactive on
expiresbytype 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:重定向旧url
rewriterule ^oldpage\.html$ newpage.html [r=301,l]
# 示例2:隐藏.php扩展名
rewritecond %{request_filename} !-d
rewritecond %{request_filename}\.php -f
rewriterule ^(.*)$ $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.so
protocols h2 http/1.1
<virtualhost *:443>
...
protocols h2 http/1.1
h2direct 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 {
daily
missingok
rotate 30
compress
delaycompress
notifempty
sharedscripts
postrotate
/bin/systemctl reload httpd > /dev/null 2>/dev/null || true
endscript
}3.监控设置:
# 安装mod_status用于服务器状态监控 sudo yum install -y mod_status
配置示例:
<location "/server-status">
sethandler server-status
require 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。根据实际业务需求,可以进一步调整和优化各项参数。
到此这篇关于apache http server部署全攻略的文章就介绍到这了,更多相关apache http server部署内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论