@wargych

Как правильно передать реальный ip с nginx на go-сервер?

Добрый день
Просьба к разбирающимся подсказать по двум вопросам.
1) как правильно передать реальный ip пользователей с nginx на сервер с вебсокетом? пробовал по этим инструкциям:

https://dev.to/hackersandslackers/deploy-a-golang-...


https://serveradmin.ru/nginx-proxy_pass/#Peredaca_...

но пока собрать конфиг не получилось.
Сейчас нужный location выглядит так:
location = /game {
            proxy_pass http://localhost:9000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }

2) remote ip в go я получаю следующим образом:
user.conn.RemoteAddr().String()

https://pkg.go.dev/net?tab=doc#Addr

При тестах на локалке ip выдавался нормально, на боевом же сервере иногда выдается нормально:
127.0.0.1:52696
а иногда вот так:
[::1]:42120
Причем закономерности не вижу, достаточно просто обновить страницу и попробовать заново запросить ip, выдает любой из этих вариантов.
С чем это может быть связано?
Полагаю, что тоже с конфигом nginx, т.к. локально все отрабатывает как нужно.
  • Вопрос задан
  • 276 просмотров
Решения вопроса 1
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
user.conn.RemoteAddr().String()
дает IP nginx с которым conn. Чтобы передать реальный ip пользователей его нужно вложить в заголовок запроса. Что нибудь вроде конфигурации nginx
location / {
...
    proxy_set_header X-Real-IP $remote_addr;
...

И потом вытащить из этого заголовка в хендлере на Go как нибудь так
*http.Request.Header.Get("X-Real-IP")
Что касается [::1]:42120, то как уже ответили - это просто нотация ipv6
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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