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

Ошибка Apache, mod_wsgi, Django, когда SSH не подключился к серверу

Я получаю некоторые странные ошибки, с которыми я работал до этого момента.

У меня есть установка сервера Ubuntu с Apache + mod_wsgi + Django. Когда я подключаюсь к серверу по SSH, я могу получить доступ к веб-сайту из браузера на другом компьютере, и все выглядит великолепно. Когда я не подключился по SSH, я получаю сообщение 404 Not Found в моем браузере, с этой ошибкой в ​​моих журналах Apache:

[18 апр, среда, 10:15:02 2012] [ошибка] [клиент ...] Целевой сценарий WSGI не найден или не может выполнить статистику: / home / zen / kiosk

(Что меня больше всего беспокоит в этой ошибке, так это то, что целевой сценарий WSGI не является полным путем, который я указал в моем файле конфигурации apache)

Версии:

Конфигурация Apache:

Alias /static/ /home/zen/kiosk/static/

User zen

<Directory /home/zen/kiosk/static>
Order deny,allow
Allow from all
</Directory>

WSGIScriptAlias / /home/zen/kiosk/server/config/django.wsgi
#Alias / /home/zen/kiosk/server/config/django.wsgi

<Directory /home/zen/kiosk/server/config>
Order allow,deny
Allow from all
</Directory>

При использовании только псевдонима вместо WSGIScriptAlias ​​(как закомментировано в файле конфигурации) я могу видеть файл wsgi, если я использую SSH, но получаю тот же 404, что и выше, с этим как сообщение об ошибке :

[18 апр, среда, 11:10:01 2012] [ошибка] [клиент ...] Файл не существует: / home / zen / kiosk

Конфигурация WSGI (/home/zen/kiosk/server/config/django.wsgi)

import os, sys

sys.path.insert(0, '/home/zen/kiosk/server')
sys.path.insert(0, '/home/zen/kiosk')

os.environ['DJANGO_SETTINGS_MODULE'] = 'server.settings'
os.environ['PYTHON_EGG_CACHE'] = '/var/www/.python-eggs'
os.environ["CELERY_LOADER"] = "django"

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

sys.stdout = sys.stderr

Все / home / zen / kiosk и ниже были изменены на 755, но это, похоже, не имело значения.

drwxr-xr-x 8 zen zen 4096 2012-04-16 16:13 /home/zen
zen@KioskServer:~$ ls -ld /home/zen/kiosk
drwxr-xr-x 8 zen zen 4096 2012-04-11 12:52 /home/zen/kiosk
zen@KioskServer:~$ ls -ld /home/zen/kiosk/server/
drwxr-xr-x 8 zen zen 4096 2012-04-16 15:05 /home/zen/kiosk/server/
zen@KioskServer:~$ ls -ld /home/zen/kiosk/server/config/
drwxr-xr-x 3 zen zen 4096 2012-04-03 22:05 /home/zen/kiosk/server/config/
zen@KioskServer:~$ ls -l /home/zen/kiosk/server/config/django.wsgi
-rwxr-xr-x 1 zen zen 504 2012-04-16 14:44 /home/zen/kiosk/server/config/django.wsgi

Когда я удаляю "User zen" из файла конфигурации Apache, я получаю следующую ошибку вместо сообщения Target WSGI script, если я не подключился к серверу по SSH.

[18 апр, среда, 10:29:02 2012] [ошибка] [клиент ...] (13) В доступе отказано: доступ к / логин / отказано

Где в моем браузере отображается ошибка 403 Forbidden. Эта ошибка также не возникает, когда я использую SSH.

Это похоже на некоторую ошибку разрешений или, возможно, некоторую проблему с некоторыми переменными пути. К сожалению, я застрял на этом этапе и не знаю, что еще попробовать.

Спасибо

Изменить: я видел в другом потоке, что кто-то просил эту команду (dpkg -l * apache * | grep -E '^ ii'), поэтому я решил, что добавлю ее сейчас. Раньше у меня был префорк, но я переключился на рабочий, когда кто-то предложил, что это может помочь. Точно так же ошибка возникала и в префорке, и в воркере.

ii  apache2                         2.2.16-1ubuntu3.5                Apache HTTP server metapackage 
ii  apache2-mpm-worker              2.2.16-1ubuntu3.5                Apache HTTP Server - high speed threaded model 
ii  apache2-utils                   2.2.16-1ubuntu3                  utility programs for webservers 
ii  apache2.2-bin                   2.2.16-1ubuntu3.5                Apache HTTP Server common binary files 
ii  apache2.2-common                2.2.16-1ubuntu3.5                Apache HTTP Server common files 
ii  libapache2-mod-wsgi             3.2-2                            Python WSGI adapter module for Apache

Edit2: Похоже, это связано с зашифрованным домашним каталогом, о котором я не знал, что у меня есть на этом сервере. Я пока не могу опубликовать ответ на него из-за репутации, но я отправлю его, когда смогу, чтобы другие люди с той же проблемой могли быстрее разобраться в сделке.

После двух дней поисков я нашел кого-то еще с та же проблема.

По сути, сервер был настроен с зашифрованным домашним каталогом (без моего ведома), поэтому, когда я вошел в систему и тестировал, все прошло, как ожидалось. Но как только я этого не сделал, домашний каталог стал недоступен для Apache.

Надеюсь, если кто-нибудь еще столкнется с этой проблемой, этот пост поможет им. Самый быстрый способ узнать, есть ли у вас зашифрованный домашний каталог, - это запустить:

$ mount | grep ecryptfs

Процесс «расшифровки» вашего домашнего каталога казался болезненным, поэтому я решил эту проблему, переместив свой каталог Django из / home в / var / www.