Не удается получить заголовки в приложении flask через nginx -gunicorn - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь получить реальные ip-адреса пользователей, которые заходят на сайт. Для этого я хотел бы добавить настраиваемую авторизацию для службы API. Использование заголовков для обоих случаев кажется хорошей идеей.

Проблема в том, что я не могу получить настраиваемые заголовки в моем приложении flask, которое обслуживается nginx и веб-серверами Gunicorn. Получение заголовков 'remote_addr' возвращает только IP-адрес 127.0.0.1, несмотря на то, что я отправляю сообщения из внешней сети, а не из localhost.

Вот мои файлы конфигурации:

часть nginx config / /1.14.2

location / {
        # forward application requests to the gunicorn server
        proxy_read_timeout 30s;
        proxy_send_timeout 30s;
        proxy_connect_timeout 30s;
        proxy_pass http://127.0.0.1:5000;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        add_header CLIENT-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

часть конфигурации gunicorn //20.0.4

[program:wapp]
command=/home/deeslo/processor/venv/bin/gunicorn -b localhost:5000 -w 4 microservice:app
directory=/home/deeslo/processor
user=deeslo
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true

Когда я проверяю заголовки, я не вижу там ни X-Real-IP / CLIENT -IP from nginx и другие настраиваемые заголовки, которые я отправил в flask, не создают заголовки ответа.

Что я пропустил? Не могу решить пока.

1 Ответ

0 голосов
/ 26 июня 2020

О, это была полностью моя вина.

Проблема заключалась в том, что я отлаживал приложение в своей среде IDE, где приложение выполнялось через встроенный веб-сервер, а не nginx.

Приведенное выше решение работает идеально, я могу получить IP-адрес пользователя в приложении flask с помощью:

request.header['X-Real-IP']

...