Ubuntu/Web Servers/HTTPD - Apache2 Web Server:修订间差异
小无编辑摘要 |
|||
(未显示同一用户的33个中间版本) | |||
第1行: | 第1行: | ||
本文引自[https://help.ubuntu.com/16.04/serverguide/httpd.html HTTPD - Apache2 Web Server]. 返回[[Ubuntu/Web Servers]]. | |||
Apache是Linux系统中最广泛使用的Web Server。众多的Web Server被客户端计算机使用以提供相关的Web页面请求服务。客户端通常使用Web Browser发出请求并浏览Web页面,诸如''Firefox''、''Opera''、''Chromium''或者''Mozilla''。 | Apache是Linux系统中最广泛使用的Web Server。众多的Web Server被客户端计算机使用以提供相关的Web页面请求服务。客户端通常使用Web Browser发出请求并浏览Web页面,诸如''Firefox''、''Opera''、''Chromium''或者''Mozilla''。 | ||
用户输入的统一资源定位符(URL)指向一个Web | 用户输入的统一资源定位符(URL)指向一个Web server,并依赖其其全称域名(FQDN)及路径指向需要的资源。例如,用户可以输入下面的FQDN以浏览[http://www.ubuntu.com/ Ubuntu Web site]的主页: | ||
<pre> | <pre> | ||
第9行: | 第9行: | ||
</pre> | </pre> | ||
要浏览[https://community.ubuntu.com/ community]子页面则可以输入下面的FQDN: | |||
<pre> | <pre> | ||
第30行: | 第30行: | ||
=Installation= | =Installation= | ||
Apache2 web server在Ubuntu Linux中是可用的。在terminal提示符下输入下面指令以安装Apache2: | |||
<pre> | |||
sudo apt-get install apache2 | |||
</pre> | |||
=Configuration= | =Configuration= | ||
Apache2的配置指令存放于多个纯文本的配置文件中。这些配置指令被分割为多个文件并放置于多个目录中: | |||
# ''apache2.conf'': Apache2的主配置文件。它包含Apache2的一些全局设置。 | |||
# ''conf.d'': 目录,包含一些Apache2的全局配置文件。Apache2的其他内容服务包可以添加文件,符号链接到这个目录。 | |||
# ''envvars'': 用于设置Apache2环境变量的文件。 | |||
# ''httpd.conf'': 历史上是Apache2的主配置文件,命名的httpd守护进程。现在,这个文件通常是空的,大多配置选项被移动到下面的引用目录。这个文件可用于用户指定特定的配置选项并作用于全局Apache2。 | |||
# ''mods-available'': 这个目录包含多个配置文件以装载和配置他们。当然不是所有模块都将拥有特定的配置文件。 | |||
# ''mods-enabled'': 持有符号链接的文件存放于/etc/apache2/mods-available。当一个模块配置文件持有符号链接时,它们将在apache2下次启动后生效。 | |||
# ''ports.conf'': 放置的指令用于描述Apache2正在监听的TCP端口。 | |||
# ''sites-available'': 该目录用于存放Apache2虚拟主机的配置文件。虚拟主机允许Apache2使用分开的配置去配置多个站点。 | |||
# ''sites-enabled'': 如同mods-enabled、sites-enabled包含符号链接并存放于/etc/apache2/sites-available目录。同样地,当在sites-available中的一个配置文件是符号链接时,在Apache2重新启动时该配置站点将被激活一次。 | |||
此外,其他的配置文件可以通过Include指令添加,并且通配符可以被使用以包含多个配置文件。任何指令都可以被放置在这些配置文件中。主配置文件的更新仅在Apache2启动或重启动时才能被识别并应用。 | |||
服务器也将读取一个包含mime文档类型的文件;改文件名通过TypesConfig指令设置,通常经由/etc/apache2/mods-available/mime.conf,它可以包含附加和重写,缺省是/etc/mime.types。 | |||
: 基本设置 | |||
: <hr/> | |||
: 这一节解释Apache2服务器基本配置参数。更多细节请参阅[http://httpd.apache.org/docs/2.4/ Apache2 Documentation]。 | |||
# Apache2附带一个虚拟主机友好的缺省配置。也就是说,它被配置为有一个缺省的虚拟主机(使用VirtualHost指令)并且这个虚拟主机可以被修改或直接使用如同你有了一个站点;或者如果你有多个站点,它也可作为其他虚拟主机模板使用。假如只有一个站点,该缺省虚拟主机将作为你的缺省站点;或者,当用户输入的URL与ServerName指令不匹配时用户也将看到此站点。要修改缺省虚拟主机设置,可以编辑文件/etc/apache2/sites-available/default。<br/><span style="background:lightgray">该虚拟主机设置指令只适用于待定的虚拟主机。如果一个指令定义的服务器范围没有在虚拟主机设置中被定义,则使用这个缺省设置。例如,你能定义一个Webmaster邮件地址但是没有为每个虚拟主机定义单独的邮件地址。</span><br/>如果你希望配置一个新的虚拟主机或站点,则以另一文件名拷贝该文件到同一目录下。例如:<br/><code style="background-color:lightgray">sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/mynewsite</code><br/>按下列指令及描述编辑该新文件以配置这个新站点。 | |||
# ''ServerAdmin''指令指明服务器管理员的邮件地址。其缺省值是webmaster@localhost。它应更新为递送到你的邮件地址(如果你是服务器管理员)。如果你的站点有问题,Apache2将把这个邮件地址包含在消息中并报告相关问题。包含该指令的配置文件可以在/etc/apache2/sites-available中找到。 | |||
# ''Listen''指令用于指明端口以及可选的IP地址,以便Apache2侦听。如果IP地址没有被指明,Apache2将侦听所有分配到该机的IP地址。该''Listen''指令的缺省值是80。改变这个值为127.0.0.1:80 将引起Apache2只侦听本地回环接口这将导致它在互联网上是不可用的,对于(例如)81设置将改变侦听端口,或放弃正常的设置。这个指令可以被找到并更改在文件/etc/apache2/ports.conf | |||
# ''ServerName''指令是一个可选的,它用于指定你的站点应答的FQDN。缺省的虚拟主机没有定义''ServerName''设置,所以虚拟机将响应所有与''ServerName''指令不匹配的请求。如果你捕获了域名ubunturocks.com并且希望在你的Ubuntu服务器上主持它,则''ServerName''指令需要在你的虚拟主机配置文件中设置为ubunturocks.com。添加这个指令到你早先建立的新的虚拟主机文件(/etc/apache2/sites-available/mynewsite)。<br/>你或许也想让你的站点响应www.ubunturocks.com,因为很多用户都会假定www前缀是恰当的,这个情况可以使用''ServerAlias''指令解决。你也可以使用通配符在''ServerAlias''指令中。<br/>例如,以下配置将导致你的站点响应任何以.ubunturocks.com结束的域请求。<br/><code style="background-color:lightgray">ServerAlias *.ubunturocks.com</code> | |||
# ''DocumentRoot''指令指明Apache2将在什么地方找到构成站点文件。缺省值是/var/www,它被存于/etc/apache2/sites-available/default。如果愿意,可以在你虚拟主机站点文件中改变这个值,并且在必要是创建该目录! | |||
: 允许新的VirtualHost请使用a2ensite工具并且重启Apache2:<br/><code style="background-color:lightgray">sudo a2ensite mynewsite<br/>sudo service apache2 restart</code> | |||
:: <span style="background-color:lightgray">针对VirtualHost请确保使用更具描述性的名称替换''mynewsite''。方法之一是该VirtualHost的ServerName指令后命名它。</span> | |||
: 类似的,使用a2dissite工具以禁用站点。这也可用于针对多虚拟主机的故障排除配置:<br/><code style="background-color:lightgray">sudo a2ensite mynewsite<br/>sudo service apache2 restart</code> | |||
: 缺省设置 | |||
: <hr> | |||
: 这一节介绍Apache2服务器的缺省设置。例如,如果你添加一个虚拟主机,缺省配置要优先于其他的虚拟主机设置,对于没有定义虚拟主机,缺省设置将被使用。 | |||
# ''DirectoryIndex''是默认页面,当用户请求服务器目录时指定斜杠(/)的目录名称后将被使用。<br/>例如,当用户请求http://www.example.com/this_directory/时,他或她得到DirectoryIndex指定的页如果这个页面存在,对于服务器生成的目录列表,如果没有Indexes选项被指定,或者页面的访问权限被拒绝。服务器将尝试发现''DirectoryIndex''指令指定的文件,如果有或有多个则第一个将返回给请求。如果没找到或这Options Indexes设置为目录,服务器将生成一个HTML格式的目录表并列出目录中的文件和子目录。对于缺省值如果/etc/apache2/mods-available/dir.conf指定是"index.html index.cgi index.pl index.php index.xhtml index.htm"。对于这种情况,Apache2一旦发现任何匹配的文件则第一个将被显示。 | |||
# ''ErrorDocument'' 指令允许你为Apache2指定一个错误事件时使用的文件。例如,如果用户请求的资源不存在,则404错误将发生。缺省情况下,Apache2将简单的返回一个HTTP 404代码。更细节的有关使用''ErrorDocument''的指导请读/etc/apache2/conf.d/localized-error-pages文件以及相关的示例文档。 | |||
# 缺省情况下,服务器将写日志到/var/log/apache2/access.log文件。你可以针对每个站点单独进行设置,设置通过虚拟主机配置文件的''CustomLog''指令完成,或者省略它而接受缺省值,配置文件在/etc/apache2/conf.d/other-vhosts-access-log。你也可以在这个文件中指定哪些错误需要日志,这个通过''ErrorLog''指令完成,它的缺省设置在/var/log/apache2/error.log。在Apache2服务器中,日志及故障问题等都保持分开的设置。你也可以指定''LogLevel''(缺省值是"warn")及''LogFormat''(请参看/etc/apache2/apache2.conf中的缺省值)。 | |||
# 一些选项也可以针对一个预设的目录(per-directory)来指定而不是一台预设的服务器(per-server)。所谓''Options''就是以上指令。一个Directory将被封装在一个XML类似的标签内,例如:<br/><code style="background-color:lightgray"><Directory /var/www/mynewsite><br/>...<br/></Directory></code><br/>在Directory标签内的选项指令也接受一个或多个以空格分开的以下设置值: | |||
:# '''ExecCGI''' - 允许执行CGI脚本。如果没有选择此选项则CGI脚本不会被执行。 | |||
:#: <span style="background-color:lightgray">如同CGI脚本,多数文件都不应该被执行。脚本执行是非常危险的。CGI应该保存于你的DocumentRoot之外的一个独立的目录中,并且只有这个目录拥有ExecCGI选项设置。对此的一个缺省设置在/usr/lib/cgi-bin。</span> | |||
:# '''Includes''' - 允许服务器端包含(server-side)。服务器端包含允许一个HTML文件包含其他文件。请参看[https://help.ubuntu.com/community/ServerSideIncludes Apache SSI documentation (Ubuntu community)]以获取更多的信息。 | |||
:# '''IncludesNOEXEC''' - 允许服务器端包含,但是禁止CGI脚本中的''#exec''和''#include''命令。 | |||
:# '''Indexes''' - 在一个请求的目录中,如果没有''DirectoryIndex'' 设置(例如index.html),则显示一个目录内容为一个格式化的列表。 | |||
:#: <span style="background-color:lightgray">出于安全的原因,它通常是不设置的,尤其是你的DocumentRoot目录。如果你确实需要看到目录的全部内容,你应该针对每个目录小心的使用这个设置。</span> | |||
:# '''Multiview''' - 支持content-negotiated的多视图;出于安全原因,这个选项缺省是禁止的。请参看[http://httpd.apache.org/docs/2.4/mod/mod_negotiation.html#multiviews Apache2 documentation]有关此选项的内容。 | |||
:# '''SymLinksIfOwnerMatch''' - 作为链接,如果目标文件或目录有相同的宿主则链接遵循符号链接。 | |||
: httpd设置 | |||
: <hr> | |||
: 这一节解释一些基本httpd守护进程的配置设置。 | |||
: '''LockFile''' - 本LockFile指令用于设置lockfile的路径,它用于服务器被编译过程中的USE_FCNTL_SERIALIZED_ACCEPT或USE_FLOCK_SERIALIZED_ACCEPT。它必须存储与本地磁盘。它应该被设置为缺省值,除非日志目录共享于一个网络文件系统中。如果是这样,该缺省值应该设置为在本地磁盘的一个位置,并且这个目录在根上是只读的。 | |||
: '''PidFile''' - PidFile指令设置这个文件以便服务器记录其进程ID(pid)。这个文件应该在根上是可读的。多数情况下,它应该设置为缺省值。 | |||
: '''User''' - User指令用于设置用户ID(userid)它将被服务器用于请求应答。此设置确定了服务器是可访问的。该用户无法访问的文件对于你的站点访客来说也是无法访问的。这个选项的缺省值是"www-data"。 | |||
:: <span style="background-color:lightgray">除非你知道你在做什么,请不要设置User指令到根(root)。User指令设置到根(root)将为你的网站带来巨大的安全隐患。</span> | |||
: '''Group''' - Group指令类似于User指令。Group设置分组用于服务器下的请求响应。该指令的缺省设置也是"www-data"。 | |||
: Apache2模块 | |||
: <hr> | |||
: Apache2是一个模块化的服务器。这意味着只有最基本的功能被纳入核心服务器。其他扩展的功能则是通过模块载入Apache2的。缺省情况下,服务器编译时只包含了一套基本的模块。如果服务器被编译为使用模块的动态装载,那么模块可以单独地被编译,并且可以通过''LoadModule''指令随时添加模块。否则,Apache2在添加和移除模块时必须被编译。 | |||
: Ubuntu编译Apache2允许模块的动态装载。配置指令可以用条件包含,需要的模块可以放置在一个封闭的''<IfModule>''块中。 | |||
: 你也可在你的Web服务器中安装其他Apache2模块。例如,运行下面终端命令以安装认证的''MySQL''模块:<br/><code style="background-color:lightgray">sudo apt-get install libapache2-mod-auth-mysql</code> | |||
: 参看/etc/apache2/mods-available目录下相关的附加模块。 | |||
: 使用a2enmod工具以允许一个模块:<br/><code style="background-color:lightgray">sudo a2enmod auth_mysql</code><br/><code style="background-color:lightgray">sudo service apache2 restart</code> | |||
: 同样地,a2dismod也可以禁止一个模块:<br/><code style="background-color:lightgray">sudo a2dismod auth_mysql</code><br/><code style="background-color:lightgray">sudo service apache2 restart</code> | |||
=HTTPS Configuration= | =HTTPS Configuration= | ||
''mod_ssl''模块为Apache2服务器添加了一个重要的功能 - 加密通信的能力。由此,当你的浏览器通信使用SSL时,<nowiki>https://</nowiki>前缀被使用于统一资源定位符(URL)前。 | |||
''mod_ssl''模块存放于''apache2-common''包中。在终端提示符下执行以下命令以允许''mod_ssl''模块:<br/><code style="background-color:lightgray">sudo a2enmod ssl</code> | |||
在/etc/apache2/sites-available/default-ssl.conf中有一个缺省的SSL配置。为了让Apache2提供HTTPS,你还需要一个certificate(证书)和一个key文件。缺省的HTTPS配置使用的证书和key是有ssl-cert包生成的。他们用于测试非常好,但是对于特定的服务器或网站,它们需要被取代。如何生成key并获得证书请参看[https://help.ubuntu.com/12.04/serverguide/certificates-and-security.html Certificates] | |||
配置Apache2 HTTPS请输入下面指令:<br/><code style="background-color:lightgray">sudo a2ensite default-ssl</code> | |||
: <span style="background-color:lightgray">指令的缺省位置在/etc/ssl/certs 及 /etc/ssl/private。如果你安装了证书和key到其他目录,请确保正确更改SSLCertificateFile 及 SSLCertificateKeyFile。</span> | |||
完成Apache2的HTTPS配置后,重启服务以使新配置生效:<br/><code style="background-color:lightgray">sudo service apache2 restart</code> | |||
: <span style="background-color:lightgray">依赖你证书获得的方式,当重新启动Apache2时或许你会被要求一个密码。</span> | |||
通过键入<nowiki>https://your_hostname/url/</nowiki>你可访问你的安全站点。 | |||
=Sharing Write Permission= | =Sharing Write Permission= | ||
为了分享同一目录的多用户写入权限,把该目录的写入权限授予一个分组是必要的。下面的例子把/var/www/html目录的写入权限授予"webmasters"分组。 | |||
<pre> | |||
sudo chgrp -R webmasters /var/www/html | |||
sudo find /var/www/html -type d -exec chmod g=rwxs "{}" \; | |||
sudo find /var/www/html -type f -exec chmod g=rw "{}" \; | |||
</pre> | |||
这些命令递归地设置组权限到/var/www/html下的所有文件和目录,以保证该组用户对该目录的读写权限。也就是说,该目录下的文件和目录将从它们的父亲继承相应的组权限。很多管理员发现这对多用户编辑同一目录树非常有效。 | |||
: <span style="background-color: lightgray">如果必须授权一个目录的访问到多个组,允许访问控制列表(ACLs)。</span> | |||
=References= | =References= | ||
# [http://httpd.apache.org/docs/2.4/ Apache2 Documentation] 包含有关Apache2配置指令的深度信息。也可以参考''apache2-doc''中相关的Apache2官方文档。 | |||
# 参看[http://www.modssl.org/docs/ Mod SSL Documentation]站点以发现更多的SSL相关信息。 | |||
# O'Reilly's [http://shop.oreilly.com/product/9780596001919.do Apache Cookbook] 是一个跟好的资源以完成特别的Apache2配置。 | |||
# 有关Ubuntu Apache2的问题,可以问''#ubuntu-server'' IRC channel on [http://freenode.net/ freenode.net]. | |||
# 有关PHP和MySQL的集成问题[https://help.ubuntu.com/community/ApacheMySQLPHP Apache MySQL PHP Ubuntu Wiki]是一个很好的资源。 |
2016年6月8日 (三) 15:02的最新版本
本文引自HTTPD - Apache2 Web Server. 返回Ubuntu/Web Servers.
Apache是Linux系统中最广泛使用的Web Server。众多的Web Server被客户端计算机使用以提供相关的Web页面请求服务。客户端通常使用Web Browser发出请求并浏览Web页面,诸如Firefox、Opera、Chromium或者Mozilla。
用户输入的统一资源定位符(URL)指向一个Web server,并依赖其其全称域名(FQDN)及路径指向需要的资源。例如,用户可以输入下面的FQDN以浏览Ubuntu Web site的主页:
www.ubuntu.com
要浏览community子页面则可以输入下面的FQDN:
www.ubuntu.com/community
最常见的用于传输Web Page的协议是超文本传输协议(HTTP)。其他协议还包括超文本传输协议加安全套接字层的(HTTPS),以及文件传输协议(FTP)用于上传和下载文件,它们均是被支持的协议。
Apache Web Server常常与MySQL数据库引擎组合使用,超文本预处理器的脚步语言(PHP),以及其他流行的脚本语言如Python和Perl。这个配置被术语化为LAMP(Linux, Apache, MySQL and Perl/Python/PHP)它们针对开发和部署基于Web的应用形成了一个强大健壮的平台。
Installation
Apache2 web server在Ubuntu Linux中是可用的。在terminal提示符下输入下面指令以安装Apache2:
sudo apt-get install apache2
Configuration
Apache2的配置指令存放于多个纯文本的配置文件中。这些配置指令被分割为多个文件并放置于多个目录中:
- apache2.conf: Apache2的主配置文件。它包含Apache2的一些全局设置。
- conf.d: 目录,包含一些Apache2的全局配置文件。Apache2的其他内容服务包可以添加文件,符号链接到这个目录。
- envvars: 用于设置Apache2环境变量的文件。
- httpd.conf: 历史上是Apache2的主配置文件,命名的httpd守护进程。现在,这个文件通常是空的,大多配置选项被移动到下面的引用目录。这个文件可用于用户指定特定的配置选项并作用于全局Apache2。
- mods-available: 这个目录包含多个配置文件以装载和配置他们。当然不是所有模块都将拥有特定的配置文件。
- mods-enabled: 持有符号链接的文件存放于/etc/apache2/mods-available。当一个模块配置文件持有符号链接时,它们将在apache2下次启动后生效。
- ports.conf: 放置的指令用于描述Apache2正在监听的TCP端口。
- sites-available: 该目录用于存放Apache2虚拟主机的配置文件。虚拟主机允许Apache2使用分开的配置去配置多个站点。
- sites-enabled: 如同mods-enabled、sites-enabled包含符号链接并存放于/etc/apache2/sites-available目录。同样地,当在sites-available中的一个配置文件是符号链接时,在Apache2重新启动时该配置站点将被激活一次。
此外,其他的配置文件可以通过Include指令添加,并且通配符可以被使用以包含多个配置文件。任何指令都可以被放置在这些配置文件中。主配置文件的更新仅在Apache2启动或重启动时才能被识别并应用。
服务器也将读取一个包含mime文档类型的文件;改文件名通过TypesConfig指令设置,通常经由/etc/apache2/mods-available/mime.conf,它可以包含附加和重写,缺省是/etc/mime.types。
- 基本设置
- 这一节解释Apache2服务器基本配置参数。更多细节请参阅Apache2 Documentation。
- Apache2附带一个虚拟主机友好的缺省配置。也就是说,它被配置为有一个缺省的虚拟主机(使用VirtualHost指令)并且这个虚拟主机可以被修改或直接使用如同你有了一个站点;或者如果你有多个站点,它也可作为其他虚拟主机模板使用。假如只有一个站点,该缺省虚拟主机将作为你的缺省站点;或者,当用户输入的URL与ServerName指令不匹配时用户也将看到此站点。要修改缺省虚拟主机设置,可以编辑文件/etc/apache2/sites-available/default。
该虚拟主机设置指令只适用于待定的虚拟主机。如果一个指令定义的服务器范围没有在虚拟主机设置中被定义,则使用这个缺省设置。例如,你能定义一个Webmaster邮件地址但是没有为每个虚拟主机定义单独的邮件地址。
如果你希望配置一个新的虚拟主机或站点,则以另一文件名拷贝该文件到同一目录下。例如: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只侦听本地回环接口这将导致它在互联网上是不可用的,对于(例如)81设置将改变侦听端口,或放弃正常的设置。这个指令可以被找到并更改在文件/etc/apache2/ports.conf
- ServerName指令是一个可选的,它用于指定你的站点应答的FQDN。缺省的虚拟主机没有定义ServerName设置,所以虚拟机将响应所有与ServerName指令不匹配的请求。如果你捕获了域名ubunturocks.com并且希望在你的Ubuntu服务器上主持它,则ServerName指令需要在你的虚拟主机配置文件中设置为ubunturocks.com。添加这个指令到你早先建立的新的虚拟主机文件(/etc/apache2/sites-available/mynewsite)。
你或许也想让你的站点响应www.ubunturocks.com,因为很多用户都会假定www前缀是恰当的,这个情况可以使用ServerAlias指令解决。你也可以使用通配符在ServerAlias指令中。
例如,以下配置将导致你的站点响应任何以.ubunturocks.com结束的域请求。ServerAlias *.ubunturocks.com
- DocumentRoot指令指明Apache2将在什么地方找到构成站点文件。缺省值是/var/www,它被存于/etc/apache2/sites-available/default。如果愿意,可以在你虚拟主机站点文件中改变这个值,并且在必要是创建该目录!
- 允许新的VirtualHost请使用a2ensite工具并且重启Apache2:
sudo a2ensite mynewsite
sudo service apache2 restart
- 针对VirtualHost请确保使用更具描述性的名称替换mynewsite。方法之一是该VirtualHost的ServerName指令后命名它。
- 类似的,使用a2dissite工具以禁用站点。这也可用于针对多虚拟主机的故障排除配置:
sudo a2ensite mynewsite
sudo service apache2 restart
- 缺省设置
- 这一节介绍Apache2服务器的缺省设置。例如,如果你添加一个虚拟主机,缺省配置要优先于其他的虚拟主机设置,对于没有定义虚拟主机,缺省设置将被使用。
- DirectoryIndex是默认页面,当用户请求服务器目录时指定斜杠(/)的目录名称后将被使用。
例如,当用户请求http://www.example.com/this_directory/时,他或她得到DirectoryIndex指定的页如果这个页面存在,对于服务器生成的目录列表,如果没有Indexes选项被指定,或者页面的访问权限被拒绝。服务器将尝试发现DirectoryIndex指令指定的文件,如果有或有多个则第一个将返回给请求。如果没找到或这Options Indexes设置为目录,服务器将生成一个HTML格式的目录表并列出目录中的文件和子目录。对于缺省值如果/etc/apache2/mods-available/dir.conf指定是"index.html index.cgi index.pl index.php index.xhtml index.htm"。对于这种情况,Apache2一旦发现任何匹配的文件则第一个将被显示。 - ErrorDocument 指令允许你为Apache2指定一个错误事件时使用的文件。例如,如果用户请求的资源不存在,则404错误将发生。缺省情况下,Apache2将简单的返回一个HTTP 404代码。更细节的有关使用ErrorDocument的指导请读/etc/apache2/conf.d/localized-error-pages文件以及相关的示例文档。
- 缺省情况下,服务器将写日志到/var/log/apache2/access.log文件。你可以针对每个站点单独进行设置,设置通过虚拟主机配置文件的CustomLog指令完成,或者省略它而接受缺省值,配置文件在/etc/apache2/conf.d/other-vhosts-access-log。你也可以在这个文件中指定哪些错误需要日志,这个通过ErrorLog指令完成,它的缺省设置在/var/log/apache2/error.log。在Apache2服务器中,日志及故障问题等都保持分开的设置。你也可以指定LogLevel(缺省值是"warn")及LogFormat(请参看/etc/apache2/apache2.conf中的缺省值)。
- 一些选项也可以针对一个预设的目录(per-directory)来指定而不是一台预设的服务器(per-server)。所谓Options就是以上指令。一个Directory将被封装在一个XML类似的标签内,例如:
<Directory /var/www/mynewsite>
...
</Directory>
在Directory标签内的选项指令也接受一个或多个以空格分开的以下设置值:
- ExecCGI - 允许执行CGI脚本。如果没有选择此选项则CGI脚本不会被执行。
- 如同CGI脚本,多数文件都不应该被执行。脚本执行是非常危险的。CGI应该保存于你的DocumentRoot之外的一个独立的目录中,并且只有这个目录拥有ExecCGI选项设置。对此的一个缺省设置在/usr/lib/cgi-bin。
- Includes - 允许服务器端包含(server-side)。服务器端包含允许一个HTML文件包含其他文件。请参看Apache SSI documentation (Ubuntu community)以获取更多的信息。
- IncludesNOEXEC - 允许服务器端包含,但是禁止CGI脚本中的#exec和#include命令。
- Indexes - 在一个请求的目录中,如果没有DirectoryIndex 设置(例如index.html),则显示一个目录内容为一个格式化的列表。
- 出于安全的原因,它通常是不设置的,尤其是你的DocumentRoot目录。如果你确实需要看到目录的全部内容,你应该针对每个目录小心的使用这个设置。
- Multiview - 支持content-negotiated的多视图;出于安全原因,这个选项缺省是禁止的。请参看Apache2 documentation有关此选项的内容。
- SymLinksIfOwnerMatch - 作为链接,如果目标文件或目录有相同的宿主则链接遵循符号链接。
- ExecCGI - 允许执行CGI脚本。如果没有选择此选项则CGI脚本不会被执行。
- httpd设置
- 这一节解释一些基本httpd守护进程的配置设置。
- LockFile - 本LockFile指令用于设置lockfile的路径,它用于服务器被编译过程中的USE_FCNTL_SERIALIZED_ACCEPT或USE_FLOCK_SERIALIZED_ACCEPT。它必须存储与本地磁盘。它应该被设置为缺省值,除非日志目录共享于一个网络文件系统中。如果是这样,该缺省值应该设置为在本地磁盘的一个位置,并且这个目录在根上是只读的。
- PidFile - PidFile指令设置这个文件以便服务器记录其进程ID(pid)。这个文件应该在根上是可读的。多数情况下,它应该设置为缺省值。
- User - User指令用于设置用户ID(userid)它将被服务器用于请求应答。此设置确定了服务器是可访问的。该用户无法访问的文件对于你的站点访客来说也是无法访问的。这个选项的缺省值是"www-data"。
- 除非你知道你在做什么,请不要设置User指令到根(root)。User指令设置到根(root)将为你的网站带来巨大的安全隐患。
- Group - Group指令类似于User指令。Group设置分组用于服务器下的请求响应。该指令的缺省设置也是"www-data"。
- Apache2模块
- Apache2是一个模块化的服务器。这意味着只有最基本的功能被纳入核心服务器。其他扩展的功能则是通过模块载入Apache2的。缺省情况下,服务器编译时只包含了一套基本的模块。如果服务器被编译为使用模块的动态装载,那么模块可以单独地被编译,并且可以通过LoadModule指令随时添加模块。否则,Apache2在添加和移除模块时必须被编译。
- Ubuntu编译Apache2允许模块的动态装载。配置指令可以用条件包含,需要的模块可以放置在一个封闭的<IfModule>块中。
- 你也可在你的Web服务器中安装其他Apache2模块。例如,运行下面终端命令以安装认证的MySQL模块:
sudo apt-get install libapache2-mod-auth-mysql
- 参看/etc/apache2/mods-available目录下相关的附加模块。
- 使用a2enmod工具以允许一个模块:
sudo a2enmod auth_mysql
sudo service apache2 restart
- 同样地,a2dismod也可以禁止一个模块:
sudo a2dismod auth_mysql
sudo service apache2 restart
HTTPS Configuration
mod_ssl模块为Apache2服务器添加了一个重要的功能 - 加密通信的能力。由此,当你的浏览器通信使用SSL时,https://前缀被使用于统一资源定位符(URL)前。
mod_ssl模块存放于apache2-common包中。在终端提示符下执行以下命令以允许mod_ssl模块:sudo a2enmod ssl
在/etc/apache2/sites-available/default-ssl.conf中有一个缺省的SSL配置。为了让Apache2提供HTTPS,你还需要一个certificate(证书)和一个key文件。缺省的HTTPS配置使用的证书和key是有ssl-cert包生成的。他们用于测试非常好,但是对于特定的服务器或网站,它们需要被取代。如何生成key并获得证书请参看Certificates
配置Apache2 HTTPS请输入下面指令:sudo a2ensite default-ssl
- 指令的缺省位置在/etc/ssl/certs 及 /etc/ssl/private。如果你安装了证书和key到其他目录,请确保正确更改SSLCertificateFile 及 SSLCertificateKeyFile。
完成Apache2的HTTPS配置后,重启服务以使新配置生效:sudo service apache2 restart
- 依赖你证书获得的方式,当重新启动Apache2时或许你会被要求一个密码。
通过键入https://your_hostname/url/你可访问你的安全站点。
Sharing Write Permission
为了分享同一目录的多用户写入权限,把该目录的写入权限授予一个分组是必要的。下面的例子把/var/www/html目录的写入权限授予"webmasters"分组。
sudo chgrp -R webmasters /var/www/html sudo find /var/www/html -type d -exec chmod g=rwxs "{}" \; sudo find /var/www/html -type f -exec chmod g=rw "{}" \;
这些命令递归地设置组权限到/var/www/html下的所有文件和目录,以保证该组用户对该目录的读写权限。也就是说,该目录下的文件和目录将从它们的父亲继承相应的组权限。很多管理员发现这对多用户编辑同一目录树非常有效。
- 如果必须授权一个目录的访问到多个组,允许访问控制列表(ACLs)。
References
- Apache2 Documentation 包含有关Apache2配置指令的深度信息。也可以参考apache2-doc中相关的Apache2官方文档。
- 参看Mod SSL Documentation站点以发现更多的SSL相关信息。
- O'Reilly's Apache Cookbook 是一个跟好的资源以完成特别的Apache2配置。
- 有关Ubuntu Apache2的问题,可以问#ubuntu-server IRC channel on freenode.net.
- 有关PHP和MySQL的集成问题Apache MySQL PHP Ubuntu Wiki是一个很好的资源。