24 января 2014 г.

Tornado, remote_ip, nginx, production

Топик состоит из набора ключевых слов, потому что названия поста я не придумал.

Итак, если вы перенесли свое Tornado-приложение на production-сервер, где фронтэндом стоит Nginx, и вдруг обнаружили, что self.request.remote_ip всегда возвращает IP локалхоста, то вы определенно не добавили в конфиг веб-сервера проброс хэдера с настоящим клиентским IP.
Исправьте ситуацию:
Теперь в атрибуте self.request.headers, который является обычным словарем, будет доступен ключ 'X-Real-Ip', содержащий реальный IP клиента.

Чтобы приложение отдавало IP корректно как в девелоперской среде, так и на рабочем сервере, можно написать свой метод, проксирующий получение IP:

1 комментарий:

  1. Также, если клиенты собираются подолгу сидеть на порту, полезно поменять таймаут nginx по умолчанию, иначе он самовольно "выкинет" их, если будут молчать:

    `
    location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass http://upstream_name;
    proxy_send_timeout 36000s;
    }
    `

    ОтветитьУдалить