Apache-2.4

使用 Windows / Apache / Mod_WSGI 提供 Python 頁面?

  • February 25, 2016

我正在嘗試在 Windows 上設置 python / apache / WSGI。

我安裝了以下所有 32 位和 vc9:

  • 阿帕奇 2.4
  • Python 2.7.9
  • Mod_WSGI.so 在模組文件夾中。

http://localhost/成功顯示 Apache Haus 網頁——Apache 正在執行和服務。

這是我的“Hello World”python 腳本:

def application(environ, start_response):
   status = '200 OK'
   output = 'This is my Website!'

   response_headers = [('Content-type', 'text/plain'),
                       ('Content-Length', str(len(output)))]
   start_response(status, response_headers)

   return [output]

這是我的 Apache 配置:

WSGIScriptAlias /wsgi "C:/wsgi_app/wsgi_app.py"
<Directory "C:/wsgi_app">
AllowOverride None
Options MultiViews
Require all granted
</Directory>

此版本將以純文字形式顯示文件,而不是對其進行解釋。

如果我將選項更改為無…

WSGIScriptAlias /wsgi "C:/wsgi_app/wsgi_app.py"
<Directory "C:/wsgi_app">
AllowOverride None
Options none
Require all granted
</Directory>

我得到 404 Not Found on http://localhost/wsgi

apache 錯誤日誌似乎對故障排除沒有太大用處。

[Wed Feb 10 16:17:49.293987 2016] [wsgi:warn] [pid 4448:tid 336] mod_wsgi: Compiled for Python/2.7.9+.
[Wed Feb 10 16:17:49.293987 2016] [wsgi:warn] [pid 4448:tid 336] mod_wsgi: Runtime using Python/2.7.9.
[Wed Feb 10 16:17:49.325187 2016] [mpm_winnt:notice] [pid 4448:tid 336] AH00354: Child: Starting 64 worker threads.
[Wed Feb 10 16:17:52.538793 2016] [wsgi:error] [pid 4448:tid 1040] [client ::1:54402] Target WSGI script not found or unable to stat: C:/wsgi_app/wsgi_app.py

“LoadModule access_compat_module modules/mod_access_compat.so”沒有註釋,如果這很重要的話。

關於如何讓這個頁面載入/其他 apache 配置更改嘗試的任何想法?

我需要在某處更改 python 配置嗎?

從您得到的錯誤中:

$$ wsgi:error $$ $$ pid 4448:tid 1040 $$ $$ client ::1:54402 $$目標 WSGI 腳本未找到或無法統計:C:/wsgi_app/wsgi_app.py

您很可能在“C:/wsgi_app/”目錄中沒有名為“wsgi_app.py”的文件。

現在Options Multiviews做什麼?

這是來自Apache 2.4 文件的引用:

MultiViews 的效果如下:如果伺服器收到對 /some/dir/foo 的請求,如果 /some/dir 啟用了 MultiViews,並且 /some/dir/foo 不存在,則伺服器讀取目錄尋找名為 foo.* 的文件,並有效地偽造了一個類型映射,該類型映射為所有這些文件命名,為它們分配相同的媒體類型和內容編碼,如果客戶端按名稱要求其中一個。然後它選擇最符合客戶要求的匹配項。

從上面的解釋可以看出,當 Multiviews 選項被啟用時,由於一個名為的文件wsgi_app.py不存在,伺服器將嘗試查找名為wsgi_app.py.*.

我懷疑您在目錄中有一個名為wsgi_app.py.txt的文件,並且顯示了它的內容。您可能已經在 windows 中創建了一個文本文件來創建 wsgi_app.py 文件。在 Windows 中,啟用文件夾選項“隱藏已知文件類型副檔名”時,它將隱藏.txt文件的副檔名。結果,名為的文件wsgi_app.py.txt將僅顯示為wsgi_app.py.

當不再有 Multiviews 選項時,伺服器正在尋找一個完全名為“wsgi_app.py”的文件,並返回錯誤,無法找到它。

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