一、准备工作 + 背景
在我们动手前,先明确几个概念和环境假设:
- Apache HTTP Server(简称 Apache)是一个广泛使用的开源 Web 服务器软件。(维基百科)
- “搭建 Web 服务器”指的是让这台 Linux 机器能接收 HTTP(和后续可以加 HTTPS)请求,并返回网页或其他资源给访问者。
你需要:
1. 一台 Linux 系统(Ubuntu / Debian / CentOS / RHEL / Fedora 等)
2. sudo 权限(或 root)
3. 网络连通性(客户端能访问这台机器的 IP /域名)
4. 防火墙 /网络策略允许 80 端口(HTTP)和最终可能的 443 端口(HTTPS)通行
二、安装 Apache
安装方式取决于你用的发行版(Ubuntu / Debian 系列,或 CentOS / RHEL / Fedora 等)。
Ubuntu / Debian 系列
sudo apt update
sudo apt install apache2 -y
安装完成后:
sudo systemctl start apache2
sudo systemctl enable apache2
检查状态:
sudo systemctl status apache2
如果你在浏览器访问 “http://你的服务器IP/” 出现 Apache 默认页面(通常一个 “It works!” 或 “Apache2 Ubuntu Default Page” 的页面),说明基本安装成功。(Ubuntu)
CentOS / RHEL / Fedora 系列
以 CentOS / RHEL 为例:
sudo yum update -y # 或者在新版本上用 dnf
sudo yum install httpd -y
之后:
sudo systemctl start httpd
sudo systemctl enable httpd
检查状态:
sudo systemctl status httpd
(在某些较新的系统上,用 dnf
代替 yum
)(GeeksforGeeks)
三、配置防火墙 / 网络访问
即便 Apache 安装好了,如果防火墙阻止了 HTTP 流量,外部访问也不成功。要确保 80 端口(及将来 443)是开放的。
Ubuntu / Debian + UFW(如果你启用了 ufw):
sudo ufw allow 'Apache Full' # 这会允许 HTTP (80) + HTTPS (443)
CentOS / RHEL + firewalld:
sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
如果你不使用 firewalld、用 iptables 或其他防火墙工具,要相应配置允许进出的 TCP 80 和 443 通信。
四、网站内容与目录结构
Apache 安装后,有默认的 “站点根目录”(Document Root),放你网页资源(HTML、CSS、图片、JavaScript、PHP 脚本等)。你可以使用默认的,也可以自定义。
- 在 Ubuntu / Debian 上,默认根目录通常是
/var/www/html/
- 在 CentOS / RHEL 上,默认根目录通常是
/var/www/html
(或/var/www/
下)
你可以试一下:
echo "<h1>Hello, Apache!</h1>" | sudo tee /var/www/html/index.html
然后在浏览器访问 “http://服务器IP/” 看看是否显示 “Hello, Apache!”。
如果你想把站点放在一个自定义路径,比如 /home/myweb
,你需要:
- 在 Apache 的配置里修改
DocumentRoot
和对应<Directory>
块 - 确认目录权限允许 Apache 用户访问
- 重启 Apache
五、虚拟主机(Virtual Host / VirtualHost)
当你要在一台服务器上托管多个域名(如 example.com
、blog.example.com
)时,就用虚拟主机。这样 Apache 会根据访问的域名决定要给哪一个网站响应。
一个简化的虚拟主机配置示例(假设在 Ubuntu 上):
在 /etc/apache2/sites-available/yourdomain.conf
,写入:
<VirtualHost *:80>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
DocumentRoot /var/www/yourdomain
ErrorLog ${APACHE_LOG_DIR}/yourdomain_error.log
CustomLog ${APACHE_LOG_DIR}/yourdomain_access.log combined
</VirtualHost>
然后:
sudo mkdir -p /var/www/yourdomain
sudo chown -R www-data:www-data /var/www/yourdomain
sudo chmod -R 755 /var/www/yourdomain
启用站点(Ubuntu 上):
sudo a2ensite yourdomain.conf
sudo systemctl reload apache2
在 CentOS / RHEL 上,你可能把虚拟主机配置放在 /etc/httpd/conf.d/yourdomain.conf
,然后重启 httpd
服务。(youstable.com)
六、启用 HTTPS(TLS / SSL):让你的网站支持安全连接
为了让访问者用 https://
(而不是仅仅 http://
),你需要给 Apache 配置 SSL/TLS 证书。对于初学者,一个常用选择是 Let’s Encrypt,它可以免费颁发证书。流程大致:
- 安装 certbot(Let’s Encrypt 的客户端)
- 用 certbot 获取证书
- 修改虚拟主机配置以启用 SSL
- 重启 / 重新加载 Apache
举例(Ubuntu):
sudo apt install certbot python3-certbot-apache
sudo certbot --apache
certbot 会帮你自动修改 Apache 配置并设置 TLS 重定向。之后,访问 https://yourdomain.com
看看是否安全连接。
七、验证 + 日志 + 排错
- 验证:在浏览器访问你的 IP 或域名,看看能否看到你放的网页。
- 日志:Apache 有两个重要日志:
- 访问日志(access log)
- 错误日志(error log)
在 Ubuntu:一般放在 /var/log/apache2/
,在 CentOS: /var/log/httpd/
。当服务器有问题时,先看 error log。
- 命令检查配置语法:
sudo apachectl configtest # Ubuntu / Debian
sudo httpd -t # CentOS / RHEL
如果语法有错,Apache 不会重启,error 信息会提示你哪行有问题。
- 端口占用:如果 Apache 无法启动,可能是 80 端口已被别的服务占用。你可以用:
sudo lsof -i :80
sudo lsof -i :443
来查哪个进程在用这些端口。
八、后续建议:安全性、性能和维护
搭起基础服务器只是第一步。为了让它稳定、可靠、安全,你还要做一些事情:
- 定期更新系统和 Apache(修补安全漏洞)
- 最小化启用模块:不要把不必要的 Apache 模块都开启
- 权限控制:站点文件目录权限不要过宽(通常 755、运行用户属主)
- 启用 HTTPS / HSTS 等安全机制
- 缓存 / 压缩:可以使用
mod_deflate
、mod_expires
、mod_cache
等模块来加速访问 - 监控 / 日志分析:定期检查日志、流量、错误率、负载等
- 备份配置与网站文件