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;
    }
}
Вернуться на верх