Запуск Nginx в качестве обратного прокси для gunicorn и apache2
Я хочу использовать nginx как реверс для apache и gunicorn
location /
должен быть обработан Apache
location /webapps/
должен быть обработан 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;
}
Это работает вроде как, но URL запроса для gunicorn http://<ipaddress>/webapps/
но это должно быть /
работать.
Gunicorn обслуживает Django Webapp и не может соответствовать http://<ipaddress>/webapps/
на любой шаблон URL. Понятно, что я сделал что-то не так - исходя из Apache и mod_wsgi, можно было перенаправить запрос на указанный wsgi_script без части subdir.
Я не уверен, какая часть стека nginx -> gunicorn -> django настроена неправильно - не могли бы вы мне помочь?
1 ответ
Замещать
proxy_pass http://gfbu_app_server;
С:
proxy_pass http://gfbu_app_server/;
Это не будет работать с блоком if. Чтобы не нарушать автоматически сгенерированный URL Djangos (помните: Django считает, что он работает в корне документа), вы должны добавить FORCE_SCRIPT_NAME
переменная к settings.py
например:
FORCE_SCRIPT_NAME = "/webapps"
Также проверьте, нужно ли вам изменить перенаправления для LOGIN_URL и LOGOUT_URL