阿里云Linux云服务器搭建Apache:从零开始的完整部署与优化指南
一、为什么选择阿里云ECS搭建Apache
Apache HTTP Server是全世界使用最广泛的开源Web服务器软件,凭借其稳定性、丰富的模块生态和灵活的配置能力,在互联网领域经久不衰。阿里云弹性计算服务ECS提供了高性能、可弹性伸缩的云服务器资源,将Apache部署在阿里云ECS上,可以快速搭建从个人博客到企业级电商平台的各种Web应用。LAMP(Linux + Apache + MySQL + PHP)架构在阿里云ECS平台上运行效率尤为突出,是无数开发者和运维人员的首选方案。
需要先登录阿里云控制台,点击:阿里云控制台
二、ECS实例准备与初始化
2.1 选购ECS实例
登录阿里云控制台后,进入ECS管理页面,点击创建实例。对于新手,推荐先选择按量付费进行测试,熟悉流程后再根据业务需求转为包年包月。操作系统方面,建议选用Alibaba Cloud Linux 3/2或CentOS 7.x系列,这两个系统在阿里云生态中有良好的兼容性和长期支持。内存方面,如果运行的是ThinkPHP、Laravel等现代PHP框架,建议至少选择2 GiB以上;小型静态网站或简单项目1 GiB也可勉强运行。
2.2 安全组规则配置——最关键的一步
安全组是阿里云ECS的虚拟防火墙,控制着实例的入方向和出方向流量。配置安全组时,应遵循最小授权原则——只开放业务必需的端口。对于Web服务器,必须放行的端口有三个:
- 22端口(SSH):用于远程登录服务器。强烈建议只授权运维人员的固定公网IP访问,绝不要开放给0.0.0.0/0,否则每天会被数万次暴力破解攻击轮番轰炸。
- 80端口(HTTP):Web服务的对外访问端口,可以开放给0.0.0.0/0。
- 443端口(HTTPS):加密Web服务端口,同样开放给0.0.0.0/0。
配置路径为:ECS控制台 → 网络与安全 → 安全组 → 管理规则 → 添加安全组规则。选择自定义TCP,端口范围按需填写,授权对象根据端口安全性选择具体IP或0.0.0.0/0。安全组应作为白名单使用,开放应用出入规则时应遵循最小授权原则。
2.3 SSH连接服务器
获取ECS实例的公网IP地址和root密码(或密钥对),通过SSH工具连接到服务器:
ssh root@你的服务器公网IP连接成功后,建议先执行系统更新:
# Alibaba Cloud Linux / CentOS
yum update -y
# Ubuntu
apt update && apt upgrade -y三、Apache安装与基础配置
3.1 使用包管理器安装Apache
在不同Linux发行版上,Apache的安装命令和软件包名称略有不同。
CentOS / Alibaba Cloud Linux:
sudo yum install -y httpd httpd-manual mod_ssl mod_rewrite mod_perlUbuntu / Debian:
sudo apt update
sudo apt install -y apache2安装完成后,启动Apache服务并设置开机自启:
# CentOS / Alibaba Cloud Linux
sudo systemctl start httpd
sudo systemctl enable httpd
# Ubuntu / Debian
sudo systemctl start apache2
sudo systemctl enable apache2验证Apache服务状态:
sudo systemctl status httpd在浏览器中输入ECS实例的公网IP地址,如果看到Apache的默认测试页,说明安装成功。Apache的默认网站根目录为/var/www/html(CentOS)或/var/www/html(Ubuntu)。
3.2 Apache核心配置文件详解
Apache的主配置文件位于:
- CentOS / Alibaba Cloud Linux:/etc/httpd/conf/httpd.conf
- Ubuntu / Debian:/etc/apache2/apache2.conf
以下是几个必须关注的核心配置参数:
ServerName:设置服务器的域名或IP地址。如果未设置,Apache启动时可能会提示无法确定服务器域名的警告。
ServerName www.example.com:80DocumentRoot:指定网站文件的根目录。
DocumentRoot "/var/www/html"DirectoryIndex:指定默认访问的文件,按顺序查找。
DirectoryIndex index.html index.php index.htmListen:指定Apache监听的端口。
Listen 80修改配置文件后,务必先测试配置语法是否正确:
sudo apachectl configtest如果输出“Syntax OK”,再重启Apache使配置生效:
sudo systemctl restart httpd四、基于域名的虚拟主机配置
虚拟主机(Virtual Host)允许在同一台服务器上托管多个网站,每个网站使用不同的域名。Apache支持基于IP、基于端口和基于域名三种虚拟主机方式,其中最常用的是基于域名的虚拟主机。
4.1 CentOS / Alibaba Cloud Linux 虚拟主机配置
在CentOS系统中,虚拟主机配置文件通常放在/etc/httpd/conf.d/目录下。创建一个新的配置文件:
sudo nano /etc/httpd/conf.d/example.com.conf添加以下虚拟主机配置:
<VirtualHost *:80>
ServerAdmin webmaster@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
<Directory /var/www/example.com>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog logs/example.com-error_log
CustomLog logs/example.com-access_log common
</VirtualHost>参数说明:
- ServerAdmin:网站管理员的邮箱地址。
- ServerName:主域名,必须唯一。
- ServerAlias:域名的别名,可以附加多个。
- DocumentRoot:该网站的根目录。
- Directory:目录访问控制配置,Options控制目录功能,AllowOverride控制.htaccess的覆盖权限。
- ErrorLog / CustomLog:独立的错误日志和访问日志。
创建网站根目录并设置权限:
sudo mkdir -p /var/www/example.com
sudo chown -R apache:apache /var/www/example.com启用虚拟主机配置并重启Apache:
sudo systemctl restart httpd4.2 Ubuntu / Debian 虚拟主机配置
在Ubuntu系统中,虚拟主机配置文件放在/etc/apache2/sites-available/目录下。创建配置文件:
sudo nano /etc/apache2/sites-available/example.com.conf配置内容与CentOS类似,但目录路径有所不同:
<VirtualHost *:80>
ServerAdmin webmaster@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
<Directory /var/www/example.com>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>启用虚拟主机并禁用默认站点:
sudo a2ensite example.com.conf
sudo a2dissite 000-default.conf
sudo systemctl reload apache2五、Apache性能优化
Apache的性能优化主要围绕三个方向:启用KeepAlive减少连接开销、选择合适的MPM多处理模块提升并发能力、启用压缩与缓存减少传输量和服务器负载。
5.1 启用KeepAlive长连接
KeepAlive允许客户端通过单个TCP连接发送多个HTTP请求,避免了频繁建立和关闭TCP连接带来的三次握手和四次挥手开销。在Apache配置文件(/etc/httpd/conf/httpd.conf)中添加以下指令:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5参数说明:
- KeepAlive On:启用持久连接功能。
- MaxKeepAliveRequests 100:每个连接允许处理的最大请求数,避免单个连接占用过多资源。
- KeepAliveTimeout 5:等待下一个请求的超时时间(秒)。繁忙站点建议取2-5秒的低值,减少长连接占用;页面较大的站点可适当提高。
5.2 MPM多处理模块调优
MPM(Multi-Processing Module)是Apache的核心并发处理模块。CentOS 7及以上版本的Apache默认使用prefork MPM(多进程模型),适合兼容性场景但并发性能有限。对于高并发场景,建议切换至event MPM(事件驱动模型,支持多线程)。
编辑MPM配置文件(/etc/httpd/conf.modules.d/00-mpm.conf):
Prefork MPM配置(兼容性好,适合传统PHP应用):
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>Event MPM配置(高并发,推荐):
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>参数说明:
- StartServers:启动时创建的进程数。
- MinSpareThreads / MaxSpareThreads:最小/最大空闲线程数。
- ThreadsPerChild:每个子进程创建的线程数。
- MaxRequestWorkers:最大并发请求数,需根据服务器内存调整。1GB内存约支持100-150个并发。
5.3 启用Gzip压缩
使用mod_deflate模块对文本类内容(HTML、CSS、JS、JSON等)进行Gzip压缩,可减少50%-70%的网络传输量。在配置文件中添加:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml
AddOutputFilterByType DEFLATE text/css application/javascript
AddOutputFilterByType DEFLATE application/json application/xml
AddOutputFilterByType DEFLATE image/svg+xml
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
</IfModule>注意:避免压缩图片(如JPEG、PNG),此类文件本身已压缩,再次压缩会增加CPU负担。
5.4 配置静态资源缓存
通过mod_expires模块为静态资源设置浏览器缓存,减少重复请求。在配置文件中添加:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "access plus 30 days"
ExpiresByType application/javascript "access plus 30 days"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
</IfModule>六、Apache安全加固
6.1 禁用目录浏览
目录浏览功能会暴露网站的文件结构,存在安全隐患。在Directory配置中移除Indexes选项:
Options -Indexes6.2 隐藏Apache版本信息
隐藏服务器版本信息可以减少攻击者收集系统信息的可能性:
ServerTokens Prod
ServerSignature Off6.3 配置访问控制
对敏感目录(如配置文件目录、日志目录)设置访问限制:
<Directory /var/www/html/admin>
Require ip 192.168.1.0/24
</Directory>6.4 启用系统防火墙
除了阿里云安全组,ECS实例内部的系统防火墙也应正确配置。CentOS/RHEL使用firewalld:
sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reloadUbuntu使用UFW:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable6.5 部署HTTPS证书
为Apache配置SSL证书,实现HTTPS加密访问。首先确保已在安全组中开放443端口。安装mod_ssl模块:
sudo yum install -y mod_ssl检查模块是否安装成功:
httpd -M | grep 'ssl'通过阿里云数字证书管理服务申请免费SSL证书。每个阿里云账号在一个自然年内可免费领取20张个人测试证书,有效期90天。下载Apache格式的证书文件(包含证书文件、证书链文件和私钥文件)。在/etc/httpd/conf.d/ssl.conf中配置证书路径:
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/your_domain_public.crt
SSLCertificateKeyFile /etc/httpd/ssl/your_domain.key
SSLCertificateChainFile /etc/httpd/ssl/your_domain_chain.crt
</VirtualHost>重启Apache使SSL配置生效。
七、Apache日志管理与日志轮转
Apache的访问日志和错误日志是运维排查问题的重要依据。默认情况下,访问日志位于/var/log/httpd/access_log,错误日志位于/var/log/httpd/error_log(CentOS)。
7.1 自定义日志格式
通过LogFormat和CustomLog指令自定义日志格式,可以记录更多有价值的信息:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combined_with_time格式说明:
- %h:客户端IP地址
- %t:请求时间戳
- %r:请求的首行(方法、URI、协议)
- %>s:响应状态码
- %D:处理请求所花费的时间(微秒)
- %{Referer}i:来源页面
- %{User-Agent}i:客户端浏览器信息
7.2 使用logrotate实现日志自动轮转
Apache自身不直接处理日志轮转,需要借助系统自带的logrotate工具。logrotate可以自动完成日志分割、压缩、删除及通知服务重新加载。
确认logrotate已安装:
logrotate --versionApache的logrotate配置文件位于/etc/logrotate.d/httpd(CentOS)或/etc/logrotate.d/apache2(Ubuntu)。编辑配置文件:
/var/log/httpd/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
if [ -f /var/run/httpd/httpd.pid ]; then
systemctl restart httpd
fi
endscript
}参数说明:
- daily:每天轮转一次(可选weekly/monthly)
- rotate 14:保留最近14个轮转日志文件
- compress:使用gzip压缩旧日志
- delaycompress:延迟压缩,避免压缩正在写入的日志
- notifempty:若日志为空,不进行轮转
- create 640 root adm:轮转后创建新日志文件,权限640
- postrotate:轮转后重启Apache,使其重新打开日志文件
测试logrotate配置:
sudo logrotate -vf /etc/logrotate.d/httpdlogrotate通常由系统的cron定时任务自动执行(每日一次)。
八、常见问题排查
8.1 浏览器无法访问Apache测试页
排查步骤:
- 检查阿里云安全组是否放行了80端口。
- 检查Apache服务是否正常运行:systemctl status httpd。
- 检查系统防火墙是否拦截了80端口。
- 检查Apache是否监听了正确的IP和端口:netstat -tlnp | grep httpd。
8.2 403 Forbidden错误
通常是目录权限或访问控制配置问题:
- 检查网站目录的权限是否正确:chown -R apache:apache /var/www/html。
- 检查Directory配置中的Require指令是否正确。
- 检查是否存在Indexes被禁用但目录中没有默认首页文件的情况。
8.3 Apache启动失败
- 检查配置文件语法:apachectl configtest。
- 检查端口是否被占用:netstat -tlnp | grep :80。
- 查看错误日志:tail -f /var/log/httpd/error_log。
九、总结
本文系统讲解了在阿里云Linux云服务器上搭建Apache Web服务器的完整流程,从ECS实例选购、安全组配置、Apache安装、虚拟主机设置,到性能优化、安全加固和日志管理,涵盖了生产环境部署的各个关键环节。Apache作为久经考验的Web服务器,配合阿里云ECS的弹性计算能力,能够为各类Web应用提供稳定、高性能的服务支撑。在实际运维中,建议定期更新系统补丁、监控访问日志、关注安全漏洞公告,持续保障服务器的安全与稳定。
常见问题解答
问1:在阿里云ECS上搭建Apache后,为什么公网IP无法访问?
答:最常见的原因是安全组未开放80端口。请登录阿里云控制台,进入ECS的安全组配置页面,添加入方向规则,端口范围填写80/80,授权对象设置为0.0.0.0/0。另外也请检查ECS实例内部的系统防火墙是否放行了80端口。
问2:Apache的默认网站根目录在哪里?如何修改?
答:CentOS系统中默认根目录为/var/www/html,Ubuntu系统中为/var/www/html。如需修改,编辑httpd.conf或apache2.conf中的DocumentRoot指令,同时需要同步修改对应的Directory配置。
问3:如何在阿里云ECS上实现一台服务器托管多个网站?
答:通过Apache的虚拟主机功能可以实现。在/etc/httpd/conf.d/目录下为每个域名创建独立的.conf配置文件,配置不同的ServerName和DocumentRoot,然后重启Apache即可。
问4:Apache的prefork和event MPM有什么区别?应该如何选择?
答:prefork使用多进程模型,每个请求由一个进程处理,兼容性好但内存占用高、并发能力有限。event使用事件驱动模型,支持多线程,在高并发场景下性能更优、内存占用更低。对于流量较大的网站,建议切换至event MPM。
问5:Apache日志文件越来越大,如何处理?
答:使用logrotate工具实现日志自动轮转。配置/etc/logrotate.d/httpd文件,设置daily轮转、保留指定数量的历史日志、启用压缩,即可自动管理日志文件大小。
问6:如何为Apache配置HTTPS证书?
答:首先在阿里云数字证书管理服务中申请SSL证书(个人测试证书免费)。下载Apache格式的证书文件后,安装mod_ssl模块,在ssl.conf中配置证书路径,确保安全组已开放443端口,最后重启Apache使配置生效。



