服务器 > 网络 > https

Apache HTTP Server部署全攻略(最新整理)

16人参与 2025-07-03 https

httpd 简介

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

httpd 的主要特点包括:

一、环境准备

1. 系统要求

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

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.访问测试:

十一、故障排除指南

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部署内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

nginx异步io配置全过程

07-03

Apache HTTP Server 从安装到配置过程详解

07-14

一文详解Tomcat HTTP请求与响应的完整流程

07-30

nginx负载均衡配置方式

06-05

如何搭建并配置HTTPD文件服务及访问权限控制

06-05

Tomcat端口仅允许本地访问设置的两种方法

05-30

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论