[Power by FreeBSD]
顏國雄 2001/02 初
Apache 的架設
2004/06/24 修改 

Apache 是一般我們在 Unix Like 系統中常見的網頁伺服器,它如果和 PHP 或其它動態網頁的模組結合,可以發展出高效能且功能強大的網頁伺服器,我們可以在 FreeBSD ports collection 中的 www 目錄中找到所需的東西,目前 Apache 有兩個版本 apache13 和 apache2 ,它們的設定稍有不同,下面介紹的是 apache 13 的部份。

1.軟體安裝

1-1 以 packages 安裝 apache13

如果不想自己編譯,我們可以用 pkg_add 來安裝 package,執行下面的指令:

pkg_add -v ftp://ftp.tku.edu.tw/OS/FreeBSD/packages/packages-stable/Latest/apache.tgz

※ apache 會用到 expat 及 rc_subr,如果透過 FTP 安裝,這兩個有相依性的 packages 會自動安裝。

安裝完可以利用 pkg_info | grep apache ,看一下是否安裝成功。

 

1-2 以 ports 安裝 apache13

1-2-1 取得 apache ports 的相關設定檔

apache13 位在 ports tree 中的 www/apache13,另外它會需要使用 textproc/expat2 的共用函數庫,所以記得要先安裝 expat2 ,以免產生錯誤,當然囉,如果系統中已經用光碟或 cvsup 取得完整的 ports collection ,FreeBSD 會自動幫我們處理軟體相依的問題。如果想節省磁碟空間,可以用下列的步驟先安裝 textproc/expat2 和 sysutils/rc_subr 兩個 packages ,然後再抓 apache13 所需的 ports 目錄和檔案即可,種方法比較省空間 ,我比較喜歡用這個。

1.先安裝現行 apache13 所需的兩個 packages expat 和 rc_subr:

pkg_add -v ftp://ftp.tku.edu.tw/OS/FreeBSD/packages/packages-stable/Latest/expat.tgz

pkg_add -v ftp://ftp.tku.edu.tw/OS/FreeBSD/packages/packages-stable/Latest/rc_subr.tgz

2.抓取 ports 相關的檔案

編譯 apache13 時,至少要有下面的目錄及檔案,要注意是否是最新的,沒有的話可以利用 ncftpget 或其它抓檔案的軟體建立並抓取檔案:

/usr/ports/
   ├Mk
   ├Templates
   ├Tools
   └www/apache13

例如:如果確認 /usr/ports/www 已經存在,可以執行:

cd /usr/ports/www
ncftpget -R ftp://freebsd.csie.nctu.edu.tw/pub/ports/ports/www/apache13

1-2-2 開始編譯

如果該有的檔案都準備好了就可以執行下列指令編譯:

cd /usr/port/www/apache13
make all

1-2-3 進行安裝

make install

 

2 修改 /etc/rc.conf

apache 啟動時會透過 rc_subr 來啟動,我們必須要在 /etc/rc.conf 中加入下面這行:

apache_enable="YES"

這樣,我們才可以使用 /usr/local/etc/rc.d/apache.sh 來控制服務的啟動與否,下次開機時才會自動啟動 apache 。

3 修改 apache 的設定檔

安裝完,在 /usr/local/etc/apache 下就有一些 *.conf 和 *.conf.default ,後者是原始程式附的設定檔範本,盡量不要去修改它,雖然看起來有三個主要的設定檔 httpd.conf access.conf srm.conf,其實現在只要直接修改 httpd.conf 即可(另二個內容都是空的了) 。

如果現在就啟動 apache ,馬上就可以看到網頁囉,那是 apache 的線上手冊, 預設的網頁放在 /usr/local/www/data ,而預設用來放 CGI 程式是在 /usr/local/www/cgi-bin ,如果我們執行 ls -l /usr/local/www ,這兩個其實只是 link ,分別連到 data → /usr/local/www/data-dist,cgi-bin → /usr/local/www/cgi-bin-dist,我們可以將他們改到自己放網頁及 CGI 的目錄。

在 httpd.conf 的預設值中,其它使用者的網頁目錄名稱則必須叫 public_html,我們可以把它改成較簡單的目錄名稱,方便使用者記憶, 我們先修改幾個地方符合需求就好了:

註:粗體字 (第二行) 為修改後的值

修改設定 說明

ServerAdmin you@your.address

ServerAdmin admin@test.tp.edu.tw

本站系統管理員的電子郵件地址,可用於系統發生錯誤時的回應訊息中

ServerName new.host.name

ServerName www.test.tp.edu.tw

主機名稱,如果這台主機有一個以上的名稱,可以用這個指定要顯示哪一個名稱

DocumentRoot "/usr/local/www/data"

這部份不改,直接改 /usr/local/www/data 的 link

預設放網頁的目錄路徑
如果有修改,<Directory "/usr/local/www/data">也要跟著改

UserDir public_html

UserDir www

放使用者網頁的資料夾名稱,相對於 users 的 $HOME

DirectoryIndex index.html

DirectoryIndex index.html index.hml

首頁的檔名,為了保險起見,建議最好把有 DirectoryIndex 的那幾行都加上 index.htm

ScriptAlias /cgi-bin/ "/usr/local/www/cgi-bin"

這部份不改,直接改 /usr/local/www/cgi-bin 的 link

放 cgi 程式的目錄

<Directory "/usr/local/www/cgi-bin/">

這部份不改,直接改 /usr/local/www/cgi-bin 的 link

同樣的,前一個 ScriptAlias /cgi-bin/ 有改,這裡也要修改

其它可設定的選項相當的多,這部份其實和 FreeBSD 無關,有興趣可以研究一下 Apache 本身的操作手冊,或是參考別的書籍或資料有關 Apache 設定的部份。

 

4 建立相關的檔案

假設我想把網頁放在 /home/www/data ,CGI 放在 /home/www/cgi-bin ,依前面的設定來說,我們應該執行下面的指令:

mkdir -p /home/www/data /home/www/cgi-bin
cd /usr/local/www
ln -s -f -h /home/www/data data
ln -s -f -h /home/www/cgi-bin cgi-bin

另外,如果希望在新增帳號時可以順便幫使用者建立好 UserDir 所設定的 www 目錄,就執行下面的指令:

mkdir /usr/share/skel/www
chmod 755 /usr/share/skel/www

註:/usr/share/skel 這個目錄是 adduser 在開新帳號會複製東西的樣版目錄
  所以先在裡面建好 www 並設定好權限,
  以後開新帳號時會自動幫使用者建好放網頁的目錄 www
  會舉一反三的人甚至會在 www 中放個 index.htm 當預設網頁哦。

5 常見問答

  • 怎樣開放某個使用者可以執行 cgi 程式
    A:例如開放給 gsyan 可以自建 cgi-bin 目錄,裡面放 cgi 程式, 修改 /usr/local/etc/apache/httpd.conf 在裡面加入

    <Directory "/home/gsyan/cgi-bin">
       Options ExecCGI
    </Directory>

  • 改了設定檔,如何讓 apache 讀取新設定
    A:重新啟動 apache ,執行 apachectl restart
      或是先執行 /usr/local/etc/rc.d/apache.sh stop ,再執行 /usr/local/etc/rc.d/apache.sh start
      或是 /usr/local/etc/rc.d/apache.sh restart (比較舊的版本未使用 rc_subr 無法用這招)

  • cgi 程式看不出哪裡有問題怎麼辦?!
    A:apache有詳細的連線記錄放在
      /var/log/httpd-access.log 和 /var/log/httpd-error.log
      查一下後者,應該可以查出珠絲馬跡來

  • Apache 的記錄檔久了變超大的,如何讓它自動壓縮?!
    A:利用 newsyslog 即可備份舊記錄檔並產生新的空記錄檔
      在 /etc/newsyslog.conf 中加入一行

    /var/log/httpd-access.log    640    13    *    $M1D0    Z    /var/run/httpd.pid

      意思是在每個月的第一天凌晨,將 httpd-access.log 壓縮並保留 13 個月的記錄檔
      除了以時間來決定何時處理記錄檔,也可以用大小來決定
      詳細用法可以 man newsyslog

  • 啟動 Apache2.x 時都會出現錯誤訊息 :Failed to enable the 'httpready' Accept Filter
    A:這是因為核心少了 accf_http ,可以先手動載入模組,執行 kldload accf_http
    ,再重新啟動 Apache 就不會出現訊息,為了避免每次開機還要手動載入模組,我們可以在 /boot/loader.conf 中加入下面這一行:

    accf_http_load="YES"

這樣,下次開機就可以自動載入 accf_http 的模組囉!詳細的說明可以 man accf_http

  • 安裝完 php ,可是由 client 瀏覽 php 網頁時卻只顯示出原始碼而已?
    A:apache 不認得 .php 的檔案啦!在 apache 的設定檔中加入底下的內容:

    AddType application/x-httpd-php .php .php3
    AddType application/x-httpd-php-source .phps

    然後重新啟動 Apache 即可,類似的情形也會發生在不認得 .cgi 的檔案。

 


 


 基礎: 書籤 - 簡介 - 安裝 - Slices - Unix基礎 - 基本指令 - 首次登入 - 目錄架構
 系統: 核心編譯 - 系統升級 - Packages - Ports - PicoBSD - Quota
 網路: 服務管理 - WWW - FTP - MAIL - DNS - Samba - NFS - DHCP - webmin - IMP - OpenWebmail
 其它: Backup - UPS - 系統安全 - ipfw&natd - 撥接服務 - 計時制ADSL - 雜記 - FAQ

北市文山區力行國小顏國雄