歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> Linux文化 >> 淺析Apache服務器中SSI和CGI設定方法

淺析Apache服務器中SSI和CGI設定方法

日期:2017/2/27 11:53:39   编辑:Linux文化

由於Apache具有相當高的可移植性,它支持超過30種操作系統,包括Unix、Windows 及Darwin等系統,所以目前在網絡上已注冊的網域裡大部份是使用Apache網頁服務器。目前ApacheSoftware Foundation 正致力於發展現在已進入alpha測試階段的Apache2.0。在這裡,我和大家探討如何修改服務器選項讓服務器能提供簡單的動態網頁內容,也就是支持CGI程序及 Server-Side Include(SSI)程序。

1、准備工作

首先,我假設你已經安裝好Apache而且你的Apache能提供靜態網頁供浏覽。Apache的安裝會自動附上靜態的HTML測試頁,也就是說如果能看到那測試頁,就代表你的Apache能正常運作了。基本安裝下的Apache僅能提供靜態的HTML網頁。然而,你可以通過使用模塊(modules)來提升它的功能。在原始的設定下,Apache的編譯會包含mod_include 及 moc_cgi 這兩個模塊。你可以在bin子目錄下執行./httpd -l來查看你的Apache是否裝有這兩個模塊。執行的輸出會是一長串Apache現在安裝的所有模塊。如果mod_include及moc_cgi 這兩個模塊不在清單裡,你必須重新編譯服務器。重新編譯時,確定依照如何含括 mod_include、moc_cgi 模塊的說明。此外你還必需有提供實時網頁的Server-Side Includes(相關資料網址:http://www.oreilly.com/catalog/apache/excerpt/ch10.html)。有了 server-side includes (SSI)支持,你就能制作出實時的動態網頁。接下來,我先從服務器的SSI支持設定開始,然後進入CGI的編寫。

2、Apache的設定

首先你必須先找到Apache這個設定文件。Apache的原始安裝目錄在 Unix下是/usr/local/apache,在Windows下則是 c:\Program Files\Apache。接著在conf子目錄下你會找到httpd.conf 文件。這就是Apache的設定檔。這個設定文件是個純文字文件,所以你可以使用一般的文字編輯器,如vi或Notepad 等,來編輯。首先要注意的是在這個設定檔裡有些行的起始文字是#符號,這表示這行的文字全為批注。適當地在你的設定檔內做批注是個好習慣,因為那幫你記得你曾做了哪些設定以及為什麼。

3、執行 SSI 程序

開啟設定文件並尋找以下這些文字:

# # To use server-parsedHTMLfiles # #AddType text/html .shtml #AddHandler server-parsed .shtml

刪除AddType及AddHandler這兩行指令前的#符號。AddType指令會要求服務器在傳回任何附屬檔名為.shtml的網頁時,以 text或HTML做為傳回文件的內容格式。AddHandler 則是用來指示服務器將文件內容送交給mod_include 處理。之後,mod_include 就會判斷該如何響應這樣的文件。接下來,尋找以下文字:

在這行文字及對應的 間會有一行選項行(options line)。原始的設定是:

Options Indexes FollowSymLinks MultiViews

在這行尾端加上Includes ,結果看起來會是這樣:

Options Indexes FollowSymLinks MultiViews Includes

這是要求Apache在htdocs子目錄裡執行 server-side includes 程序。為了讓這些修改生效,我們必須重新啟動服務器。在 Unix 下重新激活,執行"kill -HUP `cat /usr/local/apache/logs/httpd.pid`"。在 Windows 下,執行"Apache-k restart"。現在我們來試試剛才的設定結果。在/usr/local/apache/htdocs 目錄裡新增一個文件 test.shtml。這個文件必須要包含以下程序代碼:

The file hello.txt is long and it was last modified on

這段 SSI 程序會去讀取一個稱為 hello.txt 文件,並將該文件的大小以及最近一次的修改日期輸出到網頁上。顯然的,我們還必須在 htdocs 目錄下新增這個hello.txt 文件。在我的hello.txt 文件裡只有一行文字:HOW ARE YOU!。完成新增這些文件後,打開你慣用的浏覽器並開啟http://localhost/test.shtml網頁。如果你服務器的安裝並不是通過root用戶,你可能必須改為開啟http://localhost:8080/test.shtml。之後將得到如下結果:

HOW ARE YOU! The file hello.txt is 1k bytes long and it was last modified on Wednesday, 02-Aug-2000 20:18:28 PDT

另外一種可以激活支持SSI程序的方法稱為XbitHack設定(相關資料網址:http://www.apache.org/docs/mod/mod_include.html#xbithack )。這個方法的由來是當你將文本文件的使用者可執行位(user-executable bit)設為可執行狀態後,Apache會將那些文件視為 SSI 程序文件。

要激活這樣的功能必須將以下指令(directive)放在所有目錄的 .htaccess 文件裡:XbitHack status on (or full) status 的值可以設為on 、off 或是full。on 的設定會強制服務器將所有使用者可執行的文件視為SSI項。Off則使服務器完全忽略使用者可執行的設定狀態。若是設定為Full,服務器會視所有使用者可執行檔為SSI項,同時也會檢查組可執行(group-executable bit)。如果組可執行項設定為可執行時,傳回header的last modified time的值就會被設定為該文件最近一次被修改的時間。這樣的設定可以讓客戶端的浏覽器及代理服務器(proxy)進行緩存(caching)。不過在使用這樣的功能時必須要小心。例如說,如果你的網頁有提供輪替式廣告看板你就不會想要設定群組可執行位為開啟的狀態,因為那麼做會讓第一個下載的廣告被快取起來,導致使用者再也看不到其它頁的廣告。

4、執行CGI程序

在Apache原始安裝裡,cgi-bin子目錄下附有兩組CGI程序,test-cgi 以及printenv,只不過這兩組程序有潛在的安全漏洞。但是由於我們只是要做設定測試,並且我們不會將這樣的原始安裝設定直接放在主運行服務器(live server),所以我們還是會激活其中一組CGI程序,看看Apache當初是如何被設定來執行這組程序。最後我們會自己撰寫一支簡單的CGI程序。

首先,要確定這組程序是能執行的。進入cgi-bin子目錄,確定程序文件被設定為使用者(服務器執行時使用者)可執行以及使用組(服務器執行時使用組)可執行。對 Windows系統來說,這一步應該是非必要的。接著,對服務器要求這樣的內容:

http://localhost:8080/cgi-bin/test-cgi

注意:只有在通過非root使用者進行服務器安裝的情況下才需要指定8080端口(port)。這支Apache內建的test-cgi程序會列出CGI程序會存取的變量值。激活CGI支持是設定在httpd.conf設定文件內的ScriptAlias 指令區段。這個指令區段的原始設定值是:

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

這行指令是告訴Apache如果要求的網頁路徑是以cgi-bin為起始,這些文件可在/usr/local/apache/cgi-bin/ 目錄下找得到。這行指令同時也告訴Apache要在這個目錄下執行文件。在下面我准備了一個會輸出"How are you!"的簡單CGI程序。我將它命名為 how.sh。

#!/bin/sh echo "Content-type: text/html" echo echo "How are you!"

修改這個文件的權限使其成為可執行文件並且向你的服務器提出以下的要求:

http://localhost:8080/cgi-bin/how.sh

雖然這組CGI是采用shell script來編寫,其實它可以用任何適用於該系統的語言來撰寫。至於關於CGI程序的撰寫如果有機會我會和大家作更深入的探討。

結論:

Apache支持的所有SSI 指令可以在Apachedocumentation 裡找到,Apache所有的功能都可以通過設定文件 (config file)進行調試。在這裡我所介紹的僅只是設定文件相關知識的皮毛。設定文件的原始設定有著非常詳盡的說明文件,而且每一個系統版本都附有核心模塊及標准模塊的說明文件,如果你花些時間在這些文件裡摸索,你會找到任何你想要的功能。


Copyright © Linux教程網 All Rights Reserved