Итак, если вы перенесли свое Tornado-приложение на production-сервер, где фронтэндом стоит Nginx, и вдруг обнаружили, что
self.request.remote_ip
всегда возвращает IP локалхоста, то вы определенно не добавили в конфиг веб-сервера проброс хэдера с настоящим клиентским IP.Исправьте ситуацию:
Теперь в атрибуте
self.request.headers
, который является обычным словарем, будет доступен ключ 'X-Real-Ip', содержащий реальный IP клиента.Чтобы приложение отдавало IP корректно как в девелоперской среде, так и на рабочем сервере, можно написать свой метод, проксирующий получение IP:
Также, если клиенты собираются подолгу сидеть на порту, полезно поменять таймаут nginx по умолчанию, иначе он самовольно "выкинет" их, если будут молчать:
ОтветитьУдалить`
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://upstream_name;
proxy_send_timeout 36000s;
}
`