基于Delphi7 WebService 在Apache 發(fā)布及Apache 使用說明
qq:394251165
前段時間,需要將基于Delphi7 WebService 發(fā)布在Apache, 很是苦腦, 通過研究以及在Google 上搜索到的資料終于解決了問題. 希望能對你有幫助
開發(fā)環(huán)境:
Delphi 開發(fā)環(huán)境是 Delphi7
Apache 版本是 apache_2.2.8
Delphi 7 以及Delphi6 支持的 WebService 中Apache 版本是 2.0 的, 生成的Apache dll 在 Apache 發(fā)布會報錯. 根據網友資料, 需要 修改 HTTPD2.pas 文件,放在 Delphi 安裝目錄下 “Source\Internet”, 如我的安裝目錄為
“ D:\Program Files\Borland7\Delphi7\Source\Internet “
我把修改好的文件放到 ApacheTo Internet 目錄中
目錄中 apache2.0 中的文件是對于在 Apache2.0 下發(fā)布的WebService
目錄中 apache2.2 中的文件是對于在 Apache2.2 下發(fā)布的WebService
根據自己的需要 而選擇 將 HTTPD2.pas , ApacheTwoApp.pas ,ApacheTwoHTTP.pas
拷貝到 Delphi7\Source\Internet
就可以了,當然,如果不行的話,你要把 Delphi7\Lib 中的 HTTPD2.Dcu 刪除,重新編譯
在程序的搜索路徑 添加 Delphi7\Source\Internet
其實, 主要是修改了文件 httpd2.pas 中涉及到Apache 的版本號碼
如,你可以打開文件看看, 主要是修改下面的地方, 當然還有其它地方,已經做了注釋說明
// AP22
MODULE_MAGIC_COOKIE = $041503232; (* "AP22" *)
// AP20
// MODULE_MAGIC_COOKIE = $041503230; (* "AP20" *) by tjb
{$EXTERNALSYM MODULE_MAGIC_COOKIE}
// MODULE_MAGIC_NUMBER_MAJOR = 20020903; { Apache 2.0.43 } by tjb
MODULE_MAGIC_NUMBER_MAJOR = 20051115; { Apache 2.2.x}
在Delphi 7 WebService 工程中 注意下面這個地方地修改, 下圖說明
用戶Delphi7 生成 WebService DLL .
說明:我使用的是Apache2.2.8 版本, 當然在上面選擇的 Apache2.2 目錄下的 HTTPD2.pas, 連同其它兩個文件, 我拷貝到 Delphi7\Source\Internet, 覆蓋以前的文件, 當然, 你可以在覆蓋前, 把這三個文件先備份.(我有修改好的pas文件,如有需要,可以和我聯(lián)系)
下面,
先看看,
我們安裝Apache.
apache_2.2.8-win32-x86-openssl-0.9.8g.msi(可以到官方下載),
直接安裝,
安裝比較簡單,
要填域名,
如果你有網站,
就按實際情況填.
如果沒有,
你隨便填.
選擇是 80
端口,
還是 選擇8080
端口,
可以根據你自己的實際情況.
比如你的機子上已經安裝IIS,
已經占用了80
端口,
你可以選擇使用8080
端口 ,
安裝Apache.
后面我們還會講到
怎樣修改Apache
的配置文件中如端口的修改
當然Apache2.2 可以使用控制臺, 也可通過Apache2.2 提供的工具
使用 Monitor Apache Servers , 里面怎么用, 自己看看就知道,很簡單.
其二, 是使用控制臺其它Apache2.2
啟動之后 , 在 IE 中 http://127.0.0.1:8080/ , 出現下頁面, 表明你的Apache 安裝成功, 當然我配置的端口是8080, 如果你默認為80 端口 在 IE 中 http://127.0.0.1/ 不需要在URL添加端口, 如果是其它的端口 , 比如9090, 你輸入 http://127.0.0.1:9090
顯示 "It works!" 好了, 我們的Apache 配好, 現在將Delphi Build 好的 DLL, 比如我的是 EcTomRegister.dll, 拷貝到 Apache2.2 安裝目錄下 的Module 中. 注意我們剛才Delphi 中
exports
apache_module name 'EcTomRegisterProj_module';
用到的是 EcTomRegisterProj_module 這個名稱 . 下一步我就要在 Apaache2.2 目錄下 Conf 目錄下修改 httpd.conf 配置文件, 用記事本打開就可以了
#begin by for register data server register the user's register information
LoadModule EcTomRegisterProj_module modules/EcTomRegister.dll
<Location /EcTomRegister >
SetHandler EcTomRegister-handler
</Location>
#end
注意 使用的是LoadModule 命令, 后面跟的就是 Delph7 中的Exprots 中Name 后面的名字. 注意紅色字, EcTomRegister.dll , 在<Location / EcTomRegister>, 是Dll 中的文件名
EcTomRegister-handler, 安裝這個模式就可進行配置了. 注意在 Delphi7 中的 新建 Apache2.2 WebService 時一定要選擇,Apache2.x Shared Module
配置好了, 要重新啟動Apache2.2。好了到此,我們在Delphi7下的WebService,在Apache下配置,就完了。如有問題,可以提意見。在Delphi后續(xù)的版本Delphi2007,Delphi2009以及最新的Delphi2010,都沒有對Apache的支持。有興趣的可以研究一下,有好的消息,可以通知我哦。下面是一些參考資料,我在網上找了很久,花了一些時間 , 可能對您有所用途。
另外可以參考:
附 錄 一、 Apache2.2 配置虛擬目錄配置命令
# virtur dir for user data down
Alias /ectom "C:\Program Files\Apache Software Foundation\Apache2.2\ectom "
<Directory "C:\Program Files\Apache Software Foundation\Apache2.2\ectom ">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
紅色部分 是根據自己的情況進行配置, ectom 是虛擬目錄, “C:\Program Files\Apache Software Foundation\Apache2.2\ectom ” 是路徑. 其它的Apache2.2 的命令.
訪問的URL http://127.0.0.1:8080/ectom/a.html ,測試其正確性。
附錄二、 Apache2.2 啟動 (Windows 平臺) 命令
http://www.mybrand.com.cn/ebook/apache2.2/stopping.html
有更詳細的 Apache2.2 各種命令, 可以學習.
運行中 輸入 cmd 后臺, 在Dos 窗口中, 使用 cd 命令切換到 Apache2.2\bin 目錄下
Ø
Httpd –k
install
//{
安裝一個服務}
Ø
Httpd -k install -n "
服務名"
//{
安裝一個帶服務名的服務}
Ø
apache -k
uninstall
//{
卸載一個服務}
Ø
apache -k uninstall -n "
服務名" //{
卸載一個帶服務名的服務
}
Ø
httpd –k
stop
或 httpd
–k
shutdown
//{
停止命令}
Ø
httpd
–k start
//{
啟動命令}
Ø
httpd
-k restart
//{
重啟動命令}
參考下面更詳細
可以在
Apache
安裝目錄的bin
子目錄下,使用如下命令將Apache
安裝為Windows NT
服務:
httpd -k install
如果你想指定服務的名稱,可以使用下面的命令。當你在同一機器上安裝多個
Apache
服務時,你必須為它們指定不同的名字。
httpd -k install -n "
服務名"
如果你想為不同名稱的服務使用不同的配置文件,則安裝時需要指定配置文件:
httpd -k install -n "
服務名" -f
"c:\files\my.conf"
如果你使用的是第一個命令,也
就是除 -k install
外沒有其它命令行參數,那么被安裝的服務名稱將是:Apache2
,配置文件將使用conf\httpd.conf
。
要移除一個
Apache
服務很簡單:
httpd -k uninstall
或者使用下述命令移除特定名稱的
Apache
服務:
httpd -k uninstall -n "
服務名"
通常,啟動、重啟、關閉
Apache
服務的方法是使用Apache Service Monitor
工具,另外也可以使用控制臺命令:NET
START Apache2
和 NET STOP Apache2
或者通過Windows
服務控制面板。在啟動Apache
服務之前,你應當使用下面的命令檢查一下配置文件的正確性:
httpd
-n "
服務名"
-t
你可以通過命令行開關來控制
Apache
服務。要啟動一個已經安裝的Apache
服務,可以使用:
httpd -k start
要停止一個已經安裝的
Apache
服務,可以使用:
httpd -k stop
或
httpd -k shutdown
要重啟一個運行中的
Apache
服務,強制它重新讀取配置文件,可以使用:
httpd -k restart
附錄三
、
將安裝好的Apache2.2
直接拷貝到其它的目錄
,
啟動Apache
因為根據需要
,
很可能, Apache2.2
拷貝到其它的目錄,
而不想通過
“
apache_2.2.8-win32-x86-openssl-0.9.8g.msi
”
安裝,
每次安裝都很麻煩.
只有將
Apache2.2
安裝好的 目錄 直接拷貝或到其它目錄,
當然如果是以服務其的形式其它你的Apache,
你要把服務卸載掉.
在Conf
目錄的
httpd.conf
目錄下,
修改
ServerRoot
"C:/Program Files/Apache Software Foundation/Apache2.2"
修改成你的新路徑
,
保存文件,
就可以啟動Apache
了,
是不是很簡單.
文件中其它
,
比如Apache
監(jiān)聽的端口 8080
Listen 8080
你可以改成其它的
Listen
9090,
當然還有好的其它的命令
參考
Apache 服務器配置技巧 ( 發(fā)布者:飛翔 ) 引用: http://www.52z.com/info/ArticleView/2004-10-15/Article_View_27672.Htm http://www.52z.com:80/info/ArticleView/2004-10-15/Article_View_27679.Htm
|
本文簡要介紹了十幾個Apache 的配置技巧: 1 、如何設 置請求等待時間 在 httpd.conf 里面設置: TimeOut n 其中 n 為整數,單位是秒。 設置這個 TimeOut 適用于三種情況: 2 、如何接收一個 get 請求的總時間 接收一個 post 和 put 請求的 TCP 包之間的時間 TCP 包傳輸中的響應( ack )時間間隔 3 、如何使得 apache 監(jiān)聽在特定的端口 修改 httpd.conf 里面關于 Listen 的選項,例如: Listen 8000 是使 apache 監(jiān)聽在 8000 端口 而如果要同時指定監(jiān)聽端口和監(jiān)聽地址,可以使用:
Listen
192.170.2.1:80 這樣就使得 apache 同時監(jiān)聽在 192.170.2.1 的 80 端口和 192.170.2.5 的 8000 端口。 當然也可以在 httpd.conf 里面設置: Port 80 這樣來實現類似的效果。 4 、如何設置 apache 的最大空閑進程數 修改 httpd.conf ,在里面設置: MaxSpareServers n 其中 n 是一個整數。這樣當空閑進程超過 n 的時候, apache 主進程會殺掉多余的空閑進程而保持空閑進程在 n ,節(jié)省了系統(tǒng)資源。如果在一個 apache 非常繁忙的站點調節(jié)這個參數才是必要的,但是在任何時候把這個參數調到很大都不是一個好主意。 同時也可以設置: MinSpareServers n 來限制最少空閑進程數目來加快反應速度。 5 、 apache 如何設置啟動時的子服務進程個數 在 httpd.conf 里面設置: StartServers 5 這樣啟動 apache 后就有 5 個空閑子進程等待接受請求。 也可以參考 MinSpareServers 和 MaxSpareServers 設置。 6 、如何在 apache 中設置每個連接的最大請求數 在 httpd.conf 里面設置: MaxKeepAliveRequests 100 這樣就能保證在一個連接中,如果同時請求數達到 100 就不再響應這個連接的新請求,保證了系統(tǒng)資源不會被某個連接大量占用。但是在實際配置中要求盡量把這個數值調高來獲得較高的系統(tǒng)性能。 7 、如何在 apache 中設置 session 的持續(xù)時間 在 apache1.2 以上的版本中,可以在 httpd.conf 里面設置:
KeepAlive
on 這樣就能限制每個 session 的保持時間是 15 秒。 session 的使用可以使得很多請求都可以通過同一個 tcp 連接來發(fā)送,節(jié)約了網絡資源和系統(tǒng)資源。 8 、如何使得 apache 對客戶端進行域名驗證 可以在 httpd.conf 里面設置: HostnameLookups on|off|double 如果是使用 on ,那么只有進行一次反查,如果用 double ,那么進行反查之后還要進行一次正向解析,只有兩次的結果互相符合才行,而 off 就是不進行域名驗證。 如果為了安全,建議使用 double ;為了加快訪問速度,建議使用 off 。 9 、如何使得 apache 只監(jiān)聽在特定的 ip 修改 httpd.conf ,在里面使用 BindAddress 192.168.0.1 這樣就能使得 apache 只監(jiān)聽外界對 192.168.0.1 的 http 請求。如果使用: BindAddress * 就表明 apache 監(jiān)聽所有網絡接口上的 http 請求。 當然用防火墻也可以實現。 10 、 apache 中如何限制 http 請求的消息主體的大小 在 httpd.conf 里面設置: LimitRequestBody n n 是整數,單位是 byte 。 cgi 腳本一般把表單里面內容作為消息的主體提交給服務器處理,所以現在消息主體的大小在使用 cgi 的時候很有用。比如使用 cgi 來上傳文件,如果有設置: LimitRequestBody 102400 那么上傳文件超過 100k 的時候就會報錯。 11 、如何修改 apache 的文檔根目錄 修改 httpd.conf 里面的 DocumentRoot 選項到指定的目錄,比如: DocumentRoot /www/htdocs 這樣 http://localhost/index.html 就是對應 /www/htdocs/index.html 12 、如何修改 apache 的最大連接數 在 httpd.conf 中設置: MaxClients n n 是整數,表示最大連接數,取值范圍在 1 和 256 之間,如果要讓 apache 支持更多的連接數,那么需要修改源碼中的 httpd.h 文件,把定義的 HARD_SERVER_LIMIT 值改大然后再編譯。 13 、如何使每個用戶有獨立的 cgi-bin 目錄 有兩種可選擇的方法: (1) 在 Apache 配置文件里面關于 public_html 的設置后面加入下面的屬性: ScriptAliasMatch ^/~([^/]*)/cgi-bin/(.*) /home/$1/cgi-bin/$2 (2) 在 Apache 配置文件里面關于 public_html 的設置里面加入下面的屬性:
<Directory
/home/*/public_html/cgi-bin> 14 、如何調整 Apache 的最大進程數 Apache 允許為請求開的最大進程數是 256,MaxClients 的限制是 256. 如果用戶多了,用戶就只能看到 Waiting for reply.... 然后等到下一個可用進程的出現。這個最大數,是 Apache 的程序決定的 -- 它的 NT 版可以有 1024 ,但 Unix 版只有 256 ,你可以在 src/include/httpd.h 中看到:
#ifndef
HARD_SERVER_LIMIT 你可以把它調到 1024 ,然后再編譯你的系統(tǒng)。 15 、如何屏蔽來自某個 Internet 地址的用戶訪問 Apache 服務器 可以使用 deny 和 allow 來限制訪問,比如要禁止 202.202.202.xx 網絡的用戶訪問:
<Directory
/www/htdocs> 16 、如何在日志里面記錄 apache 瀏覽器和引用信息 你需要把 mod_log_config 編譯到你的 Apache 服務器中,然后使用下面類似的配置: CustomLog logs/access_log "%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"" 17 、如何修改 Apache 返回的頭部信息 問題分析:當客戶端連接到 Apache 服務器的時候, Apache 一般會返回服務器版本、非缺省模塊等信息,例如: Server: Apache/1.3.26 (Unix) mod_perl/1.26 解決: 你可以在 Apache 的配置文件里面作如下設置讓它返回的關于服務器的信息減少到最少: ServerTokens Prod 注意: 這樣設置以后 Apache 還會返回一定的服務器信息,比如: Server: Apache 但是這個不會對服務器安全產生太多的影響,因為很多掃描軟件是掃描的時候是不顧你服務器返回的頭部信息的。你如果想把服務器返回的相關信息變成: Server: It iS a nOnE-aPaCHe Server 那么你就要去修改源碼了。 |
如對本文有疑問,請?zhí)峤坏浇涣髡搲瑥V大熱心網友會為你解答??! 點擊進入論壇