2012-08-27 31 views
6

Tôi có một dự án Django và tôi muốn giao nó bằng gunicorn (và apache proxing). Tôi không thể sử dụng Nginx, vì vậy điều đó là không thể.Triển khai Django với Gunicorn và APACHE

tôi đã thiết lập proxy Apache và thiết lập một kịch bản để Á hậu gunicorn, nhưng tôi nhận được lỗi lạ này

2012-08-27 14:03:12 [34355] [DEBUG] GET/
2012-08-27 14:03:12 [34355] [ERROR] Error handling request 
Traceback (most recent call last): 
    File "/home/tileone/venv/lib/python2.6/site-packages/gunicorn/workers/sync.py", line 93, in handle_request 
    self.address, self.cfg) 
    File "/home/tileone/venv/lib/python2.6/site-packages/gunicorn/http/wsgi.py", line 146, in create 
     path_info = path_info.split(script_name, 1)[1] 
    IndexError: list index out of range 

Tôi đang chạy script này

#!/bin/bash 
LOGFILE=/var/log/gunicorn/one-project.log 
VENV_DIR=/path/to/venv/ 
LOGDIR=$(dirname $LOGFILE) 
NUM_WORKERS=5 
# user/group to run as 
USER=USER 
GROUP=GROUP 
BIND=127.0.0.1:9999 
cd /path_to_project 
echo 'Setup Enviroment' 
#some libraries 
echo 'Setup Venv' 
source $VENV_DIR/bin/activate 
export PYTHONPATH=$VENV_DIR/lib/python2.6/site-packages:$PYTHONPATH 
#Setup Django Deploy 
export DJANGO_DEPLOY_ENV=stage 
echo 'Run Server' 
test -d $LOGDIR || mkdir -p $LOGDIR 
export SCRIPT_NAME='/home/tileone/one-project' 
exec $VENV_DIR/bin/gunicorn_django -w $NUM_WORKERS --bind=$BIND\ 
       --user=$USER --group=$GROUP --log-level=debug \ 
       --log-file=$LOGFILE 2>>$LOGFILE 

và cấu hình apache của tôi là như thế này:

Alias /static/ /hpath_to_static/static/ 
Alias /media/ /path_to_static/media/ 
Alias /favicon.ico /path_to/favicon.ico 

ProxyPreserveHost On 
<Location /> 
    SSLRequireSSL 
    ProxyPass http://127.0.0.1:9999/ 
    ProxyPassReverse http://127.0.0.1:9999/ 
    RequestHeader set SCRIPT_NAME /home/tileone/one-project/ 
    RequestHeader set X-FORWARDED-PROTOCOL ssl 
    RequestHeader set X-FORWARDED-SSL on 
</Location> 

Tôi đang làm gì sai?

Trả lời

10

Trong trường hợp bất cứ ai đã vấn đề tương tự, tôi quản lý để khắc phục điều này bằng cách loại bỏ tương đương với:

RequestHeader set SCRIPT_NAME /home/tileone/one-project/ 

Và thay vì thêm vào settings.py tương đương với:

FORCE_SCRIPT_NAME = '/one-project' 

Tất nhiên cho điều này, cấu hình apache phải giống như sau:

ProxyPreserveHost On 
<Location /one-project/> 
    SSLRequireSSL 
    ProxyPass http://127.0.0.1:9999/ 
    ProxyPassReverse http://127.0.0.1:9999/ 
    RequestHeader set X-FORWARDED-PROTOCOL ssl 
    RequestHeader set X-FORWARDED-SSL on 
</Location> 
Các vấn đề liên quan