Apache 初学者教程

什么是 Apache?

Apache 是一款卓越的应用软件。它是世界上使用最广泛的 Web 服务器应用程序,在商业 Web 服务器市场中占有超过 50% 的份额。Apache 是类 Unix 操作系统中使用最广泛的 Web 服务器应用程序,但它几乎可以在所有平台上使用,例如 Windows、OS X、OS/2 等。Apache 这个词取自美洲原住民部落“Apache”的名字,该部落以其战争技巧和战略制定而闻名。

它是一个基于模块化、进程的 Web 服务器应用程序,每个并发连接都会创建一个新线程。它支持许多功能;其中许多功能被编译为独立的模块,扩展了其核心功能,可以提供从服务器端编程语言支持到身份验证机制的所有功能。虚拟主机就是这样一种功能,它允许单个 Apache Web 服务器为多个不同的网站提供服务。

Apache

如何安装 Apache

安装软件包或应用程序有多种方法。下面列出了这些方法——

  1. 这个开源 Web 应用程序的特点之一是任何人都可以根据自己的环境制作安装程序。 这使得 Debian、Red Hat、FreeBSD、Suse 等各种供应商能够根据其他已安装的应用程序和基础操作系统自定义 Apache 的文件位置和配置。
  2. 除了从基于供应商的安装程序安装外,始终可以选择从源代码构建和安装。从源文件安装 Apache 是平台独立的,适用于所有操作系统。

Apache Web 服务器是一个模块化应用程序,管理员可以根据自己的需求选择所需的功能并安装不同的模块。

所有模块都可以编译为 动态共享对象 (DSO 是一个可由多个应用程序在执行时共享的对象文件),它与主 Apache 文件分开存在。强烈推荐使用 DSO 方法,它使从服务器配置中添加/删除/更新模块的任务变得非常简单。

安装 Apache:Linux 平台

在 Red Hat 或基于 rpm 的系统上

如果您使用的是基于 rpm (RedHat Package Manager 是在 Linux 系统上安装应用程序的实用程序) 的 Linux 发行版,即 Red Hat、Fedora、CentOs、Suse,您可以通过供应商特定的包管理器安装此应用程序,或直接从可用的源 tarball 构建 rpm 文件。

您可以通过 Red Hat、CentOs 和 Fedora 等所有基于 Red Hat 的发行版上可用的默认包管理器安装 Apache。

[root@amsterdam ~]# yum install httpd

可以使用以下命令将 Apache 源 tarball 转换为 rpm 文件。

[root@amsterdam ~]# rpmbuild -tb httpd-2.4.x.tar.bz2

为了从源代码创建 .rpm 文件,您的服务器上必须安装 -devel 包。

将源文件转换为 rpm 安装程序后,您可以使用以下命令安装 Apache。

[root@amsterdam ~]# rpm –ivh httpd-2.4.4-3.1.x86_64.rpm

安装后,服务器不会自动启动,为了启动服务,您必须在 Fedora、CentOs 或 Red Hat 上使用以下任一命令。

[root@amsterdam ~]# /usr/sbin/apachectl start

[root@amsterdam ~]# service httpd start

[root@amsterdam ~]# /etc/init.d/httpd start

从源代码安装 Apache

从源代码安装 Apache 需要在您的服务器上安装 –devel 包。您可以找到最新可用版本的 Apache,您可以在这里下载。下载源文件后,将其移动到 /usr/local/src 文件夹。

[root@amserversterdam ~] cd /usr/local/src

[root@amserversterdam ~] gzip -d httpd-2.2.26.tar.gz

[root@amserversterdam ~] tar xvf httpd-2.2.26.tar

[root@amserversterdam ~] httpd-2.2.26

要查看 Apache 的所有可用配置选项,您可以使用 ./configure –help 选项。最常见的配置选项是 –prefix={install directory name}。

[root@amserversterdam ~]./configure --help

[root@amserversterdam ~]./configure –prefix=/usr/local/apache –enable-so

[root@amserversterdam ~] make

[root@amserversterdam ~] make install

以上示例展示了在 /usr/local/apache 目录内编译具有 DSO 功能的 Apache。–enable-so 选项可以通过 DSO 机制在运行时向 Apache 加载所需的模块,而无需重新编译。

安装完成后,您可以使用您喜欢的浏览器浏览 Web 服务器的默认页面。如果您的服务器上启用了防火墙,您必须在操作系统防火墙上为端口 80 设置例外。您可以使用以下命令打开端口 80。

iptables -I INPUT -p tcp --dport 80 -j ACCEPT

service iptables save

通过浏览您的服务器 IP 地址,您可以看到默认的 Apache2 欢迎屏幕

Install Apache from Source

什么是虚拟主机?

一个 Apache Web 服务器可以在 同一台 服务器上托管多个网站。您不需要为每个网站准备单独的服务器机器和 Apache 软件。这可以通过使用 虚拟主机VHost 的概念来实现。

您想在 Web 服务器上托管的任何域都将在 Apache 配置文件中有一个单独的条目。

Virtual Host

Apache 虚拟主机的类型

  1. 基于名称的虚拟主机
  2. 基于地址或基于 IP 的虚拟主机。

基于名称的虚拟主机

基于名称的虚拟主机用于在单个 IP 地址上托管多个虚拟站点。

Name-based Virtual Host

为了配置基于名称的虚拟主机,您必须设置您将接收所有所需网站的 Apache 请求的 IP 地址。您可以通过 Apache 配置文件中的 NameVirutalHost 指令来完成此操作,即 httpd.conf/apache2.conf 文件。

Apache 虚拟主机示例

NameVirtualHost *:80

<VirtualHost 192.168.0.108:80>

ServerAdmin webmaster@example1.com

DocumentRoot /var/www/html/example1.com      

ServerName www.example1.com

</VirtualHost>

<VirtualHost 192.168.0.108:80>

ServerAdmin admin@example2.com

DocumentRoot /var/www/html/example2.com

ServerName www.example2.com

</VirtualHost>

您可以根据需要添加任意数量的虚拟主机。您可以使用以下命令检查您的 Web 配置文件:

[root@amsterdam ~]#httpd –t
Syntax OK

如果配置文件有语法错误,它会抛出一个错误

[root@115 conf.d]# httpd -t

Syntax error on line 978 of /etc/httpd/conf/httpd.conf:

Invalid command '*', perhaps misspelled or defined by a module not included in the server configuration

基于 IP 的虚拟主机

要设置基于 IP 的虚拟主机,您需要在服务器上配置多个 IP 地址。因此,Apache vhost 的数量将取决于您服务器上配置的 IP 地址数量。如果您的服务器有 10 个 IP 地址,您可以创建 10 个基于 IP 的虚拟主机。

IP-based Virtual host

在上图中,两个网站 example1.com 和 example2.com 被分配了不同的 IP,并使用基于 IP 的虚拟主机。

Listen 192.168.0.100:80

<VirtualHost 192.168.10.108:80>

ServerAdmin webmaster@example1.com

DocumentRoot /var/www/html/example1.com      

ServerName www.example1.com

</VirtualHost>

<VirtualHost 192.168.10.109:80>

ServerAdmin admin@example2.com

DocumentRoot /var/www/html/example2.com

ServerName www.example2.com

</VirtualHost>

Apache 运行 PHP 文件需要什么?

在 Apache 上运行 PHP 文件需要在您的服务器上启用 mod_php。它允许 Apache 解释 .Php 文件。它有 PHP 处理程序来解释 Apache 中的 PHP 代码并将 HTML 发送到您的 Web 服务器。

如果您的服务器上启用了 mod_php,您将在 /etc/httpd/conf.d/ 目录中有一个名为 php.conf 的文件。您也可以通过以下命令检查:

httpd -M | grep "php5_module"

输出将类似于

What Apache needs to Run Php File

Apache 中的 PHP 处理程序

  • mod_php
  • CGI
  • FastCGI
  • suPHP

mod_php 是最古老的 PHP 处理程序,它使 PHP 成为 Apache 的一部分,并且不调用任何外部 PHP 进程。该模块默认安装在每个 Linux 发行版的仓库中,因此启用/禁用此模块非常容易。

如果您使用 FastCGI 作为 PHP 处理程序,您可以设置多个版本的 PHP 供服务器上的不同帐户使用。

FastCGI 即 mod_fastcgimod_fcgid 的扩展,而 mod_fcgid 是 CGI 即 mod_cgi 的高性能替代品。它启动足够数量的 CGI 实例来处理并发的 Web 请求。它还使用 suexec 来支持不同用户拥有自己的 PHP 实例,并提高了 Web 安全性。

在 Apache 上运行 Ruby 文件需要启用 mod_ruby。Apache 也可以通过 FastCGI 处理 Ruby 文件。借助 mod_fcgid (即 FastCGI),可以使用多个版本的 Ruby。

您也可以安装 apache passenger 并配置 Apache 使用它来提供 Ruby 页面。

(Phusion Passenger 也称为“passenger”,是一个免费的 Web 服务器模块,旨在与 Apache 和 Nginx 集成)

在您的服务器上安装 mod_ruby 的步骤 –

cd /tmp

wget http://www.modruby.net/archive/mod_ruby-1.2.6.tar.gz

tar zxvf mod_ruby-1.2.6.tar.gz

cd mod_ruby-1.2.6/                    

./configure.rb --with-apr-includes=/usr/include/apr-1

make

make install

如何用 Apache 运行 Ruby

我们必须将 mod_ruby 模块添加到 Apache 配置中,即 /etc/httpd/conf.d/ruby.conf,并添加以下行。

LoadModule ruby_module modules/mod_ruby.so

如果您想启用或禁用这些模块,您必须编辑 Apache 配置文件,并注释或取消注释这些模块,前提是 Web 服务器已经用这些模块编译过。

Run Ruby with Apache

如何保护 Apache Web 服务器

保护您的 Web 服务器非常重要,这意味着只允许他人查看预期的信息,并保护您的数据和限制访问。

这些是增强您的 Apache Web 服务器安全性的常见方法。

1) 隐藏 Apache 版本和操作系统信息

Apache 会在错误中显示其版本和操作系统名称,如下图所示。

Hiding Apache version and OS Information

黑客可以利用这些信息,使用特定版本服务器或操作系统中公开的漏洞发起攻击。

为了防止 Apache Web 服务器显示此信息,我们必须修改

Apache 配置文件中的“server signature”选项。默认情况下,它是“on”,我们需要将其设置为“off”。

vim /etc/httpd/conf/httpd.conf
ServerSignature Off

ServerTokens Prod

我们还设置了“ServerTokens Prod”,它告诉 Web 服务器只返回 Apache,并抑制操作系统的主版本和次版本信息。

修改配置文件后,您必须重启/重新加载您的 Apache Web 服务器才能使其生效。

service httpd restart

Hiding Apache version and OS Information

2) 禁用目录列表

如果您的文档根目录没有索引文件,默认情况下,您的 Apache Web 服务器将显示文档根目录的所有内容。

Disable Directory Listing

可以通过 Apache 配置文件中可用的“options directive”为特定目录关闭此功能。

<Directory /var/www/html>

    Options -Indexes

</Directory>

Disable Directory Listing

3) 禁用不必要的模块

禁用所有不使用的不必要模块是一个好习惯。您可以在您的 Apache 配置文件中看到已启用模块的列表 –

[root@amsterdam ~]#httpd –M

perl_module (shared)

php5_module (shared)

proxy_ajp_module (shared)

python_module (shared)

ssl_module (shared)

列出的许多模块都可以被禁用,例如 mod_imap、mod_include、mod_info、mod_userdir、mod_autoindex,因为它们很少被生产 Web 服务器使用。

vi /etc/httpd/conf/httpd.conf

#LoadModule auth_digest_module modules/mod_auth_digest.so

注释掉模块后,保存文件。

使用以下命令重启 Apache 服务。

/etc/init.d/httpd restart

4) 限制对 Web 根目录之外文件的访问

如果您想确保 Web 根目录之外的文件不可访问,您必须确保该目录在您的 Web 服务器配置文件中通过“Allow”和“Deny”选项进行了限制。

<Directory/>

Options None

AllowOverride None

Order deny,allow

Deny from all

</Directory>

一旦您限制了对 Web 根目录之外的访问,您将无法访问位于 Web 服务器上任何其他文件夹中的任何文件,您将收到 404 返回码。

Restricting Access to Files outside the Web Root Directory

5) 使用 mod_evasive 抵御 DoS 攻击

如果您想保护您的 Web 服务器免受 Dos(即拒绝服务)攻击,您必须启用 mod_evasive 模块。它是一个第三方模块,可以检测 Dos 攻击并防止攻击造成其本应造成的那么大损害。可以在这里下载。

下载上述文件

6) 使用 mod_security 增强 Apache 安全性

这个模块作为 Apache 的防火墙,允许您实时监控流量。它还可以防止 Web 服务器受到暴力破解攻击。mod_security 模块可以通过您发行版的默认包管理器安装。

Using mod_security to Enhance Apache Security

7) 限制请求大小

Apache 对可能导致 DoS 攻击的 http 请求总大小没有任何限制。您可以使用目录标签限制 Apache 指令“LimitRequestBody”的请求大小。该值可以根据您的需求设置为 0 到 2 GB(即 2147483647 字节)之间的任何值。

<Directory "/var/www/html/uploads">

   LimitRequestBody 512000

</Directory>

Apache 日志格式

Apache 日志提供了详细信息,有助于检测服务器的常见问题。

为了创建访问日志,必须启用 mod_log_config 模块。

Apache 配置文件中可用的三个指令,即

  • TransferLog:创建一个日志文件。
  • LogFormat:指定一个自定义格式。
  • CustomLog:创建并格式化一个日志文件。

TransferLog 指令在 Apache 配置文件中可用,它根据设置的参数轮转虚拟主机日志文件。

<VirtualHost www.example.com>

  ServerAdmin webmaster@example.com

  DocumentRoot /usr/www/example/httpd/htdocs/

  ServerName www.example.com

  ServerAlias example.com www.example

  ErrorLog /usr/www/example/httpd/logs/error_log

  TransferLog/usr/www/example/httpd/logs/accesslog

  CustomLog /usr/www/example/httpd/logs/accesslog combined

</VirtualHost>

两种类型的 Apache 日志格式

  • 通用日志格式
  • 组合日志格式。

您可以通过编辑 apache 配置文件来启用它们,即 apache2.conf (Debian/ubuntu) 或 httpd.conf (基于 rpm 的系统) 文件

通用日志格式

LogFormat "%h %l %u %t \"%r\" %>s %b" common

CustomLog logs/access_log common

Apache 生成的通用日志

[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/test

组合日志格式

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined

CustomLog log/access_log combined

此处,

  • %h 是远程主机
  • %l 是由 identd 确定的用户身份
  • %u 是由 HTTP 身份验证确定的用户名
  • %t 是服务器完成处理请求的时间。
  • %r 是来自客户端的请求行。("GET / HTTP/1.0")
  • %>s 是从服务器发送到客户端的状态码 (500, 404 等)
  • %b 是响应客户端的大小 (以字节为单位)
  • Referer 是链接到此 URL 的页面。
  • User-agent 是浏览器识别字符串。

Apache 生成的组合日志

199.187.122.91 - - [06/Mar/2014:04:22:58 +0100] "GET /robots.txt HTTP/1.1" 404 1228 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"

自定义日志为服务器上的每个虚拟主机创建单独的日志文件。它需要在配置文件的虚拟主机部分中指定。

您可以看到下面提到的虚拟主机配置,生成的日志将是该虚拟主机的自定义日志,格式将是组合格式。

Combined Log Generated by Apache

配置您的第一个生产 Web 服务器

1. 为了拥有一个正在运行的生产 Web 服务器,您需要一个专用的 节点(物理/虚拟或云实例),运行 Linux/Unix、Windows、MacOS 等。

2. Web 服务器必须有 直接的网络连接 和一个在其上配置的 静态IP地址

3. 它需要拥有运行网页所需的所有 模块。如果 Web 服务器处理 PHP 页面,则需要启用 PHP 模块。

Configure Production Web Sever

  1. 它还需要配置并运行一个好的 杀毒 应用程序,以保护 Web 服务器免受恶意软件或病毒攻击。您还需要一个机制来定期 更新 已配置的杀毒/反恶意软件应用程序,无需任何手动干预,以便从中获得最大效益。
  2. 如果您的 Web 服务器上要托管数百个域名,您必须为每个域名实施 文件系统配额限制,每个域名可以创建的数据库数量,每个域名的电子邮件帐户数量等。
  3. 如果您的 Web 服务器已设置为提供 共享托管服务,则需要限制您 Web 服务器上的用户。共享托管用户应具有最低的用户权限,这样他就不会损坏重要文件并破坏整个服务器。Apache 不提供任何此类功能,需要不同的第三方应用程序和对操作系统的定制才能实现这一点。
  4. 如果您在 Web 服务器上添加一个 新域名,需要编辑数百个配置文件才能为添加的域名启用所有功能。
  5. 如果其中一个托管的域名需要与其余域名 不同的 PHP 设置,在核心 Apache Web 服务器中实现这一点非常复杂,需要对您的 Web 服务器进行大量定制。
  6. 生产 Web 服务器需要一个 防火墙 来阻止可能导致服务器高负载的不必要流量。使用命令行实现 IPTABLE 规则非常复杂。它需要核心 Linux/Unix 环境的专业知识来编写有效的防火墙规则以阻止不必要的流量。IPTABLE 基于 netfilter 模块;它是一个操作系统级别的防火墙,允许管理员为服务器上的传入/传出流量创建规则。
  7. 一个生产环境的 Web 服务器需要多个不同的应用程序,如用于邮件的 Email、用于文件上传的 FTP、用于停放域名的 域名系统。在核心的 Linux/Unix 系统上管理所有这些应用程序需要对相应技术有专业知识。

因此,可以说,为多个域名管理一个 Web 服务器是一项非常复杂的任务,需要编辑数百个配置文件,定制每个应用程序以达到预期效果。对于初学者来说,对任何配置错误进行故障排除都会非常困难。

使用 Cpanel 或类似软件的解决方案

Cpanel 提供了一种图形化的方式来管理您的 Web 服务器。它旨在提供易于使用和配置的大规模托管服务。cPanel 降低了进入托管和 Web 服务器管理领域的技术门槛。它使复杂的任务变得更简单,提供了许多有用且易于使用的 Web 界面,可以执行操作 Web 服务器所需的常见系统管理任务。

The Solution using Cpanel or Similar Software

cPanel 会编译自己版本的软件。

如果您必须在普通的 Linux 平台上重新编译您的 Web 服务器,例如 Apache,您必须手动选择/搜索所需的模块。cPanel 提供了 Easyapache 功能,这是一种基于脚本的 Web 服务器编译方法。

The Solution using Cpanel or Similar Software

它不仅为您提供 Web 服务,还提供邮件、DNS、FTP 以及您的 Web 应用程序所需的许多其他服务。

在核心 Linux/Unix 托管中需要专业知识的任务,例如安装 SSL、使用不同的 PHP 模块重新编译 Apache、更新 Web 安全性、配置有效的 IPTABLE 规则、添加 ftp 用户、为每个域创建邮件帐户、使用防病毒软件扫描您的文档根目录以及创建数据库,使用 cPanel 可以轻松完成。

它提供了许多脚本,可以修复、安装和排查常见的管理任务。

它提供备份和恢复功能,无需手动将文件复制到备份存储。如果您要备份您的域名,cPanel 将创建一个 tar 文件,其中包含文档根文件夹、电子邮件帐户和邮件、ftp 帐户、数据库、DNS 记录和其他应用程序。

它还提供了强大的文档,并拥有一个非常大的用户社区,您可以在其中讨论并获得问题的解决方案。

因此,可以说 cPanel 是管理您的 Web 服务器并具备所需功能的最佳应用程序。它为您提供易于使用的界面来管理您的域名,并提供一种机制来避免管理核心 Web 服务器的复杂性。

cPanel 有许多竞争产品,如 Plesk、ISPConfig、Ajenti、Kloxo、Open Panel、Zpanel 等。