29.8. Apache HTTP服务器

Contributed by Murray Stokely.

开放源码的Apache HTTP Server是目前最广泛被使用的网页服务器,FreeBSD预设并不会安装这个网页服务器,但可从www/apache24套件或Port安装。

本节将会摘要如何设定并启动在FreeBSD上2.x版的Apache HTTP Server,要取得有关Apache更详细的信息及其设定项目请参考httpd.apache.org

29.8.1. 设定并启动Apache

在FreeBSD中,主Apache HTTP Server配置文件会安装于/usr/local/etc/apache2x/httpd.conf,其中x代表版号,这份ASCII文字档中以#做为行首的是注释,而最常需修改的项目有:

ServerRoot "/usr/local"

指定该Apache的预设安装路径,Binary档会储存在服务器根目录(Server root)下的binsbin子目录,而配置文件会储存在etc/apache2x子目录。

ServerAdmin you@example.com

更改此项目为您要接收问题回报的电子邮件位址,这个位址也会显示在一些服务器产生的页面上,如:错误页面。

ServerName www.example.com:80

让管理者可以设定服务器要回传给客户端的主机名称(Hostname),例如,www可以更改为实际的主机名称,若系统并未有注册的DNS名称,则可改输入其IP位址,若服务器需要倾听其他端口号,可更改80为其他端口号。

DocumentRoot "/usr/local/www/apache2x/data"

提供文件的目录,预设所有的请求均会到此目录,但可以使用符号连接与别名来指向其他地方。

在对Apache配置文件做变更之前,建议先做备份,在Apache设定完成之后,储存让档案并使用apachectl检验设定,执行apachectl configtest的结果应回传Syntax OK

要在系统启动时执行Apache,可加入下行到/etc/rc.conf

apache24_enable="YES"

Apache要使用非预设的选项启动,可加入下行到/etc/rc.conf来指定所需的旗标参数:

apache24_flags=""

apachectl未回报设定错,则可启动httpd

# service apache24 start

httpd服务可以透过在网页浏览器中输入http://localhost来测试,将localhost更改为执行httpd那台主机的完整网域名称(Fully-qualified domain name)。预设会显示的网页为/usr/local/www/apache24/data/index.html

后续若有在httpd执行中时修改Apache配置文件可使用以下指令来测试是否有误:

# service apache24 configtest

注意:

注意,configtest并非采用rc(8)标准,不应预期其可在所有的启动Script中正常运作。

29.8.2. 虚拟主机

虚拟主机允许在一个Apache服务器执行多个网站,虚拟主机可以是以IP为主(IP-based)或以名称为主(name-based)。以 IP 为主的虚拟主机中的每一个网站要使用不同的IP位址。以名称为主的虚拟主机会使用客户端的HTTP/1.1标头来判断主机名称,这可让不同的网站共享相同的 IP 位址。

要设定Apache使用以名称为主的虚拟主机可在每一个网站加入VirtualHost内存块,例如,有一个名称为www.domain.tld的主机拥有一个www.someotherdomain.tld的虚拟网域,可加入以下项目到httpd.conf

<VirtualHost *>
    ServerName www.domain.tld
    DocumentRoot /www/domain.tld
</VirtualHost>

<VirtualHost *>
    ServerName www.someotherdomain.tld
    DocumentRoot /www/someotherdomain.tld
</VirtualHost>

每一个虚拟主机均需更改其ServerNameDocumentRoot的值为实际要使用的值。

更多有关设定虚拟主机的信息,可参考Apache官方说明文件于:http://httpd.apache.org/docs/vhosts/

29.8.3. Apache模块

Apache使用模块(Module)来扩充服务器所提供的功能。请参考http://httpd.apache.org/docs/current/mod/来取得可用模块的完整清单与设定详细信息。

在FreeBSD中有些模块可以随着www/apache24 Port编译,只要在/usr/ports/www/apache24输入make config便可查看有那一些模块是预设开启的,若模块未与Port一并编译,FreeBSD Port套件集也提供了一个简单的方式可安装各种模块,本节将介绍最常使用的三个模块。

29.8.3.1. mod_ssl

mod_ssl模块利用了OpenSSL透过Secure Sockets Layer(SSLv3)与Transport Layer Security(TLSv1)通信协定来提供强大的加密,这个模块提供了向受信认的凭证签署机构申请签章凭证所需的任何东西,让FreeBSD上能够执行安全的网页服务器。

在FreeBSD中mod_ssl模块预设在套件与Port均是开启的,可用的设定项目在http://httpd.apache.org/docs/current/mod/mod_ssl.html会说明。

29.8.3.2. mod_perl

mod_perl模块让您可以使用Perl撰写Apache模块,除此之外,嵌入到服务器的直译器可避免启动外部直译器的额外开销与Perl耗费的启动时间。

mod_perl可以使用www/mod_perl2套件或Port安装,有关使用此模块的说明文件可在http://perl.apache.org/docs/2.0/index.html中找到。

29.8.3.3. mod_php

Written by Tom Rhodes.

PHP: Hypertext PreprocessorPHP)是一般用途的脚本(Script)语言,特别适用于网站开发,能够嵌入在HTML当中,它的语法参考自CJava™及Perl,目的在让网页开发人员能快速的写出动态网页。

要在Apache网页服务器上加入对PHP5的支持,可安装www/mod_php56套件或Port,这会安装并设定支持动态PHP应用程序所需的模块。安装过程会自动加入下行到/usr/local/etc/apache24/httpd.conf

LoadModule php5_module        libexec/apache24/libphp5.so

接着,执行graceful重新启动来加载PHP模块:

# apachectl graceful

www/mod_php56所提供的PHP支持是有限的,若需要额外的支持可以使用lang/php56-extensions Port来安装,该Port提供了菜单界面来选择可用的PHP扩充套件。

或者,可以找到适当的Port来安装各别的扩充套件,例如,要增加PHPMySQL数据库服务器的支持可安装databases/php56-mysql

在安装完扩充套件之后,必须重新加载Apache服务器来使用新的设定值:

# apachectl graceful

29.8.4. 动态网站

除了mod_perlmod_php外,也有其他语言可用来建立动态网页内容,这包含了DjangoRuby on Rails

29.8.4.1. Django

Django是以BSD授权的框架(Framework),指在让开发人员能快速的写出高效、优雅的网页应用程序。它提供了物件关联对应器(Object-relational mapper),所以各种数据型态可当做Python的物件来开发,且提供了丰富的动态数据库存取API给这些物件,让开发人员不再需要写SQL。它也同时提供了可扩充的样板系统,来让应用程序的逻辑与HTML呈现能够被拆开。

Django需要mod_python,以及一个SQL数据库引擎才能运作。在FreeBSD中的www/py-django Port会自动安装mod_python以及对PostgreSQLMySQLSQLite数据库的支持,预设为SQLite,要更改数据库引擎可在/usr/ports/www/py-django输入make config然后再安装该Port。

Django安装完成之后,应用程序会需要一个项目目录并搭配Apache设定才能使用内嵌的Python直译器,此直译器会用来呼叫网站上指定URL的应用程序。

要设定Apache传递某个URL请求到网站应用程序,可加入下行到httpd.conf来指定项目目录的完整路径:

<Location "/">
    SetHandler python-program
    PythonPath "['/dir/to/the/django/packages/'] + sys.path"
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE mysite.settings
    PythonAutoReload On
    PythonDebug On
</Location>

请参考https://docs.djangoproject.com来取得如何使用Django的更多资讯。

29.8.4.2. Ruby on Rails

Ruby on Rails是另外一套开放源码的网站框架(Framework),提供了完整的开发堆叠,这使得网页开发人员可以更有生产力且能够快速的写出强大的应用程序,在FreeBSD它可以使用www/rubygem-rails套件或Port安装。

请参考http://guides.rubyonrails.org来取得更多有关如何使用Ruby on Rails的信息。

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.