Я получаю некоторые странные ошибки, с которыми я работал до этого момента.
У меня есть установка сервера 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.