Python

為什麼 Apache2 找不到我的 WSGI 應用程序?

  • July 27, 2021

在我之前的問題中,我詢問瞭如何讓 mod_wsgi 使用特定的 Python 版本。根據該問題的答案,我創建了一個 Python 3.9 虛擬環境並讓 WSGI 使用它。但是,現在我的 Flask 應用程序根本沒有執行——我只是為我的站點的其餘部分配置了 404 頁面。重新啟動 Apache2 時我沒有收到任何錯誤,當我訪問該站點時 Apache 錯誤日誌為空。我認為錯誤一定是由於我的虛擬環境造成的,因為我在使用相同的配置樣式之前已經創建了以前的測試 Flask 應用程序。

我的虛擬環境位於path/to/my/app/venv/.

path/to/my/app/runner.wsgi:

import sys

# Make something appear in error log if the WSGI is run at all
raise ValueError()

PROJECT_DIR = os.path.dirname(os.path.realpath(__file__))
sys.path.insert(0, PROJECT_DIR)

from my_app import app as application

部分/etc/apache2/sites-available/000-default-le-ssl.conf

WSGIDaemonProcess myapp user=www-data group=www-data threads=4 python-home=/path/to/my/app/venv/
WSGIScriptAlias /my-app/ path/to/my/app/runner.wsgi

/etc/apache2/mods-available/wsgi.load

LoadModule wsgi_module "/path/to/my/app/venv/lib/python3.9/site-packages/mod_wsgi/server/mod_wsgi-py39.cpython-39-x86_64-linux-gnu.so"
WSGIPythonHome "path/to/my/app/venv"

作業系統:Ubuntu 18.04.5 LTS

好的,我發現了問題。這真的很愚蠢。基本上,我是在寫作/var/www/my_app而不是/var/www/my-appin /etc/apache2/sites-available/000-default-le-ssl.conf。我修復了路徑,禁用了站點,啟用了站點,重新載入了 Apache,現在它可以工作了。我很好奇為什麼如果 Apache 無法訪問 WSGI 文件,它至少不會發出警告。

  • 哪個使用者正在執行 Apache?
  • 該使用者可以實際訪問您的 WSGI 應用程序嗎?ls -la通過在路徑及其所有組件上執行或使用namei( namei /path/....)來檢查這一點
  • SELinux 是否處於強制模式?如果是這樣,請檢查審核日誌。audit2why可能很有用(您可能必須安裝一些軟體包)。

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