Apache, mod_wsgi, erro do Django quando não é SSH'd no servidor

2

Estou recebendo alguns erros estranhos com os quais trabalhei até esse ponto.

Eu tenho uma configuração de servidor Ubuntu com Apache + mod_wsgi + Django. Quando eu sou SSH no servidor, posso acessar o site bem de um navegador em uma máquina diferente, e tudo parece esplêndido. Quando não estou em SSH, recebo um 404 Not Found no meu navegador, com isso como o erro em meus logs do Apache:

[Wed Apr 18 10:15:02 2012] [error] [client ...] Target WSGI script not found or unable to stat: /home/zen/kiosk

(O que mais me incomoda sobre esse erro é que o script WSGI de destino não é o caminho completo que listei em meu arquivo de configuração do apache)

Versões:

  • Ubuntu 10.10 de 64 bits
  • Apache 2.2.16
  • Python 2.6.6
  • Django 1.3.1
  • mod_wsgi 3.2

Configuração do 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>

Ao usar apenas Alias em vez de WSGIScriptAlias (como comentado no arquivo Config), eu posso ver o arquivo wsgi se eu tiver SSH em, mas obter o mesmo 404 eu me levanto acima com isso como a mensagem de erro:

[Wed Apr 18 11:10:01 2012] [error] [client ...] File does not exist: /home/zen/kiosk

Configuração 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

Tudo / home / zen / kiosk e under foram chmoded para 755, mas isso não parece realmente importar.

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

Quando eu removo "User zen" do arquivo Apache Config, recebo o seguinte erro em vez do script Target WSGI, contanto que eu não seja SSH no servidor.

[Wed Apr 18 10:29:02 2012] [error] [client ...] (13)Permission denied: access to /login/ denied

Onde meu navegador tem um erro 403 Proibido. Esse erro também não ocorre quando estou usando o SSH.

Parece um erro de permissões ou talvez algum problema com algumas variáveis do caminho. Infelizmente, estou meio que preso neste ponto e não tenho certeza do que mais tentar.

Obrigado

Edit: Eu vi em um segmento diferente alguém perguntar por este comando (dpkg -l * apache * | grep -E '^ ii') então eu imaginei que iria adicionar agora. Eu costumava ter prefork, mas mudei para o trabalhador quando alguém sugeriu que poderia ajudar. O erro estava ocorrendo com o prefork e no worker exatamente o mesmo.

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: Parece que isso tem a ver com um Diretório Doméstico Criptografado, que eu não sabia que tinha neste servidor. Ainda não posso postar uma resposta para isso devido à Reputação, mas o farei quando puder para que outras pessoas com o mesmo problema consigam descobrir o negócio muito mais rapidamente.

    
por tehdiplomat 18.04.2012 / 17:24

1 resposta

2

Após dois dias de pesquisa, encontrei outra pessoa com o mesmo problema .

Basicamente, o servidor foi configurado com um Diretório Pessoal Criptografado (sem o meu conhecimento), portanto, quando eu estava conectado e testando, tudo correu como esperado. Mas assim que eu não estava, o diretório inicial não estava mais disponível para o Apache.

Espero que, se alguém se deparar com este problema, este post os ajude. A maneira mais rápida que encontrei para ver se você tem um Diretório Doméstico Criptografado é executar:

$ mount | grep ecryptfs

O processo de "descriptografar" o seu diretório home pareceu doloroso, então resolvi esse problema movendo meu diretório do Django para fora de / home e em / var / www

    
por 19.04.2012 / 16:10