2013-02-26 9 views
10

Ich habe eine Django-Anwendung auf CentOS bereitgestellt. Hier ist, was meine httpd.conf wie folgt aussieht:Django Apache mod_wsgi 500

WSGISocketPrefix /var/run/wsgi 
<VirtualHost *:80> 

    WSGIDaemonProcess safe python-path=/usr/lib/python2.6/site-packages 
    WSGIProcessGroup safe 
    WSGIScriptAlias//opt/safe/safe/wsgi.py 

    <Directory /opt/safe/safe/> 
     Order deny,allow 
     Allow from all 
    </Directory> 
</VirtualHost> 

EDIT: Das ist mein TEMPLATE_DIRS

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". 
    # Always use forward slashes, even on Windows. 
    # Don't forget to use absolute paths, not relative paths. 
    "/opt/safe/static/templates", 
    "/var/www/html/static/templates", 
) 

EDIT: Das ist mein Admin/Emailing Setup:

ADMINS = (
# ('Your Name', '[email protected]'), 
('David', '[email protected]'), 
) 

SEND_BROKEN_LINK_EMAILS = True 

DEFAULT_FROM_EMAIL = '[email protected]' 
SERVER_EMAIL = DEFAULT_FROM_EMAIL 

In meinem Vorlagenverzeichnis habe ich eine benutzerdefinierte 500.html Datei definiert. Wenn ich meine auf DEBUG = False setze, kann ich nirgends auf meiner Site landen, ohne diese benutzerdefinierte 500.html-Seite zu sehen.

Was noch seltsamer ist, ist die Tatsache, dass es keine Fehler in den Protokolldateien gibt - so bin ich mir nicht sicher, wo ich suchen oder wie ich vorgehen soll. Ich weiß, dass es die Vorlagen wegen meiner benutzerdefinierten 500.html-Datei sehen kann, aber ich bin mir nicht sicher, was die 500 Internal Server-Fehler verursacht.

EDIT: Nach der weiteren Konfiguration, ich es geschafft, einige Fehler Ausgang (dank @ Matt Stevens) zu bekommen, hier ist die Log-Ausgabe:

Traceback (most recent call last): 
File "/usr/lib/python2.6/site-packages/django/core/handlers/base.py", line 89, in get_response 
response = middleware_method(request) 
File "/usr/lib/python2.6/site-packages/django/middleware/common.py", line 55, in process_request 
host = request.get_host() 
File "/usr/lib/python2.6/site-packages/django/http/__init__.py", line 223, in get_host 
"Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): %s" % host) 
SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): [my ip address] 
+0

Wenn Sie debug auf True setzen, funktioniert alles normal? –

+0

ja - Ich kann auf alles normal zugreifen (alle meine URLs funktionieren, alles). – lightningmanic

+0

Wie sieht Ihr Tupel temple temple_dirs aus? –

Antwort

12

Stellt sich heraus, ich brauchte, um meine IP-Adresse auf die „allowed_hosts“ in meinem settings.py Datei hinzuzufügen. Dank der Fehlerprotokollierung konnte ich das endlich sehen.

Actual Code: jetzt

ALLOWED_HOSTS = ['my.server.ip.address'] 

Nach einem Apache-Neustart ordnungsgemäß funktioniert alles!

+2

Vielen Dank, dass Sie die Lösung veröffentlicht haben! Ich wusste nie von 'ALLOWED_HOSTS', es sieht so aus, als wäre es eine neue Sicherheitsfunktion: http://git.io/9Ytk6A – Matt

+0

Nun, es ist nicht Ihre IP-Adresse, die Sie hinzufügen sollten, sondern ein gültiger HTTP-Host. Wenn Sie über die IP-Adresse auf Ihren Server zugreifen, ist dies derselbe, aber Sie möchten dies wahrscheinlich in Produktionsumgebungen auf einen FQDN setzen. Siehe die [Django-Dokumentation] (https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts). – gertvdijk

8

Sie könnten versuchen, alles auf eine Datei protokollieren, die Ursache Naildown .

# in your settings file 
LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'filters': { 
     'require_debug_false': { 
      '()': 'django.utils.log.RequireDebugFalse' 
     } 
    }, 
    'handlers': { 
     'mail_admins': { 
      'level': 'ERROR', 
      'filters': ['require_debug_false'], 
      'class': 'django.utils.log.AdminEmailHandler' 
     }, 
     'logfile': { 
      'class': 'logging.handlers.WatchedFileHandler', 
      'filename': '/var/log/django/error.log' 
     }, 
    }, 
    'loggers': { 
     'django.request': { 
      'handlers': ['mail_admins'], 
      'level': 'ERROR', 
      'propagate': True, 
     }, 
     'django': { 
      'handlers': ['logfile'], 
      'level': 'ERROR', 
      'propagate': False, 
     }, 
    } 
} 
+0

Das hat nichts in "/ var/log/django" geschrieben ... – lightningmanic

+3

Ich bin mir nicht sicher, warum es anfangs nichts geschrieben hat - aber nach ein paar anderen Änderungen und einigen Berechtigungsänderungen konnte ich das Protokoll bekommen Dinge ausspucken. Vielen Dank! – lightningmanic