升级 Nginx 时发现新版的 Nginx 有一个 SCGI 模块,试用了一下,感觉不错。
SCGI 协议是古老的 CGI 协议的替代方案,它是一个应用程序和 HTTP 服务器通信的接口协议。据说比 FastCGI 简单,效率相当,更容易实现。SCGI是C/S模型的,客户端在 HTTP 服务器一侧,基本C语言实现,服务器在应用程序一侧,目前有一个 Python 的服务器实现。
目前 Nginx, Apache, Lighttpd 都支持 SCGI 协议,在 Nginx 0.8.54 里试用操作。
虚拟主机配置文件
/etc/nginx/sites-enable/default
...
location /scgi {
include scgi_params;
scgi_pass localhost:4000;
}
...
SCGI 应用程序(服务器端)
#!/usr/bin/env python
# Heiher
import scgi;
import scgi.scgi_server;
class TestHandler(scgi.scgi_server.SCGIHandler):
def produce(self, env, bodysize, input, output):
output.write("Content-Type: text/plain\r\n\r\n");
output.write("Test\r\n");
if __name__ == "__main__":
server = scgi.scgi_server.SCGIServer(
handler_class=TestHandler,
port=4000);
server.serve();
访问 SCGI 应用
浏览器中访问 http://localhost/scgi, 输出
Test
目前 PHP 还不支持这个协议,另外发现这个服务器端并不支持 UNIX Socket, 这样多用户虚拟主机的权限怎么控制呢?
Over!