导读:本期聚焦于崔健创作的《如何在AWS EC2上安装和配置Apache服务器?详细步骤详解》,敬请观看详情。在AWS EC2实例上搭建Web服务是上云的第一步,而Apache依然是使用最广泛的HTTP服务器之一。本文围绕EC2环境下安装和配置Apache展开,内容包括如何通过SSH连接实例并更新系统软件源,分别在Amazon Linux和Ubuntu系统上使用包管理器完成Apache安装,如何配置安全组放行80和443端口,以及修改httpd配置文件实现虚拟主机、目录权限和默认页面调整。此外还介绍了安装mod_ssl模块启用HTTPS、设置开机自启动、查看日志排查问题等实用操作,帮助你把一个全新的EC2实例快速变成可对外访问的Web服务器。

把一台刚创建好的EC2实例变成一台能对外提供服务的Web服务器,Apache往往是最稳妥的选择。它稳定、文档齐全,各种发行版的软件源里都有现成的包,安装和配置都不复杂。不过不少人在EC2上装完Apache后,打开浏览器访问公网IP却发现连不通,问题大多出在安全组没有放行端口,或者系统防火墙没关。这篇文章就把从连接实例到配置站点的完整流程梳理一遍,把容易踩的坑都标出来。

如何在AWS EC2上安装和配置Apache服务器?详细步骤详解

一、连接EC2实例并准备系统环境

安装Apache之前,先要通过SSH连上EC2实例。假设你的实例使用默认的Amazon Linux 2023镜像,密钥文件为mykey.pem,连接命令如下:

chmod 400 mykey.pem
ssh -i mykey.pem ec2-user@你的实例公网IP

连接成功后,第一件事是更新软件源。不同的发行版命令不一样,Amazon Linux和CentOS系使用dnf或yum,Ubuntu系使用apt。更新软件源可以保证安装到的Apache是最新版本,同时把已知的安全补丁一并打上,这一步不要省略。

Amazon Linux 2023执行:

sudo dnf update -y

Ubuntu执行:

sudo apt update && sudo apt upgrade -y

这里有个常见的坑:如果你使用的是Ubuntu镜像,默认用户名是ubuntu而不是ec2-user,用错用户名会一直提示Permission denied,很多人在这个环节卡半天。另外,如果实例是在VPC私有子网里,还需要通过堡垒机或者SSM Session Manager跳转进去,直接SSH是连不上的。

二、安装Apache并启动服务

在Amazon Linux 2023或者CentOS上,Apache的软件包名叫httpd,安装命令是:

sudo dnf install -y httpd
sudo systemctl start httpd
sudo systemctl enable httpd
sudo systemctl status httpd

在Ubuntu上,软件包名则叫apache2,命令换成:

sudo apt install -y apache2
sudo systemctl start apache2
sudo systemctl enable apache2

注意httpd和apache2虽然都是Apache HTTP Server,但目录结构和配置文件名差异很大。httpd的主配置文件在/etc/httpd/conf/httpd.conf,虚拟主机配置放在/etc/httpd/conf.d/目录下;而apache2的主配置在/etc/apache2/apache2.conf,站点配置放在/etc/apache2/sites-available/,启用站点需要用a2ensite命令做软链接。网上教程大多混用两套体系,照抄时一定要先确认自己的发行版。

启动服务后,先在本机验证一下:

curl -I http://localhost

如果返回HTTP/1.1 200 OK,说明服务本身已经跑起来了,页面对应的默认文档根目录在/var/www/html,你可以放一个测试文件进去确认。

三、配置安全组放行端口

本机能访问不代表外网能访问,EC2的安全组默认只放行了SSH的22端口。你需要到EC2控制台,找到实例对应的Security Group,编辑Inbound Rules,添加两条规则:一条是HTTP,端口80,来源0.0.0.0/0;另一条是HTTPS,端口443,来源0.0.0.0/0。

如果用AWS CLI操作也可以,示例命令如下:

aws ec2 authorize-security-group-ingress --group-id sg-xxxxxxxx \
  --protocol tcp --port 80 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress --group-id sg-xxxxxxxx \
  --protocol tcp --port 443 --cidr 0.0.0.0/0

安全组改完后,用浏览器访问实例的公网IP,应该能看到Apache的默认测试页。如果还是不通,按顺序排查三个地方:安全组规则是否保存生效、实例是否有公网IP或者绑定了弹性IP、以及系统内部的防火墙(Amazon Linux默认没有启用firewalld,但自己开过的要检查sudo firewall-cmd --list-all)。此外VPC的路由表里必须有指向互联网网关的默认路由,否则流量根本出不去。

四、配置虚拟主机与网站目录

实际部署网站时,通常需要配置虚拟主机来支持多个域名。以Amazon Linux的httpd为例,新建一个配置文件:

sudo vi /etc/httpd/conf.d/mysite.conf

配置内容示例:

<VirtualHost *:80>
    ServerName www.ipipp.com
    DocumentRoot /var/www/mysite
    <Directory /var/www/mysite>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog logs/mysite-error.log
    CustomLog logs/mysite-access.log combined
</VirtualHost>

这里的几个指令值得说明一下。Options -Indexes关闭了目录浏览,避免没有默认首页时把整个目录结构暴露出去;AllowOverride All允许站点目录下的.htaccess文件生效,WordPress这类程序依赖重写规则时会用到;Require all granted则是对所有来源放行访问。目录权限是新手最容易出错的地方,如果配置完访问报403,多半是缺少Require all granted,或者文件本身的属主不对。

创建站点目录并设置权限:

sudo mkdir -p /var/www/mysite
sudo chown -R ec2-user:apache /var/www/mysite
sudo chmod -R 755 /var/www/mysite

改完配置后先做语法检查再重启,避免配置错误导致服务起不来:

sudo httpd -t
sudo systemctl reload httpd

reload和restart的区别也顺便提一句:reload不会断开现有连接,平滑加载新配置;restart会直接杀掉进程重启,生产环境上配置尽量用reload。

五、启用HTTPS与日常运维

现在上线一个网站基本都要求HTTPS。Let's Encrypt提供了免费的证书,配合certbot可以全自动完成申请和续期。以Amazon Linux为例:

sudo dnf install -y mod_ssl certbot python3-certbot-apache
sudo certbot --apache -d www.ipipp.com

certbot会自动修改Apache配置,把80端口的请求重定向到443,并配置好证书路径。证书有效期90天,可以装个定时任务自动续期:

echo "0 3 * * * root certbot renew --quiet" | sudo tee /etc/cron.d/certbot-renew

日常运维方面,日志是最重要的排查入口。访问日志和错误日志都在/var/log/httpd/目录下(Ubuntu是/var/log/apache2/),排查403、500错误时先看error_log,里面会给出具体原因。需要诊断端口占用时用sudo ss -tlnp | grep :80,查看实时连接可以用sudo tail -f /var/log/httpd/access_log

最后,别忘了把服务加入开机自启,前面的systemctl enable已经做了这件事,但建议在实例重启后用systemctl is-enabled httpd确认一次。如果后续要上负载均衡,还要记得在ELB的健康检查里把路径指向一个稳定返回200的页面,比如单独放一个health.html,避免用默认首页做健康检查时因为改版导致后端被误判下线。

ApacheAWS EC2Apache配置修改时间:2026-09-08 12:25:12

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260908/52764.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。