Назад | Перейти на главную страницу

mod_wsgi работает только когда пользователь вошел в систему

Я установил приложение Django на сервере Linux (сервер Ubuntu 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) хранится в домашнем каталоге того же пользователя. Я застрял, есть идеи?

P.S. Я очень неопытен с машинами * 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>

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

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