如何在Apache中为不同端口配置Delphi开发的多个DLL模块
解决Apache加载多个Delphi DataSnap DLL的端口分离方案
核心原因
Delphi生成的WebBroker/DataSnap Apache模块,在同一个Apache进程中只能初始化一个数据模块,因此不能在同一配置中同时加载两个模块,必须通过独立虚拟主机隔离的方式让两个模块分别运行在不同端口的实例中。
具体配置步骤
1. 调整Apache主配置文件(httpd.conf)
先注释掉原来同时加载两个模块的代码,然后开启虚拟主机配置支持:
# 注释原有的模块加载及Location配置 # LoadModule webbroker_module modules/mod_webbroker.dll # <Location /xyz> # SetHandler mod_webbroker-handler # </Location> # LoadModule reportbuilder_module modules/mod_reportbuilder.dll # ...(原第二个模块的相关配置) # 引入虚拟主机配置文件 Include conf/extra/httpd-vhosts.conf
2. 配置虚拟主机文件(httpd-vhosts.conf)
在conf/extra/httpd-vhosts.conf中添加两个独立的虚拟主机,分别绑定85、86端口,每个主机仅加载对应的模块:
85端口对应第一个模块的配置
<VirtualHost *:85> ServerName localhost:85 DocumentRoot "C:/Apache24/htdocs" # 仅在此虚拟主机加载第一个模块 LoadModule webbroker_module modules/mod_webbroker.dll <Location /xyz> SetHandler mod_webbroker-handler </Location> # 基础目录权限 <Directory "C:/Apache24/htdocs"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> </VirtualHost>
86端口对应第二个模块的配置
<VirtualHost *:86> ServerName localhost:86 DocumentRoot "C:/Apache24/htdocs" # 仅在此虚拟主机加载第二个模块 LoadModule reportbuilder_module modules/mod_reportbuilder.dll <Location /rbbin> SetHandler mod_reportbuilder-handler </Location> # 配置rbcache别名与权限 Alias /rbcache/ "C:/Apache24/htdocs/rbbin/rbcache/" <Directory "C:/Apache24/htdocs/rbbin/rbcache"> Options All AllowOverride None Require all granted </Directory> # 基础目录权限 <Directory "C:/Apache24/htdocs"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> </VirtualHost>
3. 配置Apache监听端口
在httpd.conf中添加85和86端口的监听:
Listen 85 Listen 86
(若不需要默认80端口,可删除原有Listen 80配置)
4. 重启Apache服务
保存所有配置后重启Apache,此时:
- 访问
http://localhost:85/xyz将使用第一个模块 - 访问
http://localhost:86/rbbin将使用第二个模块
注意事项
- 必须将
LoadModule指令放在对应虚拟主机的<VirtualHost>块内部,确保模块仅在指定实例中加载 - 确认两个DLL文件的路径正确,且Apache拥有读取权限
- 若启动报错,查看
logs/error.log日志定位问题(如端口占用、路径错误等)
内容的提问来源于stack exchange,提问作者lorife
相关产品推荐
相关产品推荐

