题
我已将应用程序分为两部分:低开销服务器,它使用Socket.IO侦听长轮询和Websocket连接,以及常规的WSGI兼容Python Webapp。前者将绑定到路径/socket.io/
,而后者将绑定到其他所有路径。此外,/static/
中的文件可以直接从文件系统中使用,并且具有很长的过期标头。
我认为将代理放在通过SSL为整个网站服务的两项服务的前面很容易,但是我找不到一个好的解决方案。你能帮我吗?
背景
我将应用程序分为两部分,因为它很有意义-与打开的Websocket套接字相比,处理常规Web请求(数据库查询,中间件)需要更多的内存。我仍然认为这是个好主意,但这可能是一个错误。
Python Webapp是WSGI兼容的,但可能应该使用FastCGI来提供服务。我认为FastCGI进程应该具有长期运行的Python解释器,而不是代理。同样,我在这里可能是错的。
我知道lighttpd有一个mod_websocket,我已经构建并安装了两者,但是我似乎无法正确配置它。我认为这是一个分层的问题— mod_websocket只是将字节往返于后端TCP服务之间来回穿梭,但是也许没关系...
更新
让我知道是否有任何其他信息会有所帮助,例如我的lighttpd配置,我将在此处发布。
最佳答案
弄清楚了。这是我的lighttpd配置,缩写为:
# The port of the Socket.IO daemon
var.daemon_port = 9000
ssl.engine = "enable"
ssl.pemfile = "/path/to.pem"
$HTTP["url"] =~ "^/socket.io" {
proxy.server = ( "" =>
(("host" => "127.0.0.1", "port" => daemon_port))
)
}
alias.url = (
"/favicon.ico" => "/path/to/static/favicon.ico",
"/robots.txt" => "/path/to/static/robots.txt",
)
fastcgi.server = ( "/app.fcgi" => # Arbitrary path name
((
"bin-path" => "/path/to/app.fcgi",
"socket" => "/tmp/app-fcgi-" + PID + ".sock",
"check-local" => "disable",
"fix-root-scriptname" => "enable",
"max-procs" => 1,
))
)
url.rewrite-once = (
"^(/socket.io/.*)$" => "$1",
"^(/(favicon.ico|robots.txt))$" => "$1",
"^(/.*)$" => "/app.fcgi$1",
)