Рейтинг:0

Экземпляр AWS EC2 за AWS ELB не может получить реальный IP-адрес клиента

флаг hm

Я очень новичок в настройке nginx. Мое приложение API, работающее в экземпляре EC2, которое автоматически создается моей средой AWS Elastic Beanstalk. Приложение использует Nginx, а экземпляр находится за балансировщиком нагрузки ELB (классический). Домен Route 53 направляет трафик на ELB.

Я отправляю пакет от Postman или Packet Sender в этот домен, но никогда не могу получить ответ. После проверки журнала ошибок nginx вы обнаружите, что IP-адрес клиента отображается как 10.0.2.63, но не IP-адрес моего ПК. Мой настоящий IP-адрес 149,15x.1xx.2xx. Наверное 10.0.2.63 IP-адрес VPC. Ниже приведен журнал ошибок nginx.

при чтении протокола PROXY, клиент: 10.0.2.63, сервер: 0.0.0.0:80

Насколько я понимаю, поскольку IP-адрес клиента является IP-адресом VPC, экземпляр EC2 не может отправить ответ на реальный IP-адрес клиента (IP-адрес моего ПК), поэтому Postmand или Packet Sender получает пустой ответ.

Я правильно понимаю? Как я могу позволить экземпляру EC2 получить реальный IP-адрес клиента? Как показано ниже:

при чтении протокола PROXY, клиент: 149.15x.1xx.2xx, сервер: 0.0.0.0:80

Я не знаю, что это проблема с настройкой AWS ELB или настройкой nginx.

Конфигурация nginx в моем экземпляре EC2:

файлы:
/etc/nginx/conf.d/proxy.conf:
содержание: |
  client_max_body_size 500M;
  server_names_hash_bucket_size 128;

  восходящий сервер {
    сервер unix:///var/run/puma/my_app.sock;
  }

  сервер {
    слушать 80 proxy_protocol;

    журнал_доступа /var/log/nginx/access.log;
    журнал_ошибок /var/log/nginx/error.log;

    large_client_header_buffers 8 32 КБ;

    set_real_ip_from 10.0.0.0/8;
    real_ip_header X-Forwarded-For;

    место расположения / {
      прокси_http_версия 1.1;
      proxy_set_header X-Real-IP $proxy_protocol_addr;
      proxy_set_header X-Forwarded-For $proxy_protocol_addr;
      proxy_set_header Хост $http_host;
      proxy_set_header X-NginX-Proxy true;
      proxy_buffers 8 32k;
      proxy_buffer_size 64 КБ;
      прокси_пасс http://бэкэнд;
      прокси_перенаправление выключено;

      # Включает поддержку WebSocket
      расположение /v1/кабель {
        прокси_пасс http://бэкэнд;
        прокси_http_версия 1.1;
        proxy_set_header Обновить "websocket";
        proxy_set_header Соединение "Обновление";
        proxy_set_header X-Real-IP $proxy_protocol_addr;
        proxy_set_header X-Forwarded-For $proxy_protocol_addr;
      }
    }
  }
Рейтинг:1
флаг gp
Tim

Вы получаете IP-адрес клиента от Заголовок X-Forwarded-For. Этот Запись в блоге AWS дает вам конфигурацию для журналов Apache и Nginx. вот нгинкс

http {
  ...
  log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$статус $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
  журнал_доступа /var/log/nginx/access.log основной;
}

Я использую CloudFlare перед своим сервером Nginx. Вот как я заменяю IP-адрес CloudFlare фактическим IP-адресом клиента.Вы должны заменить «CF-Connecting-IP» на «X-Forwarded-For» и заменить IP CIDR на CIDR вашего VPC.

set_real_ip_from 173.245.48.0/20;
real_ip_header CF-Connecting-IP;
lei lei avatar
флаг hm
CIDR моего VPC — 10.0.0.0/16. меняю конфиг на set_real_ip_from 10.0.0.0/16; real_ip_header X-Forwarded-For; Но в журнале ошибок по-прежнему видно, что IP-адрес клиента не является реальным IP-адресом. ... при чтении протокола PROXY, клиент: 10.0.2.63, сервер: 0.0.0.0:80 Как я могу показать реальный IP-адрес в клиенте?
Tim avatar
флаг gp
Tim
Если бы это не сработало, мне пришлось бы поиграть с этим, чтобы решить это. Ключевым моментом является получение правильного IP-адреса из заголовков, которые я описал выше, как вы это делаете и куда он идет, вам предстоит изучить. Надеюсь, кто-то еще может помочь, я больше не делаю кучу с Nginx.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.