2017-06-05 3 views
0

Ich habe jetzt eine Zeit lang untersucht, und alle Dokumente scheinen zu sagen, dass dies möglich ist, aber wenn ich unsere elastic beanstalkmod_wsgiNumProcesses Config oben 1, unser Admin-Seite erhöhen ist nicht zugänglich.Elastic Beanstalk läuft mod_wsgi Django app mit mehreren Prozessen verursacht 302 Schleife

Ich habe eine Reduktion erstellt, wo ich mit einer Standard-App django getestet, und das Verhalten ist immer noch vorhanden. Ich habe auch versucht, lokal zu replizieren, aber meine apache und mod_wsgi Config kann das Problem nicht replizieren.

Grundsätzlich, was ich sehe, ist, dass jeder versuchte Login, ein 302 Found redirect zurück auf die Anmeldeseite verursacht. Ich habe die Sitzungen aus der Datenbank gelöscht und kann bestätigen, dass die Anwendung während der Anmeldung einen neuen Eintrag erstellt POST, aber der Benutzer wird immer noch zurück auf die Anmeldeseite geleitet (siehe Konfiguration und Protokolle unten). Wir haben auch einen Load-Balancer und Sticky-Sitzungen konfiguriert auf der Elastic Beanstalk Instanz (en). Hier

ist die python enthaltenen Konfigurations unserer .ebextensions

option_settings: 
    "aws:elasticbeanstalk:container:python": 
    WSGIPath: site/settings/wsgi/__init__.py 
    NumProcesses: 4 
    NumThreads: 15 

Hier ist die resultierende wsgi.conf von der Instanz genommen

WSGIPythonHome /opt/python/run/baselinenv 
WSGISocketPrefix run/wsgi 
WSGIRestrictEmbedded On 

<VirtualHost *:80> 

Alias /static/ /opt/python/current/app/site/static/ 
<Directory /opt/python/current/app/site/static/> 
Order allow,deny 
Allow from all 
</Directory> 


WSGIScriptAlias//opt/python/current/app/site/settings/wsgi/__init__.py 


<Directory /opt/python/current/app/> 
    Require all granted 
</Directory> 

WSGIDaemonProcess wsgi processes=4 threads=15 display-name=%{GROUP} \ 
    python-path=/opt/python/current/app:/opt/python/run/venv/lib64/python3.4/site-packages:/opt/python/run/venv/lib/python3.4/site-packages user=wsgi group=wsgi \ 
    home=/opt/python/current/app 
WSGIProcessGroup wsgi 
</VirtualHost> 

Hier wird ein Schnappen des access_log zeigt die Umleitung

::1 - - [05/Jun/2017:13:26:18 +0000] "POST /admin/login/?next=/admin/ HTTP/1.1" 302 - 
::1 - - [05/Jun/2017:13:26:18 +0000] "GET /admin/ HTTP/1.1" 302 - 
::1 - - [05/Jun/2017:13:26:18 +0000] "GET /admin/login/?next=/admin/ HTTP/1.1" 200 1650 

Jetzt werden die folgenden Konfigurationen und Informationen von meiner lokalen Installation übernommen.

# wsgi.conf 

WSGIVerboseDebugging 'On' 
WSGIPythonHome /usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7 
WSGISocketPrefix /tmp/wsgi 
WSGIRestrictEmbedded On 

<VirtualHost *:80> 

Alias /static/ /Users/www/app/site/static/ 
<Directory /Users/www/app/site/static/> 
Order allow,deny 
Allow from all 
</Directory> 

WSGIProcessGroup _www 
WSGIScriptAlias//Users/www/app/site/settings/wsgi/__init__.py \ 
     process-group=_www 


<Directory /Users/www/app/> 
    Require all granted 
</Directory> 

WSGIDaemonProcess _www processes=4 threads=15 display-name=%{GROUP} group=_www user=_www \ 
    python-path=/Users/www/app:/usr/local/lib/python2.7 \ 
    home=/Users/www/app/site 
</VirtualHost> 

erwartet access_log

::1 - - [05/Jun/2017:23:27:48 +1000] "POST /admin/login/?next=/admin/ HTTP/1.1" 302 - 
::1 - - [05/Jun/2017:23:27:48 +1000] "GET /admin/ HTTP/1.1" 200 2783 

Die Frage, die ich habe, ist, warum eine Arbeit tut, und man erzeugt eine Schleife? Ich kann eine Option auf der WSGIScriptAlias sehen, aber das ist nicht verfügbar auf der elastic beanstalk Konfig, und die Dokumentation sagt immer noch, dass dies machbar ist. Was fehlt mir hier? Warum verursacht dieses Problem mehrere Prozesse?

Zusätzliche Hinweise

Failing mod_wsgi Version 3.5

Arbeiten mod_wsgi Version 4.5.15

Ich war auch in der Lage zu meinem lokalen wsgi App arbeitet mit python 3.6

Antwort

0

Nach einiger Zeit bekomme ich gefunden ein Session data corrupted Eintrag in th e apacheerror_log

Es stellte sich heraus, dass der Code zum Generieren der SECRET_KEY wurde zufällig in der Produktion zugeordnet.

Das bedeutet, wenn die Anfrage an einen anderen Prozess übergeben wurde, stimmte der Sitzungsschlüssel nicht überein, loggte den Benutzer aus und schickte die zurück zur Anmeldeseite. Daher die 302 Found Schleife.

Gefunden das hilfreich Django Login/Session Not Sticking

Verwandte Themen