LINUX.ORG.RU
решено ФорумAdmin

ip адрес клиента - это ip адрес гипервизора

 ,


1

1

Добрый день.

Схема такая:

Есть сервер (назову его А) с айпи 1.0.0.1 - он главный, на нём крутятся виртуальные машины, которые выполняют свои задачи. К нему, само собой, есть доступ из интернет.

На нём крутится виртуальная машина (назову её Б) с айпи 1.0.0.2, которая выполняет роль веб-сервера.

Организовано всё при помощи nginx: он установлен на машине «А» и проксирует запросы на машину «Б», на которой, nginx + php-fpm.

Есть сайт, который лежит на машине Б и на нём ведётся статистика переходов с этого сайта на сторонние ресурсы - в базу данных, помимо прочего, записываются ещё и айпи-адреса клиентов (статистика по которым и собирается).

Грубый пример: зашёл ко мне на сайт человек с ip 3.3.3.3 и перешёл по ссылке. Мне в базу записался его ip. (Можно было всё это не расписывать, а посмотреть access.log с машины Б)

Проблема в следующем: РАНЬШЕ, когда схема вебсервера была такая

nginx -> apache
в эту статистику (читай access.log) записывались правильные айпишники клиентов. Теперь же в статистику пишется адрес гипервизора «А» 1.0.0.1.

Подозреваю, что какие-то заголовки не передаю. Только какие?

На всякий случай, вот конфиг виртуалхоста с гипервизора:

server {
    listen внешний_айпи_сервера:80;
    server_name www.сайт.ru *.сайт.ru;

    access_log off;
    error_log /var/log/nginx/сайт.ru.error.log crit;

    location / { 
        client_max_body_size 32m;
        proxy_max_temp_file_size 0;

        proxy_pass http://1.0.0.2:80;
    
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    Host            $http_host;
        proxy_set_header    X-NginX-Proxy   true;
    
        proxy_redirect off;
        port_in_redirect off;
    }   
}

Адрес клиента лежит в заголовке x-real-ip. Судя по всему апач был в курсе этого, и выставлял правильные переменные этому твоему пыху. Вобщем man nginx mod_real_ip

redixin ★★★★ ()

проксирует запросы на машину «Б», на которой, nginx + php-fpm.

Выкини второй нжинкс, проксируй сразу на фпм. Логи (если они тебе надо) дублируй в rsyslog на 1.0.0.2.

Ну или поставь модуль, который будет брать айпишник из x-real-ip.

/thread.

svr4 ()
Последнее исправление: svr4 (всего исправлений: 2)
Ответ на: комментарий от svr4

Выкини второй нжинкс, проксируй сразу на фпм

А можно поподробней, пожалуйста? Как настроить fpm, чтобы работал отдельно на сервере без nginx или apache?

tetramin ()
Последнее исправление: tetramin (всего исправлений: 1)
Ответ на: комментарий от redixin

апач был в курсе этого, и выставлял правильные переменные

Спасибо. Настроил, прописав на бэкенде:

set_real_ip_from    1.0.0.1;
real_ip_header      X-Real-IP;

tetramin ()
Ответ на: комментарий от tetramin

Ну, грубо говоря - копируешь конфиги вирт.хоста на тачку, где сейчас крутится «внешний» nginx, поправив адрес FPMа в директиве upstream (или непосредственно в fastcgi_pass) - вместо unix-socket или 127.0.0.1:port вставляешь 1.0.0.2:port.

При этом, можно не вешать на 1.0.0.2 белый айпишник вообще, хватит и внутренней подсети, абы 1.0.0.1 его видел.

Второй нжинкс есть смысл плодить, если у тебя там к примеру ресайзинг картинок (и то, есть нюансы - можно заставить его на одной тачке слушать отдельный сокет и кэшировать самого себя).

svr4 ()
Последнее исправление: svr4 (всего исправлений: 1)
Ответ на: комментарий от svr4

ЗЫ: Да, естественно, такой конфиг предполагает, что на тачке 1.0.0.2 находиться только код, а статика лежит на 1.0.0.1, либо где-то в третьем месте.

svr4 ()
Ответ на: комментарий от svr4

У меня на главной машине 1.0.0.1 нет ни кода, ни статики. Это исключительно прокси-сервер. Просто я распределил таким образом, что вся инфраструктура виртуальная. То есть, несколько виртуальных машин: одна - веб-сервер одного высоконагруженного проекта, другая - другого, третья - веб-сервер нескольких малонагруженных, ещё парочка машин: днс и почтовик... Целью была изоляция друг от друга.

tetramin ()
Последнее исправление: tetramin (всего исправлений: 1)
Ответ на: комментарий от tetramin

Ну, у нас например статика выложена на отдельную виртуалку с ssd. Похапе-коду быстрый диск особо без надобности, а статике в свою очередь без надобности дофига процессорных ресурсов - при том, что там ещё и ресайзер картинок, хватает двух кукурузных ядер (Xeon E5 с включённым HT).

svr4 ()
Последнее исправление: svr4 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.