28.8. Apache HTTP 伺服器

Contributed by Murray Stokely.

開放源碼的 Apache HTTP Server 是目前最廣泛被使用的網頁伺服器,FreeBSD 預設並不會安裝這個網頁伺服器,但可從 www/apache24 套件或 Port 安裝。

本節將會摘要如何設定並啟動在 FreeBSD 上 2.x 版的 Apache HTTP Server,要取得有關 Apache 更詳細的資訊及其設定項目請參考 httpd.apache.org

28.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 中正常運作。

28.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/

28.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 套件集也提供了一個簡單的方式可安裝各種模組,本節將介紹最常使用的三個模組。

28.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 會說明。

28.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 中找到。

28.8.3.3. mod_php

Written by Tom Rhodes.

PHP: Hypertext Preprocessor (PHP) 是一般用途的腳本 (Script) 語言,特別適用於網站開發,能夠嵌入在 HTML 當中,它的語法參考自 C, Java™ 及 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

28.8.4. 動態網站

除了 mod_perlmod_php 外,也有其他語言可用來建立動態網頁內容,這包含了 DjangoRuby on Rails

28.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 以及對 PostgreSQL, MySQLSQLite 資料庫的支援,預設為 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 的更多資訊。

28.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 方面疑問,請先閱讀 FreeBSD 相關文件,如不能解決的話,再洽詢 <questions@FreeBSD.org>。

關於本文件的問題,請洽詢 <doc@FreeBSD.org>。