基于Delphi7 WebService 在Apache 发布及Apache 使用说明
qq:394251165
前段时间,需要将基于Delphi7 WebService 发布在Apache, 很是苦脑, 通过研究以及在Google 上搜索到的资料终于解决了问题. 希望能对你有帮助
开发环境:
Delphi 开发环境是 Delphi7
Apache 版本是 apache_2.2.8
Delphi 7 以及Delphi6 支持的 WebService 中Apache 版本是 2.0 的, 生成的Apache dll 在 Apache 发布会报错. 根据网友资料, 需要 修改 HTTPD2.pas 文件,放在 Delphi 安装目录下 “Source/Internet”, 如我的安装目录为
“ D:/Program Files/Borland7/Delphi7/Source/Internet “
我把修改好的文件放到 ApacheTo Internet 目录中
目录中 apache2.0 中的文件是对于在 Apache2.0 下发布的WebService
目录中 apache2.2 中的文件是对于在 Apache2.2 下发布的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文件,如有需要,可以和我联系)
下面, 先看看, 我们安装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后续的版本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 监听的端口 8080
Listen 8080
你可以改成其它的
Listen 9090,
当然还有好的其它的命令
参考
Apache 服务器配置技巧 ( 发布者:飞翔 ) 引用: 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 监听在特定的端口 修改 httpd.conf 里面关于 Listen 的选项,例如: Listen 8000 是使 apache 监听在 8000 端口 而如果要同时指定监听端口和监听地址,可以使用: Listen 192.170.2.1:80 这样就使得 apache 同时监听在 192.170.2.1 的 80 端口和 192.170.2.5 的 8000 端口。 当然也可以在 httpd.conf 里面设置: Port 80 这样来实现类似的效果。 4 、如何设置 apache 的最大空闲进程数 修改 httpd.conf ,在里面设置: MaxSpareServers n 其中 n 是一个整数。这样当空闲进程超过 n 的时候, apache 主进程会杀掉多余的空闲进程而保持空闲进程在 n ,节省了系统资源。如果在一个 apache 非常繁忙的站点调节这个参数才是必要的,但是在任何时候把这个参数调到很大都不是一个好主意。 同时也可以设置: MinSpareServers n 来限制最少空闲进程数目来加快反应速度。 5 、 apache 如何设置启动时的子服务进程个数 在 httpd.conf 里面设置: StartServers 5 这样启动 apache 后就有 5 个空闲子进程等待接受请求。 也可以参考 MinSpareServers 和 MaxSpareServers 设置。 6 、如何在 apache 中设置每个连接的最大请求数 在 httpd.conf 里面设置: MaxKeepAliveRequests 100 这样就能保证在一个连接中,如果同时请求数达到 100 就不再响应这个连接的新请求,保证了系统资源不会被某个连接大量占用。但是在实际配置中要求尽量把这个数值调高来获得较高的系统性能。 7 、如何在 apache 中设置 session 的持续时间 在 apache1.2 以上的版本中,可以在 httpd.conf 里面设置: KeepAlive on 这样就能限制每个 session 的保持时间是 15 秒。 session 的使用可以使得很多请求都可以通过同一个 tcp 连接来发送,节约了网络资源和系统资源。 8 、如何使得 apache 对客户端进行域名验证 可以在 httpd.conf 里面设置: HostnameLookups on|off|double 如果是使用 on ,那么只有进行一次反查,如果用 double ,那么进行反查之后还要进行一次正向解析,只有两次的结果互相符合才行,而 off 就是不进行域名验证。 如果为了安全,建议使用 double ;为了加快访问速度,建议使用 off 。 9 、如何使得 apache 只监听在特定的 ip 修改 httpd.conf ,在里面使用 BindAddress 192.168.0.1 这样就能使得 apache 只监听外界对 192.168.0.1 的 http 请求。如果使用: BindAddress * 就表明 apache 监听所有网络接口上的 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 ,然后再编译你的系统。 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 那么你就要去修改源码了。 |