Nginx backend установлен в docker за nginx-proxy. Вместо реального ip клиента на бекэнде получаются ip контейнера. Как получить реальный ip клиента?

Установлен docker. Фронт слушает nginx-proxy, который проксирует запросы внутрь на nginx.

Данная конструкция установлена на двух машинах, на одной centos7, там все поднялось и работает.

На второй centos8, сайты работают, запросы проксируются, но передается в запросах ip адрес контейнера nginx-proxy.

Все настройки идентичные.

В логах рабочего nginx-proxy (centos7) виден ip адрес клиента

nginx.1 | site.ru 77.88.5.92 - - [29/Mar/2020:14:21:41 +0000] "GET /264.html HTTP/1.1" 200 10759 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +yandex.com/bots)" D kj В логах nginx-proxy (centos8) идет ip контейнера, половина данных нет

nginx.1 | _ 172.18.0.1 - - [29/Mar/2020:14:03:34 +0000] "GET / HTTP/1.1" 400 157 "-" "-"

Контейнер nginx-proxy собирается в docker-compose.yml version: '3.0'

services:

proxy:
  image: jwilder/nginx-proxy
  # image: jwilder/nginx-proxy:alpine
  restart: always

  ports:
    - 80:80
    - 443:443
  volumes:
    - /var/run/docker.sock:/tmp/docker.sock:ro
    - /home/adkondrdo8/docker_site/site.ru/docker/nginx/ssl:/etc/nginx/certs
  networks:
    - proxy

whoami:
  image: jwilder/whoami
  restart: always
  environment:
    - VIRTUAL_HOST=whoami.local
networks:
proxy: # driver: bridge

На бекэнде в настойках виртуального хоста в разделе server:
set_real_ip_from 172.18.0.0/24;
set_real_ip_from 172.18.0.1;
set_real_ip_from 172.18.0.2;
real_ip_header X-Real-IP;
В centos8 есть особенность в новой подсистеме брандмауэра - nftables, а Docker поддерживает только iptables, может быть в этом загвоздка, при установке не подымался DNS в контейнерах, было решено добавлением правила маскарада firewall-cmd --zone=public --add-masquerade --permanent
  • Вопрос задан
  • 587 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы