在没有CGI的情况下部署Django?

时间:2010-07-01 15:49:17

标签: php django cgi

我需要在共享服务器上部署一个Django项目,我没有root权限,也没有任何管理功能。

服务器上的每个用户都有一个专用目录,Apache为该用户提供文件(公共URL为/~username/)。

问题是,此服务器上的Apache没有CGI功能,没有mod_python,没有mod_wsgi。但可以使用PHP。

我必须在这台服务器上部署一个Django项目,可能会以某种方式使用PHP吗?

绝不一个制作场景,任何你能想到的黑客攻击都会很棒。忽略任何性能或可伸缩性因素 - 这只是一个POC。

1 个答案:

答案 0 :(得分:2)

如果没有mod_python,mod_wsgi或fastCGI,您将无法直接执行此操作。

我在想你可能要做的是将django应用程序作为独立应用程序运行,在另一个端口上运行,然后基本上使用PHP来代理对它的请求。

所以你做了

  python manage.py runserver 9999

可能会以nohup启动它,而不是在您注销时保持运行:

  nohup python manage.py runserver 9999 &

然后,在~username中,您创建一个proxy.php脚本,该脚本接受任何其他PATH_INFO并向localhost:9999发出请求,传递HTTP头,收集响应并将其发送回浏览器。

因此,例如,浏览器请求http://example.com/~username/proxy.php/some/path/和PHP脚本请求http://localhost:9999/some/path/并发送结果。

我不是PHP程序员所以我不能完全告诉你如何编写它,但我确信有人必须在PHP中实现HTTP代理。

如果你在该目录中有.htaccess支持并且apache启用了mod_proxy_http,你可以让apache直接代理请求。 documentation非常容易理解。但如果他们没有启用CGI,他们可能也没有设置。

当然,最简单的事情就是如果你可以逃脱django在公共端口上运行和监听并直接访问它。即,

   python manage.py runserver example.com:9999

并直接以http://example.com:9999/

的形式访问它