2017-06-05 28 views
0

我一直在研究了一段時間,所有的文檔似乎說這是可能的,但每當我上面增加1我們elastic beanstalkmod_wsgiNumProcesses配置,我們的管理站點無法訪問。彈性魔豆運行多程序mod_wsgi的Django應用程序造成302環

我創建了一個縮減,我用默認的django應用程序進行了測試,並且行爲仍然存在。我也嘗試在本地複製,但是我的apachemod_wsgi配置無法複製該問題。

基本上,我所看到的是,每一次嘗試登錄,導致302 Found redirect回到登錄頁面。我已經清除了數據庫中的會話,並且我可以確認應用程序在登錄POST期間創建了一個新條目,但用戶仍然被引導回登錄頁面(請參閱下面的配置和日誌)。我們還在Elastic Beanstalk實例上配置了負載平衡器和粘性會話。

這裏是我們的.ebextensions

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

這裏python包含的配置是從實例

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> 

這裏所採取的相應wsgi.confaccess_log的抓出重定向

::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 

現在,下列一組配置和信息從我的本地安裝中獲取。

# 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> 

預計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 

我的問題,是爲什麼一個工作,一個生產循環?我可以在WSGIScriptAlias上看到一個選項,但這在elastic beanstalk配置中不可用,並且文檔仍然說這是可行的。我在這裏錯過了什麼?爲什麼有多個進程導致這個問題?

附加說明

失敗mod_wsgi版本3.5

工作mod_wsgi版本4.5.15

我也能得到我的地方wsgi應用與python 3.6

回答

0

工作一段時間後,我發現一個Session data corrupted條目在th e apacheerror_log

原來,產生SECRET_KEY的代碼是在生產中隨機分配一個代碼。

這意味着,當請求被傳遞給另一個進程時,會話密鑰不匹配,將用戶登錄並將其發送回登錄頁面。因此,302 Found循環。

發現此評論有用Django Login/Session Not Sticking

相關問題