如何向运行共享 IIS 服务器的 Python 新手解释 Django/Python 安装

Epc*_*lon 9 iis python web-hosting django

由于我无法控制的原因,我们的网站由托管服务提供商托管,该提供商将 IIS 用于其服务器。他们目前通过 cgi-scripts 提供 PHP 和 ASP,以及 Python 和 Perl。

我想重新设计、重新编写我们的网站,并想从 PHP 更改为 Python/Django 设置。托管服务提供商对建议持开放态度,但明确表示“我们真的不知道 Python 是什么,也不知道它是如何工作的,但如果您能向我们解释,我们会尽力为您设置所需的一切” .

但是,我可能知道如何在 apache/mod_python 上的共享托管环境中设置 Django,但我不知道如何在 IIS 上设置它,当然也不知道如何为共享托管环境设置它。我用谷歌搜索了一下,但我找到的大部分资源都假设系统管理员 1) 知道 Python/Django 和 2) 正在为他的站点使用专用的 IIS 托管。

有人可以解释我如何向我的托管服务提供商解释这个过程,或者给我指点我可以转发给我的托管服务提供商的好的、详细的资源吗?请记住,运行主机的人可能知道关于 IIS 的“一切”,但不知道如何处理 Python。

小智 8

如果您坚持使用 IIS,请尽可能使用 PyISAPIe 而不是 CGI。PyISAPIe 的说明和链接如下。如果您的 Web 主机管理 IIS,则他们对 ISAPI 扩展的了解会比 Python 多得多,而且他们不需要通过 PyISAPIe 对 Python 了解太多。

一个更好的方法是使用 PyISAPIe,一个 ISAPI 扩展。PyISAPIe 比 IIS7 上的 CGI 快得多。它的作用类似于 Apache 上的 mod_python。PyISAPIe 项目主页有关于通过 PyISAPIe 使用 WSGI 设置 Django 的说明。这将使您的性能达到公共/高流量网站的合理速度。

通过 CGI 环境在 IIS+Python 中设置 Django 对于任何生产用途来说都将非常缓慢。您永远不应该将它用于您希望每分钟服务超过少数请求的网站。它还严重限制了您可以在 Django 的缓存框架中缓存的内容,因为每次新请求都会重新启动 Django 应用程序的进程。

在像 Apache、lighttpd 等健全的 Web 服务器中,使用 mod_python,运行 Django 进程的 Python 解释器保留在内存中,并使用每个新的 Apache 工作线程进行初始化,这些工作线程随着时间的推移处理许多请求。这意味着 Python + Django 不会为每个新请求退出和重新启动。在 FastCGI 设置中,Web 服务器(例如 Apache 或 lighttpd)创建一个套接字(UNIX 域或 TCP),它通过 FastCGI 协议与 FastCGI 应用程序(您的 Django Web 应用程序)进行通信。HTTP 代理设置也是如此(它们使用 HTTP 而不是 FastCGI)。在 CGI 环境中,运行 Django 应用程序的 Python 解释器被调用,对于每个请求都是全新的,因此应用程序不能在内存中保持跨请求的状态,也不能在数据库中的任何地方正确缓存。

废话太多了,如果您必须使用 IIS+CGI+Django,这里是如何完成这个可怕的事情:使用以下代码创建您自己的 CGI 脚本,该脚本运行您的 Django 应用程序(它在 CGI 和 WSGI 之间进行转换)。您必须稍微编辑脚本以使其指向您的 Django 应用程序和代码。这就是您需要将请求传递给的 CGI 脚本。接下来,您需要将所有请求转发/重写到您的 CGI 脚本...

在 IIS6 下,您需要一个 mod_rewrite 等效项,例如 IISRewrite,我认为它不是免费的并且是闭源的。在 IIS7 下,微软终于加入了 URL 重写模块。它的文档位于此处。在 IIS7 中创建重写规则的说明在这里。您将希望转发目标基本 URL 中的所有内容,以便由您的 CGI 脚本处理。