什么是 Apache 服务器?

Apache HTTP Server(简称 Apache) 是一款开源的、跨平台的 Web 服务器软件,你可以把它想象成你网站在互联网上的“门卫”或“前台接待”。

apache 服务器 网站
(图片来源网络,侵删)

它的核心工作是:

  1. 接收请求:当你在浏览器中输入一个网址(如 www.example.com)时,你的浏览器会向互联网发送一个请求,这个请求最终会到达托管这个网站的服务器,而 Apache 就是服务器上负责“开门”的那个软件。
  2. 处理请求:Apache 接收到请求后,会根据请求的内容(比如是一个网页、一张图片、一个视频文件)去服务器的硬盘里找到对应的文件。
  3. 返回响应:找到文件后,Apache 会将这个文件通过网络发送回你的浏览器,你的浏览器再将文件内容(如 HTML 代码)渲染成你看到的网页。

Apache 的核心特点:

  • 开源免费:任何人都可以免费使用、修改和分发。
  • 稳定可靠:经过全球数十年的发展和考验,被证明是极其稳定和安全的。
  • 跨平台:可以运行在 Windows、Linux、macOS 等多种操作系统上。
  • 模块化设计:这是 Apache 最强大的特性之一,你可以通过加载不同的模块来扩展其功能,例如支持 PHP、Python、SSL 加密、URL 重写等。
  • 市场占有率高:曾是全球市场份额最高的 Web 服务器,至今仍有大量网站在使用。

Apache 如何与网站协同工作?

一个完整的网站在 Apache 服务器上的组织结构通常如下:

/var/www/ (这是网站根目录,一个常见的选择)
├── html/ (网站的主要文件,如 index.html, images/, css/)
├── blog/ (另一个网站,或网站的某个子目录)
│   └── index.php
└── logs/ (存放网站的访问日志和错误日志)
    └── access.log
    └── error.log

关键配置文件:httpd.conf

Apache 的所有行为都由其主配置文件 httpd.conf 控制,这个文件通常位于 /etc/httpd/conf/ (Linux) 或 C:\Apache24\conf\ (Windows) 目录下。

httpd.conf 中有几个核心指令至关重要:

apache 服务器 网站
(图片来源网络,侵删)
  1. Listen:指定 Apache 监听哪个网络端口,默认是 80 (HTTP) 和 443 (HTTPS)。
    Listen 80
  2. ServerName:定义服务器的域名。
    ServerName www.my-website.com:80
  3. DocumentRoot这是最重要的指令之一,它指定了网站文件存放的根目录,当有人访问你的网站时,Apache 会从这个目录下寻找文件。
    DocumentRoot "/var/www/html"
    <Directory "/var/www/html">
        # 在这个目录下可以设置各种权限,比如是否允许浏览目录、是否允许覆盖文件等
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>

虚拟主机:托管多个网站

如果你想在同一台服务器上托管多个不同的网站(www.siteA.comwww.siteB.com),可以使用虚拟主机 功能,Apache 会根据用户请求的域名,将请求指向不同的 DocumentRoot

一个简单的虚拟主机配置示例:

# 第一个网站 www.siteA.com
<VirtualHost *:80>
    ServerAdmin webmaster@siteA.com
    DocumentRoot "/var/www/siteA"
    ServerName www.siteA.com
    ErrorLog "/var/www/siteA/logs/error_log"
    CustomLog "/var/www/siteA/logs/access_log" common
</VirtualHost>
# 第二个网站 www.siteB.com
<VirtualHost *:80>
    ServerAdmin webmaster@siteB.com
    DocumentRoot "/var/www/siteB"
    ServerName www.siteB.com
    ErrorLog "/var/www/siteB/logs/error_log"
    CustomLog "/var/www/siteB/logs/access_log" common
</VirtualHost>

如何搭建一个基于 Apache 的网站?(以 Linux 为例)

这里是一个从零开始搭建一个静态网站的简单步骤。

第 1 步:安装 Apache

在基于 Debian/Ubuntu 的系统上:

apache 服务器 网站
(图片来源网络,侵删)
sudo apt update
sudo apt install apache2

在基于 CentOS/RHEL 的系统上:

sudo yum install httpd

第 2 步:启动并设置开机自启

# 启动 Apache 服务
sudo systemctl start apache2  # 或 httpd
# 设置开机自启
sudo systemctl enable apache2 # 或 httpd

第 3 步:放置你的网站文件

默认的网站根目录通常是 /var/www/html,你可以将自己的网站文件(index.html)放到这个目录下。

# 创建一个简单的测试页面
sudo echo "<h1>Hello, Apache!</h1><p>我的第一个网站运行成功了!</p>" > /var/www/html/index.html

第 4 步:配置防火墙(如果需要)

如果你的服务器开启了防火墙,需要允许 HTTP (80) 和 HTTPS (443) 端口的流量。

# 对于 UFW (Ubuntu/Debian)
sudo ufw allow 'Apache Full'
# 对于 firewalld (CentOS/RHEL)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

第 5 步:访问你的网站

在浏览器中输入你的服务器的 IP 地址:

http://你的服务器IP地址

如果你能看到 "Hello, Apache!" 的字样,恭喜你,你的 Apache 网站已经成功运行了!


Apache vs. Nginx:我应该选哪个?

Apache 是非常优秀的服务器,但现在很多人会选择 Nginx (Engine X),它们是当前最主流的两个 Web 服务器。

特性 Apache Nginx
架构 进程/线程模型:每个连接通常会占用一个进程或线程,内存消耗相对较高。 事件驱动/异步模型:使用少量进程处理大量并发连接,内存消耗极低,性能极高。
静态文件 性能不错,但 Nginx 更胜一筹。 性能极佳,是处理静态文件(图片、CSS、JS)的王者。
反向代理 功能强大,但配置相对复杂。 性能和效率更高,是反向代理和负载均衡的首选。
通过 mod_php 等模块,与 PHP 等语言集成非常紧密,配置简单。 本身不处理 PHP,需要将请求转发给后端的 PHP-FPM 等进程,配置稍复杂,但更灵活。
配置 .htaccess 文件非常灵活,允许用户在目录级别进行配置,但会影响性能。 集中式配置,没有 .htaccess,所有配置都在主配置文件中,性能更优。
学习曲线 对新手非常友好,特别是 .htaccess 的使用。 配置语法更独特,学习曲线稍陡峭。

如何选择?

  • 选择 Apache

    • 你是新手,希望快速搭建一个网站。
    • 你的网站主要依赖 .htaccess 进行 URL 重写等操作。
    • 你的网站是小型到中型规模,且以动态内容(如 PHP)为主,不追求极致的性能。
    • 需要与老旧的 Apache 模块或特定应用兼容。
  • 选择 Nginx

    • 你需要处理高并发流量。
    • 你的网站有大量的静态文件需要分发。
    • 你需要搭建一个高性能的反向代理或负载均衡器。
    • 你追求极致的性能和低资源消耗。

现代趋势:很多大型网站采用 Nginx + Apache 的组合,即 LNMP/LEMP 栈

  • Nginx 作为前端,负责处理所有静态文件请求、接收所有外部请求,并作为反向代理将动态请求(如 PHP)转发给后端的 Apache
  • Apache 不再直接暴露在公网,只专注于处理 PHP 等动态内容,利用其成熟的 mod_php 模块,这样既发挥了 Nginx 的高性能,又利用了 Apache 处理动态内容的便利性。

Apache 服务器是一个功能强大、历史悠久且极其可靠的 Web 服务器软件,它是无数网站运行的基石,无论你是想搭建一个个人博客、一个小型企业网站,还是一个大型应用,Apache 都是一个值得信赖的选择。

虽然面临着 Nginx 的强劲挑战,但 Apache 凭借其稳定性、灵活性和庞大的社区支持,在未来很长一段时间内,都将在 Web 服务器领域占据重要的一席之地。