mod_wsgi работает только когда пользователь залогинен

Я установил приложение Django на сервере Linux (Ubuntu server 12.4), используя Apache (mod_wsgi) и PostgreSQL (psycopg2). У меня были проблемы с Unix-аутентификацией Postgres, поэтому я выбрал обычного пользователя как владельца базы данных, так и пользователя apache. Это работало нормально, но теперь я должен войти в систему с этим пользователем, чтобы mod_wsgi работал. Если я не вошел в систему, apache нормально обслуживает статические файлы, но при попытке доступа к mod_wsgi возникает следующая ошибка:

[...] [error] [...] Target WSGI script not found or unable to stat: /parent/folder

Я попытался проверить права доступа к файлу (включая установку 777), но все еще получал ту же ошибку (родительские папки также доступны для чтения всем). Файл (вместе со статическими файлами и файлами Django) хранится в домашнем каталоге того же пользователя. Я застрял сейчас, есть идеи?

PS Я очень неопытен с машинами *nix, я настроил это как хак, чтобы заставить систему работать. Но я бы предпочел иметь другого пользователя для Apache и PostgreSQL, или, по крайней мере, одного и того же пользователя для обоих, но не обычного (то есть того, который также будет использоваться для входа и выполнения каких-либо действий). Быстрое решение, которое я могу использовать сразу, было бы здорово, но правильное решение - даже если я не могу подать заявление немедленно - также было бы очень кстати.


Обновление: мой apache2.conf Файл в основном не изменен (из настроек по умолчанию), изменились только пользователь и группа:

#User ${APACHE_RUN_USER}
#Group ${APACHE_RUN_GROUP}
User myuser
Group myuser

(имена пользователей и групп совпадают)

Файл с виртуальными хостами содержит в значительной степени стандартную установку Django, но каждый файл хранится в домашней папке этого пользователя (значение 755, подтверждено доступным Apache):

<VirtualHost *:80>

    DocumentRoot /home/myuser/myproject
    <Directory />
        Options All
        AllowOverride None
    </Directory>
    <Directory /home/myuser/myproject>
        Options All
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    WSGIDaemonProcess myproject processes=6 threads=1
    WSGIProcessGroup myproject

    Alias /media/ "/home/myuser/myproject/media/"
    Alias /static/ "/home/myuser/myproject/static/"
    WSGIScriptAlias / "/home/myuser/myproject/myproject.wsgi"

    ErrorLog /var/log/apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined
</VirtualHost>

Я уже покинул сайт своего клиента, но я постараюсь повторить настройку на моей машине разработки как можно скорее (поэтому я в основном заинтересован в правильном решении, а не в быстром исправлении). Любые намеки или указатели приветствуются.

1 ответ

Решение

Домашний каталог myuser был зашифрован, что означает, что он был подключен только тогда, когда пользователь вошел в систему. Таким образом, даже при наличии необходимых разрешений процесс Apache не мог прочитать wsgi файл, в результате чего в "не найден" запись журнала. Статические файлы были кэшированы, по этой причине они все еще загружались нормально (в течение некоторого времени).

Другие вопросы по тегам