首页 > 解决方案 > 'path/wsgi.py apache ubuntu 对 fopen() 的 mod_wsgi 调用失败

问题描述

嗨,我尝试2.2v在 ubuntu apache 服务器上部署我的 django 项目

当我运行cat /var/log/apache2/error.log我得到这个错误:

[time] [wsgi:error] [pid 13224:tid 2323232] (13)Permission denied: [remote some number:number] mod_wsgi (pid=13323, process='django_app', application='django_project|'): 调用'/root/project_name/project_name/wsgi.py' 的 fopen() 失败。

我的wsgi.py

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'zettapc.settings')

application = get_wsgi_application()

这是我的/etc/apache2/sites-available/django_proj.conf

<VirtualHost *:80>
    Alias /static /root/project_name/static
    <Directory /root/project_name/static>
        Require all granted
    </Directory>

    Alias /meida /root/project_name/meida
    <Directory /root/project_name/meida>
        Require all granted
    </Directory>

    <Directory /root/project_name/zettapc>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    WSGIScriptAlias / /root/project_name/project_name/wsgi.py
    WSGIDaemonProcess django_app python-path=/root/project_name python-home=/root/project_name/venv/
    WSGIProcessGroup django_app 

</VirtualHost>

我的浏览器上的输出是:

内部服务器错误

这是的输出ps aux | egrep '(apache|httpd)' 在此处输入图像描述

和输出ls -l /root/project_name/project_name/wsgi.py是:

-rwxr-x--- 1 root root 177 time /root/project_name/project_name/wsgi.py

有什么我错过的吗

标签: pythondjangoapacheubuntu

解决方案


您的 wsgi 文件很可能归 root 所有,而 apache 服务器以非 root 用户身份运行。您可以检查您的 apache 服务器与哪个用户一起运行,ps aux | egrep '(apache|httpd)' 以及哪个用户拥有您的 wsgi 文件ls -l /root/project_name/project_name/wsgi.py

您最好的选择是将您的项目从根文件夹移动到更合适的位置(例如/usr/)并使用更改它的所有者chown -r <user>:<user> <folder>

或者以 root 身份运行 apache 服务器,但这是一个非常糟糕的做法,所以不要这样做。

编辑:也可能是您的 wsgi 服务器(gunicorn/uwsgi?)以错误的用户身份运行,同样的修复仍然可以解决问题。


推荐阅读