1

I want to use nginx as a reverse for apache and gunicorn

location / should be handled by apache

location /webapps/should be handled by gunicorn

upstream gfbu_app_server { server unix:/webapps/gfbu/run/gunicorn.sock fail_timeout=0; } server { listen 80; server_name eu-con.gfbu; client_max_body_size 4G; access_log /webapps/gfbu/logs/nginx-access.log; error_log /webapps/gfbu/logs/nginx-error.log; location /static/ { alias /webapps/gfbu/gfbu/static/; } location /media/ { alias /webapps/gfbu/gfbu/media/; } location /webapps/ { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; if (!-f $request_filename) { proxy_pass http://gfbu_app_server; break; } } error_page 500 502 503 504 /500.html; location = 500.html { root /webapps/gfbu/static/; } # everything to apache location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8090; } 

This works kind of, but the request URL for gunicorn is http://<ipaddress>/webapps/ but it has to be / to work.

Gunicorn serves a Django Webapp and it cant match the http://<ipaddress>/webapps/ to any url pattern. Clearly I did something wrong here- comming from Apache and mod_wsgi it was possible to redirect the the request to the specified wsgi_script without the subdir part.

Iam not sure wich part of the nginx -> gunicorn -> django stack is misconfigured - could you help me out?

1 Answer 1

2

Replace

proxy_pass http://gfbu_app_server; 

With:

proxy_pass http://gfbu_app_server/; 

This will not work with the if block. To not break Djangos autogenerated URL (remember: Django thinks it operates at the document root) you have to add the FORCE_SCRIPT_NAME variable to the settings.py e.g:

FORCE_SCRIPT_NAME = "/webapps" 

Also check if you need to change the redirects for LOGIN_URL and LOGOUT_URL

2
  • This works kind of - it breaks all the django autogenerated urls since they loose the subdirectory prefix and are given back to apache Commented Jul 13, 2015 at 10:32
  • this can be resolved by adding: FORCE_SCRIPT_NAME = "/webapps" to the django settings.py file Commented Jul 13, 2015 at 10:40

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.