Iis

如何向執行共享 IIS 伺服器的 Python 新手解釋 Django/Python 安裝

  • March 5, 2012

由於我無法控制的原因,我們的網站由使用 IIS 作為其伺服器的託管服務提供商託管。他們目前通過 cgi 腳本提供 PHP 和 ASP,以及 Python 和 Perl。

我想重新設計,重新編寫我們的網站,並希望從 PHP 更改為 Python/Django 設置。託管服務提供商願意提供建議,但明確表示“我們並不真正知道 Python 是什麼,也不知道它是如何工作的,但如果你能向我們解釋一下,我們會盡力為你提供任何你需要的東西” .

但是,我可能知道如何在 apache/mod_python 上的共享託管環境中設置 Django,但我不知道如何在 IIS 上設置它,當然也不知道如何為共享託管環境設置它。我用Google搜尋了一下,但我發現的大多數資源都假設系統管理員 1)知道 Python/Django 和 2)正在為他的網站使用專用的 IIS 託管。

有人可以解釋我如何向我的託管服務提供商解釋這個過程,或者給我一些可以轉發給我的託管服務提供商的好的、詳細的資源嗎?請記住,執行主機的人可能知道有關 IIS 的“一切”,但不知道如何處理 Python。

如果您堅持使用 IIS,請盡可能使用 PyISAPIe 而不是 CGI。PyISAPIe 的說明和連結如下。如果您的 Web 主機管理 IIS,那麼他們對 ISAPI 擴展的了解要比對 Python 的多得多,而且他們不需要對帶有 PyISAPIe 的 Python 了解太多。

一個更好的方法是使用 PyISAPIe,一個 ISAPI 擴展。PyISAPIe 比 IIS7 上的 CGI 快得多。這與 Apache 上的 mod_python 類似。PyISAPIe 項目首頁有使用 WSGI over PyISAPIe 設置 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 環境中,呼叫 Python 解釋器來執行 Django 應用程序,對每個請求都進行全新的處理,因此應用程序無法在記憶體中保持跨請求的狀態,也無法在數據庫中正確記憶體。

**廢話不多說,如果你必須使用 IIS+CGI+Django,下面是如何完成這個可怕的事情:**使用下面的程式碼創建你自己的 CGI 腳本來執行你的 Django 應用程序(它在 CGI 和 WSGI 之間轉換)。您必須稍微編輯腳本以使其指向您的 Django 應用程序和程式碼。那是您需要向其傳遞請求的 CGI 腳本。接下來,您需要將所有請求轉發/重寫到您的 CGI 腳本…

在 IIS6 下,您需要一個類似 IISRewrite 的 mod_rewrite 等價物,我認為它不是免費的並且是封閉原始碼。在 IIS7 下,微軟終於包含了一個 URL 重寫模組。它的文件位於此處。在 IIS7 中創建重寫規則的說明在這裡。您將希望在目標基本 URL 處轉發所有內容,以由您的 CGI 腳本處理。

引用自:https://serverfault.com/questions/9121