把一个网站从本地搬到公网,最常见的第一步就是在云服务器上部署Web服务。Apache作为全球使用率极高的开源HTTP服务器,搭配华为云弹性云服务器ECS(Elastic Cloud Server)使用,可以快速搭建出稳定可用的网站运行环境。本文将以CentOS和Ubuntu两种主流系统为例,完整演示从零开始的部署过程,并覆盖安全组配置、虚拟主机、常见报错处理等实际操作中一定会遇到的问题。

一、部署前的准备工作
在正式安装Apache之前,需要先确认几件事。第一是拥有一台华为云ECS实例,可以在华为云控制台的“弹性云服务器ECS”页面购买,配置方面个人网站选择1核2G的入门规格基本够用,操作系统建议选择CentOS 7.9或者Ubuntu 22.04这类主流发行版,方便排查问题。第二是确认登录方式,购买时绑定密钥对或者设置root密码都可以,后续用SSH工具连接。
拿到服务器后,先通过SSH登录确认系统状态。Windows用户可以用PuTTY、XShell或者直接在命令行使用ssh命令,Mac和Linux用户直接打开终端即可:
ssh root@你的弹性公网IP # 登录后先更新系统软件包 # CentOS / 华为云EulerOS yum update -y # Ubuntu / Debian apt update && apt upgrade -y
更新过程可能需要几分钟。另外建议执行cat /etc/os-release确认系统版本,因为不同发行版安装Apache的命令和包名并不一样,这是新手最容易混淆的地方:CentOS系列中软件包叫httpd,而Ubuntu和Debian系列中叫apache2。
二、安装Apache并启动服务
确认完系统环境后就可以安装了。两种系统的安装命令如下:
# CentOS 系统 yum install httpd -y # Ubuntu 系统 apt install apache2 -y
安装完成后启动服务,并设置为开机自启动,这一点很重要,否则服务器重启后网站就访问不了了:
# CentOS 系统 systemctl start httpd systemctl enable httpd systemctl status httpd # Ubuntu 系统 systemctl start apache2 systemctl enable apache2 systemctl status apache2
如果status输出中显示active (running),说明服务已经正常启动。此时在浏览器输入服务器的弹性公网IP测试,如果能看到Apache的默认欢迎页面,说明部署已经成功了一半。如果无法访问,大概率是安全组没放行端口,这是华为云ECS部署中最经典的一个坑,下一节详细说明。
还可以通过命令在服务器本地验证服务是否真的在监听80端口:
# 查看端口监听情况 netstat -tlnp | grep :80 # 或者用 curl 直接请求本地 curl -I http://127.0.0.1
如果本地curl返回HTTP 200,但外网访问不通,那问题百分之百出在网络层面而不是Apache本身。
三、安全组放行与防火墙配置
华为云ECS默认使用安全组来控制进出流量,相当于云上的一道虚拟防火墙。新购买的实例默认只放行了SSH的22端口,80和443端口需要手动添加规则。操作路径是:登录华为云控制台,进入“弹性云服务器ECS”,点击实例名称进入详情页,切换到“安全组”标签页,点击“更改安全组规则”,在入方向规则中添加两条规则:协议端口分别为80和443,源地址填0.0.0.0/0表示对所有公网IP开放。
安全组放行之后,还需要检查服务器内部的操作系统防火墙。很多新手以为改完安全组就万事大吉,结果服务器上firewalld或者ufw还在拦截请求:
# CentOS firewalld 放行并重启防火墙 firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload # Ubuntu ufw 放行 ufw allow 80/tcp ufw allow 443/tcp ufw reload
这两层防火墙是独立的:安全组在云平台层面拦截,firewalld和ufw在系统层面拦截,任何一层没放行都会导致访问失败。排查时建议先在服务器上curl 127.0.0.1确认Apache本身正常,再逐层排查系统防火墙和安全组,这样定位效率最高。
四、部署网站与虚拟主机配置
Apache默认的站点根目录在CentOS下是/var/www/html,Ubuntu下同样是/var/www/html,只是主配置文件路径不同:CentOS是/etc/httpd/conf/httpd.conf,Ubuntu是/etc/apache2/apache2.conf,站点配置分别放在/etc/httpd/conf.d/和/etc/apache2/sites-available/目录下。把自己的网页文件上传到根目录即可完成最简单的部署:
# 上传文件(在本地机器执行) scp ./index.html root@你的公网IP:/var/www/html/ # 修改权限,确保Apache用户可读 chown -R apache:apache /var/www/html # CentOS chown -R www-data:www-data /var/www/html # Ubuntu
如果需要在同一台服务器上托管多个网站,就要用到虚拟主机功能。以Ubuntu为例,在/etc/apache2/sites-available/下新建一个配置文件:
<VirtualHost *:80>
ServerName www.ipipp.com
DocumentRoot /var/www/mysite
<Directory /var/www/mysite>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/mysite_error.log
CustomLog ${APACHE_LOG_DIR}/mysite_access.log combined
</VirtualHost>保存后执行a2ensite mysite.conf启用站点,再执行systemctl reload apache2重载配置。CentOS用户则直接把配置文件放到conf.d目录下重启httpd即可。配置中的AllowOverride All允许站点目录下的.htaccess文件生效,这对后续部署PHP程序或做伪静态很有用。
五、常见问题排查
部署过程中有几个高频问题值得单独说明。第一是端口被占用,启动Apache时报Address already in use,可以用lsof -i:80或者netstat -tlnp找到占用进程,通常是Nginx等先安装的服务,停掉或者改端口即可。第二是访问返回403 Forbidden,多数是目录权限不足或者缺少默认首页文件,检查目录属主和权限,确认存在index.html或index.php,也可以在配置中通过DirectoryIndex指令指定默认首页。
第三是修改配置后重启失败,Apache提供了语法检查命令httpd -t或apachectl configtest,在重启前先跑一遍能快速定位拼写错误和标签未闭合的问题。日志也是排查问题的关键,CentOS的默认日志在/var/log/httpd/目录,Ubuntu在/var/log/apache2/目录,遇到疑难问题先看error_log往往比盲目搜索更有效率。
最后提一下HTTPS的配置。网站要对外正式提供服务时,建议为域名申请免费证书并启用SSL,华为云提供免费的DV证书可以直接下载使用,配合mod_ssl模块完成部署。整体来说,在华为云ECS上部署Apache的核心难点不在安装本身,而在于理解安全组、系统防火墙、Apache配置这三层结构之间的关系,理清这个思路之后,后续维护和扩展都会顺畅很多。