AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 9121
Accepted
Epcylon
Epcylon
Asked: 2009-05-18 08:37:56 +0800 CST2009-05-18 08:37:56 +0800 CST 2009-05-18 08:37:56 +0800 CST

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

  • 772
关闭。这个问题是题外话。它目前不接受答案。

想改进这个问题? 更新问题,使其成为服务器故障的主题。

10年前关闭。

改进这个问题

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

我想重新设计,重新编写我们的网站,并希望从 PHP 更改为 Python/Django 设置。托管服务提供商愿意提供建议,但明确表示“我们并不真正知道 Python 是什么,也不知道它是如何工作的,但如果你能向我们解释一下,我们会尽力为你提供任何你需要的东西” .

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

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

django iis python web-hosting
  • 3 3 个回答
  • 3704 Views

3 个回答

  • Voted
  1. Best Answer
    user6281
    2009-05-31T05:20:33+08:002009-05-31T05:20:33+08:00

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

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

    • http://apps.sourceforge.net/trac/pyisapie/
    • http://pypi.python.org/pypi/PyISAPIe/

    通过 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 环境中,调用 Python 解释器来运行 Django 应用程序,对每个请求都进行全新的处理,因此应用程序无法在内存中保持跨请求的状态,也无法在数据库中正确缓存。

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

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

    • http://code.djangoproject.com/attachment/ticket/2407/django.cgi
    • http://learn.iis.net/page.aspx/460/using-url-rewrite-module/
    • http://learn.iis.net/page.aspx/461/creating-rewrite-rules-for-the-url-rewrite-module/
    • http://apps.sourceforge.net/trac/pyisapie/
    • http://pypi.python.org/pypi/PyISAPIe/
    • 8
  2. Robert van Geel
    2012-01-05T04:16:21+08:002012-01-05T04:16:21+08:00

    如何在 IIS 上的 FastCGI 上设置 Python

    这是在 FastCGI IIS 7+ 上设置 Python 的方法,它为体面的 DJango 设置开辟了道路

    ...并能够将调试器挂接到进程中,使您能够逐步执行 Python 代码

    此示例不使用 IIS 管理控制台,但列出了生成的配置文件的内容

    步骤1

    安装 Python + 一个好的调试器(这个例子使用 WingIDE,我发现这是一个很好的工具)这个例子假设文件夹 c:\python27

    第2步

    创建一个 web 文件夹,例如在 localhost c:\inetpub\wwwroot\mypythonfolder 上,并将以下 web.config 文件放入其中:

    注意 | scriptProcessor 指令中的管道字符。IIS 使用它来将脚本映射到 fastCgi 应用程序(步骤 3)。它应该逐字符匹配下面步骤 3 中的完整路径 + 管道字符 + 参数设置。

    第 3 步

    在 c:\windows\system32\inetsrc\config 文件夹中的 applicationHost.config 文件中,将以下内容放在该部分中:

        <fastCgi>
            <application fullPath="c:\python27\python.exe" arguments="c:\python27\lib\mylib\myfcgi.py" monitorChangesTo="C:\Python27\Lib\r4a\r4afcgi.py" stderrMode="ReturnStdErrIn500" maxInstances="4" idleTimeout="300" activityTimeout="300" requestTimeout="90" instanceMaxRequests="200" protocol="NamedPipe" queueLength="1000" flushNamedPipe="true" rapidFailsPerMinute="10" />
        </fastCgi>
    

    第4步

    在 c:\python27\lib\mylib\myfcgi.py 中放入以下代码:

    import wingdbstub
    

    import os, io, sys ret = "environment:\r\n" for param in os.environ.keys(): ret = ret + "%s=%s\r\n" % (param,os.environ[ param]) ret = ret + "\r\nArgs:" 用于 sys.argv 中的 arg: ret = ret + arg handle = io.open("c:\temp\myfcgi.log", 'wb') handle.write (ret) 句柄.close()

    第 5 步

    确保 IUSR 有权写入您的 c:\temp 文件夹

    第 6 步

    将wingdbstub.py 和wingdebugpw 放入您的c:\python27\lib\mylib\ 文件夹。这将启用wingide中的调试。这些文件随您的机翼安装一起提供。注意:如果 Python 还需要将您的代码编译成wingstub.pyc,则IUSR 需要对该文件夹的写入权限,因为IIS 将在该帐户下启动python 进程

    第 6 步

    打开wingdb并在'import os, io, sys'行设置断点

    第 7 步

    在浏览器中点击http://localhost/mypythonfolder

    如果一切正常,wingide 现在应该被触发以在断点处显示正在运行的代码。如果不是: - 要么是防火墙问题。python 进程通过 tcp 连接与 WingIDE 接口进行通信 - 或者wingide 中存在安全问题。它需要正确版本的wingdebugpw 文件,该文件基本上包含一个密码或令牌,用于验证对您的wingide 安装的访问。如果不是这种情况,任何对你的电脑有 tcp 访问权限的人都可以调试你的代码。

    第 8 步

    验证是否在 c:\temp 中创建了日志文件。如果您无法进行第 7 步,这也应该有效

    第 9 步

    请注意,此页面会触发调试器,但不会将任何页面返回给网络浏览器。一些背景知识:网络服务器通过所谓的“记录”与 fastcgi 通信。这意味着每个单独的用户请求都会进入您的应用程序,并打包在多个单独的“记录”中。每条记录都是一个数据结构,指示请求的开始、查询字符串、发布变量等。将这些记录解包为单个请求有点麻烦,它遵循 http://www.fastcgi的 fastcgi 规范.com/devkit/doc/fcgi-spec.html#S1

    作为 c:\python27\lib\mylib\myfcgi.py 的内容,我刚刚放入了 helicontech 提供的 zoofcgi.py 的副本。这个 python 文件能够解码这些记录并提供一个页面,调试起来非常有趣。另请注意,helicontech 可选择提供一个位于 IIS 和 zoofcgi.py 之间的 dll,但此 dll 并非绝对必要。我相信它实现了 msft 提供的 fastcgi 实现的稍微改进和通用的版本。但是,当您使用他们的 dll 时,当您想要单步执行代码时,进程会相当快地终止,并且 IIS/DLL 在断定在一秒或 2 内没有响应时会终止您的 python 进程。

    而已。原则上,IIS 和您的 python 代码之间的通信是通过命名管道完成的。您应该能够使用 tcp 套接字进行设置,但我无法弄清楚使用了哪个端口(我相信标准输入应该转换为端口,然后可以使用 select() 编辑但我没有给出那个任何尝试)

    • 1
  3. squillman
    2009-05-18T09:32:19+08:002009-05-18T09:32:19+08:00

    我没有用 Python 尝试过这个,但它作为 Perl 的 CGI 效果很好。 ActiveState 的产品与 IIS 无缝集成。我在 ActivePerl 上取得了巨大的成功。他们也有ActivePython,它可能(可能)也会在那里解决问题。然后我想你只需下载 Django安装它。

    编辑: 好的,所以从头开始与 IIS 的无缝集成......但是,这是一篇关于如何集成到 IIS的文章。您也可以考虑将Iron Python作为 Windows 机器的发行版。

    对于提供商,我怀疑他们需要知道的不仅仅是它是一个像 ASP / ASP.NET 这样的 Web 开发平台,而 Python 是用来开发它的语言。

    至于我上面提到的安装,我会尝试一下,看看效果如何。如果我能正常工作,我会在上面发布注释!

    • 0

相关问题

  • IIS 6.0 (Windows Server 2003) 上的 HTTP 压缩

  • 这个 Web 服务器可以处理多少个站点?[复制]

  • 如何在 IIS 中发送响应标头?

  • IIS 优化

  • IIS 6.0 (Windows Server 2003) 备份的最佳实践?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve