
前回の質問で、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"
OS: Ubuntu 18.04.5 LTS
答え1
わかりました。問題が見つかりました。本当に馬鹿げていました。基本的に、の/var/www/my_app
代わりに と書いていました。パスを修正し、サイトを無効にし、サイトを有効にし、Apache をリロードしたら、動作するようになりました。Apache が WSGI ファイルにアクセスできない場合に、少なくとも警告を出さないのはなぜか、不思議です。/var/www/my-app
/etc/apache2/sites-available/000-default-le-ssl.conf
答え2
どのユーザーが Apache を実行していますか?
そのユーザーは実際にWSGIアプリケーションにアクセスできますか?
ls -la
パスとそのすべてのコンポーネントを実行するか、namei
(namei /path/....
)を使用してこれを確認します。SELinux は強制モードになっていますか? そうである場合は、監査ログを確認してください。
audit2why
役に立つ場合があります (いくつかのパッケージをインストールする必要があるかもしれません)。