网袋。FastCGI或WSGI。SSL。同一领域。怎么用?

网袋。FastCGI或WSGI。SSL。同一领域。怎么用?,ssl,fastcgi,lighttpd,wsgi,websocket,Ssl,Fastcgi,Lighttpd,Wsgi,Websocket,问题 我已经构建了一个分为两部分的应用程序:一个低开销的服务器,使用它来侦听长轮询和websocket连接,另一个是与WSGI兼容的Python webapp。前者将绑定到路径/socket.io/,后者将绑定到其他路径。此外,/static/中的文件可以直接从文件系统提供服务,并具有将来很长的过期头 我认为在这两个服务前面放置一个代理很容易,这两个服务将通过SSL服务整个站点,但我找不到一个好的解决方案。你能帮忙吗 背景 我将应用程序分为两部分,因为这很有意义——处理常规web请求(数据库查询

问题

我已经构建了一个分为两部分的应用程序:一个低开销的服务器,使用它来侦听长轮询和websocket连接,另一个是与WSGI兼容的Python webapp。前者将绑定到路径
/socket.io/
,后者将绑定到其他路径。此外,
/static/
中的文件可以直接从文件系统提供服务,并具有将来很长的过期头

我认为在这两个服务前面放置一个代理很容易,这两个服务将通过SSL服务整个站点,但我找不到一个好的解决方案。你能帮忙吗

背景

我将应用程序分为两部分,因为这很有意义——处理常规web请求(数据库查询、中间件)所需的内存要比打开websocket套接字所需的内存多得多。我仍然认为这是个好主意,但可能是个错误

pythonwebapp兼容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",
)