个人工具
登录
查看“Serverguide”的源代码 - Ubuntu中文
页面
讨论
查看源代码
历史
搜索
导航
首页
最近更改
随机页面
页面分类
帮助
编辑
编辑指南
沙盒
新闻动态
字词处理
工具
链入页面
相关更改
特殊页面
页面信息
查看“Serverguide”的源代码
来自Ubuntu中文
←
Serverguide
跳转至:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
==== HTTPD - Apache2 Web 服务器 ==== Apache 是在 GNU/Linux 系统中最常用的 Web 服务器。Web 服务器为客户机所提交的网页请求服务。客户机一般通过网页浏览器如 Firefox、Opera 或 Mozilla 来请求和查看网页。 用户输入统一资源定位器 (URL) 来指向一个 Web 服务器,并通过完全限定域名 (FQDN) 和路径来请求资源。例如,要查看 Ubuntu 网站 的主页,用户只需要输入 FQDN 即可。如果要请求关于 有偿技术支持 的特定信息,用户将在 FQDN 后输入路径。 用于传输网页的最常用协议就是超文本传输协议 (HTTP)。也支持诸如基于安全套接层的超文本传输协议 (HTTPS) 以及用于上传和下载文件的文件传输协议 (FTP) 等协议。 Apache Web 服务器常与 MySQL 数据库引擎、超文本处理器 (PHP) 脚本语言及其他流行的脚本语言如Python 和 Perl 组合在一起。这一组合被称为 LAMP (Linux, Apache, MySQL and Perl/Python/PHP) ,并形成一个强大健壮的开发基于 Web 应用程序的开发平台。 ===== 4.10.1. 安装 ===== Apache2 web 服务器在 Ubuntu Linux 中是可用的。要安装 Apache2: **** 在终端提示符后输入下列命令: <pre><nowiki> sudo apt-get install apache2</nowiki></pre> ===== 4.10.2. 配置 ===== Apache 可以在纯文本配置文件中通过 语句 来配置的。主配置文件叫 apache2.conf。此外,其外配置文件可以用 Include 语句来添加,也可以使用通配符来包含多个配置文件。任何语句都可能被放在这些配置文件的任何一个文件中。修改过的主配置文件只在 Apach2 启动或重启时才能被其识别。 服务器也查看包含 mime 文档类型的文件;该文件名通过 TypesConfig 设置,缺省情况下是mime.types。 缺省的 Apache2 配置文件是 /etc/apache2/apache2.conf。您可以编辑该文件以配置 Apache2 服务器。您可以配置端口号、文档根目录、模块、日志文件及虚拟主机等。 ====== 4.10.2.1. 基本设置 ====== 本部分内容说明 Apache2 服务器基本的配置参数。详情请参阅 Apache2 文档 **** Apache2 提供了一个友好虚拟主机的缺省配置。它配置成单个缺省虚拟主机 (使用 VirtualHost 语句) 。如果您有单个站点,可以修改或直接使用它。如果您有多个站点的话,可以将其作为其它虚拟主机的模板。如果对其不加理会,该缺省虚拟主机将会作为您的缺省网站提供服务,或者如果网站用户所输入的 URL 并没有匹配您任何所定义站点的 ServerName 语句时,将看到该虚拟主机内容。要修改缺省虚拟主机,可以编辑文件 /etc/apache2/sites-available/default。如果您希望配置一个新的虚拟主机或站点,在同一目录中将拷贝该文件并将新文件重命名为您所想要的文件名,如sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/mynewsite。编辑新文件并用下面的所描述的语句来配置新的站点: **** ServerAdmin 语句指定服务器管理员的邮件地址,缺省值是 webmaster@localhost。应该改成您的邮件地址 (如果您是服务器管理员的话)。如果您的网站有问题,Apache2 将显示包含该邮件地址的错误信息以便报告该问题。在 /etc/apache2/sites-available 目录中您网站的配置文件里可以找到该语句。 **** Listen 语句指定端口以及可选的 IP 地址,Apache2 将在其上监听。如果 IP 地址没有被指定,Apache2 将监听所有指向其所运行机器上的 IP 地址。Listen 语句的缺省值是 80。把其改成 127.0.0.1:80 将使 Apache2 只在您的环回接口上临听以致于它相对于 Internet 不可用。也可改变其监听端口如81,或保持原样以便正常操作。该语句可以在它自己的文件 /etc/apache2/ports.conf 中发现并修改。 **** The ServerName 语句是可选的,它指明您站点要应答什么 FQDN。缺省虚拟主机没有指定 ServName,因为它要应答没有匹配其它虚拟主机 ServerName 语句的所有请求。如果您只获得 ubunturocks.com 域名并希望在您的 Ubuntu 服务器上只作它的主机,那么在您虚拟主机配置文件中的 ServerName 语句值应该是 ubunturocks.com。在您先前创建的新虚拟主机文件 (/etc/apache2/sites-available/mynewsite) 中添加该语句。 您也可能要您的网站响应 www.ubunturocks.com 的请求,因为许多用户会假定 www 前缀是适当的。可以使用 ServerAlias 语句来解决这个问题。您也可以在 ServerAlias 中使用通配符。例如,ServerAlias *.ubunturocks.com 将使您的网站响应任何域名以 .ubunturocks.com 结尾的请求。 **** DocumentRoot 语句指定 Apache 将到哪儿去寻找站点文件,缺省值为 /var/www。没有站点配置在那里,但如果您反注释在 /etc/apache2/apache2.conf 中的 RedirectMatch 语句,请求将被重定向到 /var/www/apache2-default,那里是缺省的 Apache2 站点。在您站点的虚拟主机文件中改变该值,记住在必要时可以创建相应的目录! /etc/apache2/sites-available 目录并 不会 被 Apache2 解析。在 /etc/apache2/sites-enabled 的软链接指向 "可用的" 站点。使用 a2ensite (Apache2 启用站点) 工具可以创建这些软链接,如:sudo a2ensite mynewsite 这里您站点的配置文件是 /etc/apache2/sites-available/mynewsite。同样,a2dissite 工具将用来禁用站点。 ====== 4.10.2.2. 缺省设置 ====== 这部分内容说明 Apache2 服务器缺省设置的配置。举个例子,如果您添加一个虚拟主机,您为该虚拟主机配置的设置将优先于缺省虚拟主机。如果在该虚拟主机的设置中有个语句没有定义,那么将使用缺省值。 **** 当用户在目录名后使用斜杠 (/) 来请求一个目录索引时,The DirectoryIndex 将通过服务器提供缺省页服务。 例如,当一个用户请求 http://www.example.com/this_directory/ 页时,他或她要么得到 DirectoryIndex 页,如果它存在的话;要么得到一个服务器生成的目录列表,如果它不存在且设置了 Indexes 选项的话;要么就得到一个无权访问页,如果它不存在且没有设置 Indexes 选项的话。服务器尝试找到在 DirectoryIndex 语句中所列文件之一,并返回它所找到的第一个。如果它没有找到任何一个文件且该目录设置了 Indexes 选项,服务器将生成并返回一个 HTML 格式的列表,包括该目录中的子目录和文件。缺省值可以在 /etc/apache2/apache2.conf 文件中找到,是 " index.html index.cgi index.pl index.php index.xhtml"。因此,如果 Apache2 在所请求的目录中找到任何一个匹配这些名字的文件,第一个将被显示。 **** ErrorDocument 语句允许您为 Apache 指定一个用于特定错误事件的文件。例如,如果用户请求的资源不存在,那么将引发 404 错误,而在 Apache2 的缺省配置中,文件 /usr/share/apache2/error/HTTP_NOT_FOUND.html.var 将被显示。该文件并不在服务器的 DocumentRoot 中,但在 /etc/apache2/apache2.conf 中有个别名语句将到 /error 目录的请求重定向到 /usr/share/apache2/error/ 中。要查看缺省的 ErrorDocument 语句列表,可以使用命令:grep ErrorDocument /etc/apache2/apache2.conf **** 在缺省状态下,服务器将传输日志记录在文件 /var/log/apache2/access.log 中。您可以在您每个虚拟主机站点的配置文件上用 CustomLog 语句来改变它,或者忽略它以接受在 /etc/apache2/apache2.conf 中指定的缺省设置。您也可以通过 ErrorLog 语句来指定记录错误日志的文件,该文件缺省是 /var/log/apache2/error.log。这些都从传输日志中分离出来以便更好地在您的 Apache2 服务器中发现和解决问题。您也可以指定 LogLevel (缺省值是 "warn") 和 LogFormat (缺省值参见 /etc/apache2/apache2.conf) **** 一些选项是基于每目录而非每服务器的。Option 是这些语句中的一个。Directory 段是被放在类 XML 标记中,如: <pre><nowiki> <Directory /var/www/mynewsite> ... </Directory></nowiki></pre> 在 Directory 段中的 Options 语句接受一个或更多下面的用空格分隔的值 (包括其它): * ExecCGI - 允许执行 CGI 脚本。如果该选项没有设置,则 CGI 脚本将不能执行。 大多数文件不会作为 CGI 脚本运行的。这是非常危险的。CGI 脚本应该位于您 DocumentRoot 目录以外与之分开的目录中,并且只能该目录才有 ExecCGI 选项设置。缺省状态下,CGI 脚本默认位于 /usr/lib/cgi-bin。 * Includes - 允许服务器端包含。服务器端包含允许一个 HTML 文件包含其他文件。这不是一个常用选项。更多信息参见 the Apache2 SSI 指南。 * IncludesNOEXEC - 允许服务器端包含,但 CGI 脚本中的 #exec 和 #include 指令无效。 * Indexes - 如果 DirectoryIndex (如 index.html) 在请求的目录没存在的话,按一定方式显示目录内容列表。 * Multiview - 支持内容协商的多重视图;该选项在缺省状态下出于安全的考虑是被禁用的。参见 Apache2 关于该选项的文档。 * SymLinksIfOwnerMatch - 仅在软连接与其目的文件或目录拥有相同所有者时才使用。 ====== 4.10.2.3. 虚拟主机设置 ====== 虚拟主机允许您在同一台机器上相对不同的 IP 地址、主机名或不同端口号运行不同的服务器。例如,您可以运行使用虚拟主机在同一个 Web 服务器上运行网站 http://www.example.com 和 http://www.anotherexample.com。这一选项适用于缺省虚拟主机和基于 IP 的虚拟主机的 <VirtualHost> 语句,也适用于基于名称的虚拟主机的 <NameVirtualHost> 语句。 虚拟主机的语句设置仅应用于特定的虚拟主机。如果一个语句在服务器范围中设置而没有在虚拟主机设置中定义,那么将使用缺省设置。例如,您可以定义网络管理员的邮件地址而无需为每个虚拟主机都分别定义邮件地址。 为虚拟主机设置 DocumentRoot 语句到包含根文档 (如 index.html) 目录。缺省的 DocumentRoot 是 /var/www。 在 VirtualHost 段中的 ServerAadmin 语句是指用于错误页的页脚中的邮件地址,如果您想在错误页的页脚显示邮件地址的话。 ====== 4.10.2.4. 服务器设置 ====== 这部分内容说明如何配置基本的服务器设置。 LockFile - 当服务器编译时使用了 USE_FCNTL_SERIALIZED_ACCEPT 或 USE_FLOCK_SERIALIZED_ACCEPT 参数时,使用 LockFile 语句来设置 lockfile 的路径。它必须保存在本地磁盘上,它应该设置成缺省值,除非日志目录被定位在 NFS 共享上。如果是这种情况,缺省值应该被改为本地磁盘的位置并且其目录只对 root 用户可读。 PidFile - PidFile 语句设置服务器记录其进程 ID (pid) 的文件。该文件只对 root 用户可读。在大多数情况下,应该保留其缺省值。 User - 用户语句设置被服务器用于回应请求的用户 ID。该设置决定服务器的权限。一些该用户无法访问的文件也无法被您网站的访问者访问。用户缺省值是 www-data。 除非您的确知道您在做什么,否则请不要将 User 设为 root 用户。用 root 作为 User 的值将会在您的 Web 服务器中产生极大的安全漏洞。 Group 语句同 User 语句相似。Group 设置被服务器用于回应请求的用户组。缺省的组也是 www-data。 ====== 4.10.2.5. Apache 模块 ====== Apache 是一个模块化的服务器。这就意味着在核心服务器中只包括最基本的功能。扩展功能可以通过被引导进 Apache 的模块来实现。缺省情况下,基本模块是在编译时被包含进服务器的。如果服务器编译成可以动态引导模块,那么模块可以单独编译,并在任何时候使用 LoadModule 语句来添加。否则,Apache 必须在添加或删除模块时重新编译。Ubuntu 编译 Apache2 时是允许动态引导模块的。配置语句通过将已有模块放置 <IfModule> 块中以便有条件地包含在配置语句中。您可以在您的 Web 服务器上安装和使用额外的 Apache2 模块。您可以用 apt-get 命令来安装 Apache2 模块。如安装 MYSQL 认证的 Apach2 模块,您可以在终端提示符中运行以下命令: <pre><nowiki> sudo apt-get install libapache2-mod-auth-mysql</nowiki></pre> 一旦您安装了模块,模块将出现在 /etc/apache2/mods-available 目录中。您可以使用 a2enmod 命令来启用模块。您也可以使用 a2dismod 命令来禁用模块。一旦您启用该模块,该模块将在 /etc/apache2/mods-enabled 目录中出现。 ===== 4.10.3. HTTPS 配置 ===== The mod_ssl 模块为 Apache2 服务器添加了一个重要的功能 - 通讯加密的能力。因此,当您的浏览器要用 SSL 加密通讯时,需要在浏览器导航栏中在输入的统一资源定位器 (URL) 的开始处使用 https:// 前缀。 mod_ssl 模块已经包含在 apache2-common 软件包中。如果您安装该软件包,您可以在终端提示符之后执行下列命令启用 mod_ssl 模块: <pre><nowiki> sudo a2enmod ssl</nowiki></pre> ====== 4.10.3.1. 证书和安全 ====== 要设置您的安全服务器,使用公共钥创建一对公钥私钥对。大多数情况下,您发送您的证书请求 (包括您的公钥),您公司证明材料以及费用到一个证书颁发机构 (CA)。CA 检证证书请求及您的身份,然后将证书发回您的安全服务器。 还有种办法就是您可以创建您自己签署的证书。然而请注意自己签置的证书不应该用于生产环境。自已签署的证书不会被用户浏览器自动接受。浏览器将提示用户接受证书并创建一个安全的连接。 一旦您有一个自己签署的证书或一个您选择的 CA 签署的证书,您需要将它安装在您的安全服务器上。 ====== 4.10.3.2. 证书类型 ====== 您需要一个钥匙和一个证书来操作您的安全服务器,这意味着您可以生成自己签署的证书或购买 CA 签署的证书。由 CA 签署的证书为您的服务器提供两个重要的功能: **** 浏览器 (通常) 会自动地识别证书并且在不提示用户的情况下允许创建一个安全连接。 **** 当一个 CA 生成一个签署过的证书,它为提供网页给浏览器的组织提供身份担保。 多数支持 SSL 的 Web 浏览器都有一个 CA 列表,它们的证书会被自动接受。如果一个浏览器遇到一个其授权 CA 并不在列表中的证书,浏览器将询问用户是否接受或拒绝连接。 您可以为您的安全服务器生成一个自己签署的证书,但要知道自己签署的证书并不提供与 CA 签署的证书相同的功能。自己签署的证书不会被多数 Web 浏览器自动识别,而且自己签署的证书也不为任何提供网站的组织提供担保。CA 签署的证书为安全服务器提供所有这些重要的功能。从 CA 得到证书的过程相当容易。下面简要介绍一下: *** 创建一个私有和公共密钥对 *** 基于公钥创建一个证书请求。证书请求包含您服务器及公司信息。 *** 发送证书请求,并随之提供您的身份文档到一个 CA。我们不能告诉您选择哪个证书颁发机构。您可以基于您以往的经验或您朋友或同事的经验或纯粹基于经济因素来决定。 一旦您选定一家 CA,您需要根据他们所提供的规程来从他们那里获得证书。 *** 当 CA 确定您确实如您所声称的那样时,他们将发给您一个数字证书。 *** 在您的安全服务器上安装该证书,并开始进行安全事务处理 无论您是从一家 CA 那儿获得证书或是生成您自己签署的证书,第一步就是生成钥匙。 ====== 4.10.3.3. 生成一个证书签署请求 (CSR) ====== 要生成证书签署请求 (CSR),您应该创建您自己的钥匙。您可以在终端提示符后运行以下命令以创建钥匙: <pre><nowiki> openssl genrsa -des3 -out server.key 1024</nowiki></pre> <pre><nowiki> Generating RSA private key, 1024 bit long modulus .....................++++++ .................++++++ unable to write 'random state' e is 65537 (0x10001) Enter pass phrase for server.key:</nowiki></pre> 您现在可以输入您的 passphrase。为了最大程度的安全,它至少应该包含八个字符。当指定 -des3 时最小长度为四个字符。它应该包含数字和/或标点符号,并且不应该是字典中的单词。也请记住您的 passphrase 是大小写敏感的。 再次输入 passphrase 核对。一旦您再次输入正确的话,服务器密钥就生成了并保存在 server.key 文件中。 您也可以不用 passphrase 来运行您的安全 Web 服务器。这样比较方便,因为在您启动您的安全 Web 服务器时您不需要每次都输入 passphrase。但它也是相当不安全的,钥匙的风险也同样意味着服务器的风险。 在任何情况下,您都可以选择不用 passphrase 来运行您的安全 Web 服务器,这可以通过在生成时不带 -des3 参数来实现或者通过在终端提示符后执行以下命令: <pre><nowiki> openssl rsa -in server.key -out server.key.insecure</nowiki></pre> 一旦您运行上述命令,不安全的钥匙将被保存在 server.key.insecure 文件中。您可以使用该文件来生成没有 passphrase 的 CSR。 要创建 CSR,可以在终端提示符后运行以下命令: <pre><nowiki> openssl req -new -key server.key -out server.csr</nowiki></pre> 它将提示您输入 passphrase。如果您输入正确的 passphrase,它将提示您输入公司名、站点名、邮件ID等。一旦您输入了所有内容,您的 CSR 将被创建并被保存在 server.csr 文件中。您可以提交该 CSR 文件给一家 CA 去处理。CA 将使用该 CSR 并颁发证书。但是,您也可以使用该 CSR 生成自己签署的证书。 ====== 4.10.3.4. 创建一个自己签署的证书 ====== 要创建自己签署的证书,在终端提示符下运行以下命令: <pre><nowiki> openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt</nowiki></pre> 上述命令将提示您输入 passphrase。一旦您输入正确的 passphrase,您的证书将被创建并将保存在 server.crt 文件中。 如果您的安全服务器被用在生产环境中,你也许需要 CA 签署的证书。并不推荐使用自己签署的证书。 ====== 4.10.3.5. 安装证书 ====== 您可以安装钥匙文件 server.key 和证书文件 server.crt 或由您的 CA 颁发的证书文件,在终端提示符后运行以下命令: <pre><nowiki> sudo cp server.crt /etc/ssl/certs sudo cp server.key /etc/ssl/private</nowiki></pre> 您要添加以下四行到 /etc/apache2/sites-available/default 文件或您安全虚拟主机的配置文件。您要将它们放在 VirtualHost 部分。他们应该放在 DocumentRoot 行下面: <pre><nowiki> SSLEngine on SSLOptions +FakeBasicAuth +ExportCertData +CompatEnvVars +StrictRequire SSLCertificateFile /etc/ssl/certs/server.crt SSLCertificateKeyFile /etc/ssl/private/server.key</nowiki></pre> HTTPS 在 443 端口监听。您可以将下面一行添加到 /etc/apache2/ports.conf 文件中: <pre><nowiki> Listen 443</nowiki></pre> ====== 4.10.3.6. 访问服务器 ====== 一旦您安装了您的证书,您应该重启您的 Web 服务器。您可以在终端提示符后运行以下命令以重启您的 web 服务器: <pre><nowiki> sudo /etc/init.d/apache2 restart</nowiki></pre> 您应该记住并在每次您启动您的安全 web 服务器时输入 passphrase。 您将被提示输入 passphrase。一旦您输入正常的 passphrase,将启动安全 web 服务器。您可以通过在您的浏览器地址栏上输入 https://your_hostname/url/ 来访问安全服务器的页面。 ===== 4.10.4. 引用 ===== [http://httpd.apache.org/docs/2.0/ Apache2 文档] [http://www.modssl.org/docs/ Mod SSL 文档]
返回至
Serverguide
。