我已将应用程序分为两部分:低开销服务器,它使用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",
)

07-26 09:41
查看更多