Apache安装配置教程:从零完成部署与虚拟主机设置
本文要解决的问题很直接:在一台干净的 Linux 服务器上把 Apache 装好、启动、放行端口,再让它能正确响应一个域名或 IP 的访问。
下面以常见的 CentOS 7/8 和 Ubuntu 20.04/22.04 为例,命令按发行版区分,照着执行即可。
先确认系统和软件包管理器
操作前先明确两件事:当前用户是否有 sudo 权限,以及系统用的是 yum/dnf 还是 apt。
用下面命令查看:
cat /etc/os-release
which yum dnf apt 2>/dev/null
如果输出里出现 ID=centos 或 ID=rhel,走 yum/dnf 流程;
出现 ID=ubuntu 或 ID=debian,走 apt 流程。
Apache 在 CentOS 系里包名是 httpd,在 Ubuntu/Debian 里是 apache2,这是新手最容易混的一点。
安装并启动 Apache
CentOS / RHEL 系:
sudo yum install -y httpd
sudo systemctl enable --now httpd
Ubuntu / Debian 系:
sudo apt update
sudo apt install -y apache2
sudo systemctl enable --now apache2
装完先看服务状态,确认没有报错再继续:
sudo systemctl status httpd # CentOS
sudo systemctl status apache2 # Ubuntu
状态里出现 active (running) 表示进程已经起来。
如果显示 failed,先执行 sudo journalctl -u httpd -n 50(Ubuntu 换成 apache2)看最近日志,常见原因是 80 端口被 Nginx 或其他程序占用。
放行防火墙端口
服务起来了但外部打不开,多半是防火墙没放行。
CentOS 用 firewalld:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
Ubuntu 用 ufw:
sudo ufw allow 'Apache Full'
sudo ufw status
如果服务器在云厂商控制台里,还要检查安全组是否放行了 80 和 443 端口。
这两处都放行后,用浏览器访问服务器公网 IP,能看到 Apache 默认页面就说明基础安装成功了。
配置一个虚拟主机
默认站点能访问后,实际使用通常要绑定自己的域名。
以 Ubuntu 为例,先创建目录和测试页:
sudo mkdir -p /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/example.com/public_html
新建配置文件 /etc/apache2/sites-available/example.com.conf:
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
启用站点并重载配置:
sudo a2ensite example.com.conf
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
CentOS 下的对应文件一般放在 /etc/httpd/conf.d/example.com.conf,
内容结构类似,
改完用 sudo apachectl configtest 检查语法,
再 sudo systemctl reload httpd。每次改配置都先跑 configtest,
通过后再 reload,
能避免把服务改挂。
验证是否真正生效
不要只看浏览器,用命令行确认更可靠:
curl -I http://你的服务器IP
curl -I http://example.com
返回 HTTP/1.1 200 OK 或 301/302 说明请求已经被 Apache 处理。
如果返回连接被拒绝,回到防火墙和安全组检查;
如果返回 403,检查 DocumentRoot 目录权限和 SELinux;
如果返回默认页面而不是你的站点,说明虚拟主机没生效或 ServerName 与访问域名不一致。
容易踩的几个坑
不要同时跑 Nginx 和 Apache 占用 80 端口。 用 sudo ss -lntp | grep :80 查看谁在监听,需要的话先停掉冲突服务。
SELinux 在 CentOS 上可能拦截自定义目录。 如果确认权限没问题仍报 403,
可以临时用 sudo setenforce 0 测试,
确认是 SELinux 后再用 semanage fcontext 正式放行,
不要长期关闭。
改完配置忘记 reload。 systemctl restart 会中断现有连接,日常调整优先用 reload。
域名解析没生效就急着排查 Apache。 先用 ping example.com 或 dig example.com 确认解析到的是当前服务器 IP。
常见疑问
Apache 和 httpd 是同一个东西吗?
在 CentOS/RHEL 系里服务名和包名是 httpd,在 Ubuntu/Debian 里是 apache2,本质都是 Apache HTTP Server,配置文件路径和命令前缀不同。
装完后本机 curl 正常、外网打不开怎么办?
优先查云安全组和系统防火墙两层,再看 Apache 是否只监听了 127.0.0.1。
用 ss -lntp 确认监听地址是 0.0.0.0:80 还是 127.0.0.1:80。
虚拟主机改了不生效怎么定位?
执行 apache2ctl -S(CentOS 用 httpd -S)可以看到当前生效的虚拟主机列表和配置文件路径,比盲猜快得多。
到这里,Apache 的安装、启动、端口放行和虚拟主机配置就完成了。
建议先在测试环境跑通整套流程,确认 curl 返回正常后再迁移到正式服务器,后续再按需加 HTTPS 和日志切割。