Ubuntu/Web Servers/HTTPD - Apache2 Web Server:修订间差异

来自Ubuntu中文
跳到导航跳到搜索
Jinzd留言 | 贡献
Jinzd留言 | 贡献
 
(未显示同一用户的22个中间版本)
第1行: 第1行:
Quote from https://help.ubuntu.com/12.04/serverguide/httpd.html
本文引自[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 server,并依赖其其全称域名(FQDN)及路径指向需要的资源。例如,用户可以输入下面的FQDN以浏览Ubuntu Web site的主页:
用户输入的统一资源定位符(URL)指向一个Web server,并依赖其其全称域名(FQDN)及路径指向需要的资源。例如,用户可以输入下面的FQDN以浏览[http://www.ubuntu.com/ Ubuntu Web site]的主页:


<pre>
<pre>
第9行: 第9行:
</pre>
</pre>


要浏览community子页面则可以输入下面的FQDN:
要浏览[https://community.ubuntu.com/ community]子页面则可以输入下面的FQDN:


<pre>
<pre>
第57行: 第57行:
: 基本设置
: 基本设置
: <hr/>
: <hr/>
: 这一节解释Apache2服务器基本配置参数。更多细节请参阅Apache2 Documentation。
: 这一节解释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/>按下列指令及描述编辑该新文件以配置这个新站点。
# 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/>按下列指令及描述编辑该新文件以配置这个新站点。
# The ''ServerAdmin'' directive specifies the email address to be advertised for the server's administrator. The default value is webmaster@localhost. This should be changed to an email address that is delivered to you (if you are the server's administrator). If your website has a problem, Apache2 will display an error message containing this email address to report the problem to. Find this directive in your site's configuration file in /etc/apache2/sites-available.
# ''ServerAdmin''指令指明服务器管理员的邮件地址。其缺省值是webmaster@localhost。它应更新为递送到你的邮件地址(如果你是服务器管理员)。如果你的站点有问题,Apache2将把这个邮件地址包含在消息中并报告相关问题。包含该指令的配置文件可以在/etc/apache2/sites-available中找到。
# The ''Listen'' directive specifies the port, and optionally the IP address, Apache2 should listen on. If the IP address is not specified, Apache2 will listen on all IP addresses assigned to the machine it runs on. The default value for the Listen directive is 80. Change this to 127.0.0.1:80 to cause Apache2 to listen only on your loopback interface so that it will not be available to the Internet, to (for example) 81 to change the port that it listens on, or leave it as is for normal operation. This directive can be found and changed in its own file, /etc/apache2/ports.conf  
# ''Listen''指令用于指明端口以及可选的IP地址,以便Apache2侦听。如果IP地址没有被指明,Apache2将侦听所有分配到该机的IP地址。该''Listen''指令的缺省值是80。改变这个值为127.0.0.1:80 将引起Apache2只侦听本地回环接口这将导致它在互联网上是不可用的,对于(例如)81设置将改变侦听端口,或放弃正常的设置。这个指令可以被找到并更改在文件/etc/apache2/ports.conf
# The ''ServerName'' directive is optional and specifies what FQDN your site should answer to. The default virtual host has no ServerName directive specified, so it will respond to all requests that do not match a ServerName directive in another virtual host. If you have just acquired the domain name ubunturocks.com and wish to host it on your Ubuntu server, the value of the ServerName directive in your virtual host configuration file should be ubunturocks.com. Add this directive to the new virtual host file you created earlier (/etc/apache2/sites-available/mynewsite).<br/>You may also want your site to respond to www.ubunturocks.com, since many users will assume the www prefix is appropriate. Use the ServerAlias directive for this. You may also use wildcards in the ServerAlias directive.<br/>For example, the following configuration will cause your site to respond to any domain request ending in .ubunturocks.com. <br/><code style="background-color:lightgray">ServerAlias *.ubunturocks.com</code>
# ''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>
# The ''DocumentRoot'' directive specifies where Apache2 should look for the files that make up the site. The default value is /var/www, as specified in /etc/apache2/sites-available/default. If desired, change this value in your site's virtual host file, and remember to create that directory if necessary!
# ''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">&lt;Directory /var/www/mynewsite&gt;<br/>...<br/>&lt;/Directory&gt;</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允许模块的动态装载。配置指令可以用条件包含,需要的模块可以放置在一个封闭的''&lt;IfModule&gt;''块中。
: 你也可在你的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页面,诸如FirefoxOperaChromium或者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的应用形成了一个强大健壮的平台。

安装

配置

HTTPS 配置

共享写权限

引用

Installation

Apache2 web server在Ubuntu Linux中是可用的。在terminal提示符下输入下面指令以安装Apache2:

sudo apt-get install apache2

Configuration

Apache2的配置指令存放于多个纯文本的配置文件中。这些配置指令被分割为多个文件并放置于多个目录中:

  1. apache2.conf: Apache2的主配置文件。它包含Apache2的一些全局设置。
  2. conf.d: 目录,包含一些Apache2的全局配置文件。Apache2的其他内容服务包可以添加文件,符号链接到这个目录。
  3. envvars: 用于设置Apache2环境变量的文件。
  4. httpd.conf: 历史上是Apache2的主配置文件,命名的httpd守护进程。现在,这个文件通常是空的,大多配置选项被移动到下面的引用目录。这个文件可用于用户指定特定的配置选项并作用于全局Apache2。
  5. mods-available: 这个目录包含多个配置文件以装载和配置他们。当然不是所有模块都将拥有特定的配置文件。
  6. mods-enabled: 持有符号链接的文件存放于/etc/apache2/mods-available。当一个模块配置文件持有符号链接时,它们将在apache2下次启动后生效。
  7. ports.conf: 放置的指令用于描述Apache2正在监听的TCP端口。
  8. sites-available: 该目录用于存放Apache2虚拟主机的配置文件。虚拟主机允许Apache2使用分开的配置去配置多个站点。
  9. 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
  1. Apache2附带一个虚拟主机友好的缺省配置。也就是说,它被配置为有一个缺省的虚拟主机(使用VirtualHost指令)并且这个虚拟主机可以被修改或直接使用如同你有了一个站点;或者如果你有多个站点,它也可作为其他虚拟主机模板使用。假如只有一个站点,该缺省虚拟主机将作为你的缺省站点;或者,当用户输入的URL与ServerName指令不匹配时用户也将看到此站点。要修改缺省虚拟主机设置,可以编辑文件/etc/apache2/sites-available/default。
    该虚拟主机设置指令只适用于待定的虚拟主机。如果一个指令定义的服务器范围没有在虚拟主机设置中被定义,则使用这个缺省设置。例如,你能定义一个Webmaster邮件地址但是没有为每个虚拟主机定义单独的邮件地址。
    如果你希望配置一个新的虚拟主机或站点,则以另一文件名拷贝该文件到同一目录下。例如:
    sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/mynewsite
    按下列指令及描述编辑该新文件以配置这个新站点。
  2. ServerAdmin指令指明服务器管理员的邮件地址。其缺省值是webmaster@localhost。它应更新为递送到你的邮件地址(如果你是服务器管理员)。如果你的站点有问题,Apache2将把这个邮件地址包含在消息中并报告相关问题。包含该指令的配置文件可以在/etc/apache2/sites-available中找到。
  3. Listen指令用于指明端口以及可选的IP地址,以便Apache2侦听。如果IP地址没有被指明,Apache2将侦听所有分配到该机的IP地址。该Listen指令的缺省值是80。改变这个值为127.0.0.1:80 将引起Apache2只侦听本地回环接口这将导致它在互联网上是不可用的,对于(例如)81设置将改变侦听端口,或放弃正常的设置。这个指令可以被找到并更改在文件/etc/apache2/ports.conf
  4. 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
  5. 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服务器的缺省设置。例如,如果你添加一个虚拟主机,缺省配置要优先于其他的虚拟主机设置,对于没有定义虚拟主机,缺省设置将被使用。
  1. 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一旦发现任何匹配的文件则第一个将被显示。
  2. ErrorDocument 指令允许你为Apache2指定一个错误事件时使用的文件。例如,如果用户请求的资源不存在,则404错误将发生。缺省情况下,Apache2将简单的返回一个HTTP 404代码。更细节的有关使用ErrorDocument的指导请读/etc/apache2/conf.d/localized-error-pages文件以及相关的示例文档。
  3. 缺省情况下,服务器将写日志到/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中的缺省值)。
  4. 一些选项也可以针对一个预设的目录(per-directory)来指定而不是一台预设的服务器(per-server)。所谓Options就是以上指令。一个Directory将被封装在一个XML类似的标签内,例如:
    <Directory /var/www/mynewsite>
    ...
    </Directory>

    在Directory标签内的选项指令也接受一个或多个以空格分开的以下设置值:
  1. ExecCGI - 允许执行CGI脚本。如果没有选择此选项则CGI脚本不会被执行。
    如同CGI脚本,多数文件都不应该被执行。脚本执行是非常危险的。CGI应该保存于你的DocumentRoot之外的一个独立的目录中,并且只有这个目录拥有ExecCGI选项设置。对此的一个缺省设置在/usr/lib/cgi-bin。
  2. Includes - 允许服务器端包含(server-side)。服务器端包含允许一个HTML文件包含其他文件。请参看Apache SSI documentation (Ubuntu community)以获取更多的信息。
  3. IncludesNOEXEC - 允许服务器端包含,但是禁止CGI脚本中的#exec#include命令。
  4. Indexes - 在一个请求的目录中,如果没有DirectoryIndex 设置(例如index.html),则显示一个目录内容为一个格式化的列表。
    出于安全的原因,它通常是不设置的,尤其是你的DocumentRoot目录。如果你确实需要看到目录的全部内容,你应该针对每个目录小心的使用这个设置。
  5. Multiview - 支持content-negotiated的多视图;出于安全原因,这个选项缺省是禁止的。请参看Apache2 documentation有关此选项的内容。
  6. SymLinksIfOwnerMatch - 作为链接,如果目标文件或目录有相同的宿主则链接遵循符号链接。
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

  1. Apache2 Documentation 包含有关Apache2配置指令的深度信息。也可以参考apache2-doc中相关的Apache2官方文档。
  2. 参看Mod SSL Documentation站点以发现更多的SSL相关信息。
  3. O'Reilly's Apache Cookbook 是一个跟好的资源以完成特别的Apache2配置。
  4. 有关Ubuntu Apache2的问题,可以问#ubuntu-server IRC channel on freenode.net.
  5. 有关PHP和MySQL的集成问题Apache MySQL PHP Ubuntu Wiki是一个很好的资源。