mod_fastcgi 还有一个比较酷的功能,可以在连接其它机器的fcgi服务,fcgi在远程服务器中,相当于代理. 这个特性在 mod_fcgid 中没有体现
一. 配置外部fcgi服务
<IfModule fastcgi_module>
#AddHandler fastcgi-script .fcgi .py
#设置外部服务名称(完整路径),服务的监听端口
FastCgiExternalServer /usr/local/test/cgi-fcgi -host 192.168.1.82:9000 -idle-timeout 30 -flush
DocumentRoot /usr/local/test
# 设置别名
ScriptAlias /myfcgi /usr/local/test/cgi-fcgi
<Directory /usr/local/test>
AllowOverride All
Order Allow,Deny
Allow from all
</Directory>
</IfModule>
二. 启动fcgi服务
本身fastcgi服务与TCP无关,无法建立TCP监听的. fastcgi 开发包为我们提供一个工具 examples/cgi-fcgi (也可使用spawn-fcgi,该进程只能在linux下使用), 相当于一个小型web server, 用于发布fastcgi服务
# 命令: cgi-fcgi -start -connect connName appPath [nServers]
# connName 指定监听地址和端口
# appPath fastcgi服务名称
# nServers fork进程数,默认为1
./cgi-fcgi -start -connect 192.168.1.82:9000 /usr/local/test/echo
netstat -anp|grep 9000
tcp 0 0 192.168.1.82:9000 0.0.0.0:* LISTEN 6626/echo
三. 测试运行
在 82 上启动fcgi服务,看 83 是否能访问到 82 的服务
运行 http://192.168.1.83/myfcgi ,发现出错, 查看日志: No route to host , 两台机器都能互相ping通, 估计虚拟机安装的有问题, 清理防火墙先: sudo iptables -F
四. mod_proxy 模块
mod_fastcgi 模块在windows上表现差强人意,极不稳定, 何况很久没维护更新了, 不适合用在生产环境. 在 apache 2.4 版本提供了 mod_proxy 代理模块, 可以将远端服务器映射到本地 URL 空间中,完全可以替换 mod_fastcgi
下载 apache2.4 或以上版本, 安装后会发现 modules 目录有很多代理模块 mod_proxy_ftp , mod_proxy_fcgi , mod_proxy_http 等, 实现了多种协议
#启用 fastcgi,http 协议:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_http_module modules/mod_proxy_http.so
#添加代理服务:
ProxyPass /baidu http://www.baidu.com
ProxyPass /fcgi/ fcgi://192.168.1.82:9000/
代理方式配置比FastCgiExternalServer简洁多了,浏览器输入: localhost/baidu 显示百度页面; localhost/fcgi/ 显示fcgi服务信息,此时远程服务器 cgi-fcgi 必须开启,监听9000端口, 参见上文