Apache2가 내 WSGI 앱을 찾지 못하는 이유는 무엇입니까?

Apache2가 내 WSGI 앱을 찾지 못하는 이유는 무엇입니까?

이전 질문에서 나는 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"

운영체제: 우분투 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유용할 수 있습니다(일부 패키지를 설치해야 할 수도 있음).

관련 정보