Wsgi.url_scheme http в docker с использованием nginx
Я использую Apache на CentOS. На этом сервере у меня есть проект Django с docker. В docker есть два контейнера (nginx и python).
В Apache у меня есть .conf, в котором есть прокси для контейнера nginx, который открыт на порту 803. SSL также установлен в Apache conf.
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Scheme "https"
ProxyPass / http://127.0.0.1:803/
ProxyPassReverse / http://127.0.0.1:803/
На докере у меня есть app.conf для nginx, который выглядит следующим образом:
upstream project {
server project-python:5000;
}
server {
listen 80;
server_name _;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
client_max_body_size 64M;
location / {
gzip_static on;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Scheme "https";
proxy_set_header X-Forwarded-Proto "https";
proxy_set_header X-Forwarded-Protocol "ssl";
proxy_set_header X-Forwarded-Ssl=on;
proxy_set_header Host $host;
proxy_pass http://project;
proxy_redirect off;
}
}
В Dockerfile Python выставлен на порт 5000, а в файле docker-compose.prod.yml для production python запускается с помощью gunicorn такой командой:
gunicorn tmssms.wsgi:application --preload --bind 0.0.0.0:5000
Таким образом, у меня есть две проблемы.
В Django, когда я делаю дамп request.META, я получаю wsgi.url_scheme
, что является http
.
Второе - я даже не понимаю, как nginx общается с gunicorn, потому что когда я устанавливаю app.conf как указано ниже, он тоже работает. Откуда nginx знает, что Python открыт на порту 5000.
server {
listen 80;
server_name _;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
client_max_body_size 64M;
location / {
proxy_pass http://project;
proxy_redirect off;
}
}