FASTCGI

在服务器上非常流行的部署设置,如 lighttpdnginx 是FastCGI。要将WSGi应用程序与其中任何一个一起使用,首先需要一个FastCGI服务器。

最受欢迎的是 flup 我们将在本指南中使用。一定要把它安装好。

创建`.fcgi`文件

首先,您需要创建fastcgi服务器文件。让我们称之为 yourapplication.fcgi: :

#!/usr/bin/python
from flup.server.fcgi import WSGIServer
from yourapplication import make_app

if __name__ == '__main__':
    application = make_app()
    WSGIServer(application).run()

这足以让Apache工作,但是ngingx和旧版本的lighttpd需要显式传递一个套接字来与fastcgi服务器通信。要使其工作,您需要将指向套接字的路径传递给 WSGIServer ::

WSGIServer(application, bindAddress='/path/to/fcgi.sock').run()

路径必须与在服务器配置中定义的路径完全相同。

拯救 yourapplication.fcgi 把文件放在你能找到的地方。把它放进去是有道理的 /var/www/yourapplication 或者类似的东西。

确保在该文件上设置可执行位,以便服务器可以执行它::

# chmod +x /var/www/yourapplication/yourapplication.fcgi

配置LightTPD

lighttpd的基本fastcgi配置如下:

fastcgi.server = ("/yourapplication.fcgi" =>
    ((
        "socket" => "/tmp/yourapplication-fcgi.sock",
        "bin-path" => "/var/www/yourapplication/yourapplication.fcgi",
        "check-local" => "disable",
        "max-procs" -> 1
    ))
)

alias.url = (
    "/static/" => "/path/to/your/static"
)

url.rewrite-once = (
    "^(/static.*)$" => "$1",
    "^(/.*)$" => "/yourapplication.fcgi$1"

记住启用fastcgi、alias和rewrite模块。此配置将应用程序绑定到 /yourapplication .

有关详细信息,请参阅Lighty文档 FastCGI and Python .

配置nginx

在nginx上安装fastcgi应用程序有点困难,因为默认情况下,某些fastcgi参数没有正确转发。

nginx的基本fastcgi配置如下:

location /yourapplication/ {
    include fastcgi_params;
    if ($uri ~ ^/yourapplication/(.*)?) {
        set $path_url $1;
    }
    fastcgi_param PATH_INFO $path_url;
    fastcgi_param SCRIPT_NAME /yourapplication;
    fastcgi_pass unix:/tmp/yourapplication-fcgi.sock;
}

此配置将应用程序绑定到 /yourapplication .如果你想把它放在url根目录中,这会更容易一些,因为你不需要计算出如何计算 PATH_INFOSCRIPT_NAME ::

location /yourapplication/ {
    include fastcgi_params;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    fastcgi_param SCRIPT_NAME "";
    fastcgi_pass unix:/tmp/yourapplication-fcgi.sock;
}

因为nginx不加载fastcgi应用程序,你必须自己做。你可以写一个 init.d 脚本或在屏幕会话中执行:

$ screen
$ /var/www/yourapplication/yourapplication.fcgi

调试

FastCGI部署在大多数Web服务器上往往很难调试。服务器日志通常只告诉您“头过早结束”这一行的内容。为了调试应用程序,唯一能真正让您了解它为什么中断的是切换到正确的用户并手动执行应用程序。

此示例假定调用了应用程序 application.fcgi 您的Web服务器用户是 www-data ::

$ su www-data
$ cd /var/www/yourapplication
$ python application.fcgi
Traceback (most recent call last):
  File "yourapplication.fcg", line 4, in <module>
ImportError: No module named yourapplication

在这种情况下,错误似乎是“yourapapplication”不在python路径上。常见问题有:

  • 正在使用的相对路径。不依赖当前工作目录

  • 取决于Web服务器未设置的环境变量的代码。

  • 使用了不同的python解释器。