Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: nginx + apache реальный IP на сайтах  (Прочитано 1657 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн flint2000

  • Автор темы
  • Активист
  • *
  • Сообщений: 268
    • Просмотр профиля
nginx + apache реальный IP на сайтах
« : 21 Октября 2015, 20:47:18 »
Ситуация такова. Переехал на новый сервер. Настроил связку nginx/1.8.0 + Apache/2.4.10 (php 5.6), установил модуль rpaf и настроил его. В логах апача все как положено пишуться реальные IP пользователей, а вот на сайтах все пользователи имеют один ip сервера.
До этого на старом сервере такие же настройки работали нормально и все определялось правильно. Виртуальные хосты для nginx формирую таким скриптом
#!/bin/sh
VIRTUALMIN_PATH='/etc/webmin/virtual-server/domains/'
NGINX_PORT=80
NGINX_CONFIG_PATH='/etc/nginx/sites-available/'
NGINX_LN_CONFIG_PATH='/etc/nginx/sites-enabled/'
NGINX_PRG_PATH='etc/init.d/'
APACHE_PORT=4000
#if [ -a /etc/nginx/nginx.conf ] then
#       echo "nginx.conf found, generating vhost.conf..."
#else
#       echo -e "nginx.conf NOT found, aborting...\E[31;40m[ ABORTED ]"; tput sgr0; exit
#fi

for FILE in `find $VIRTUALMIN_PATH -type f \! -name '*,v' \! -name "$HOSTNAME"`; do
        for DOMAIN in `cat $FILE | grep ^dom=| cut -d= -f2`; do
                IP=`cat $FILE|grep ^ip=|cut -d= -f2`;
                #ALIAS=`cat $FILE|grep ^serveralias|grep ^serveralias|cut -d: -f2`;
                ALIAS='www.'$DOMAIN
                #echo $ALIAS
                USER=`cat $FILE|grep ^user=| cut -d= -f2`;
                DOCUMENT_ROOT=`cat $FILE|grep ^public_html_path=|cut -d=  -f2`;
                #echo "Converting servername $DOMAIN for file $FILE";
                cat > "$NGINX_CONFIG_PATH$DOMAIN.conf" <<EOF
############### $DOMAIN ###############
server {
        access_log /var/log/nginx/access/$DOMAIN.log;
        error_log  /var/log/nginx/error/$DOMAIN.log warn;
        listen    $NGINX_PORT;
        server_name  $DOMAIN $ALIAS;
        location  ~* \.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|mp3|bmp|rtf|js|swf|avi)$ {
                root $DOCUMENT_ROOT;
        }
        location ~ /\.ht {
                deny  all;
        }
        location / {
                limit_req zone=one burst=5;
                client_max_body_size    10m;
                client_body_buffer_size 128k;
                proxy_send_timeout   90;
                proxy_read_timeout   90;
                proxy_buffer_size    4k;
                proxy_buffers 80 32k;
                proxy_busy_buffers_size 64k;
                proxy_temp_file_write_size 64k;
                proxy_connect_timeout 10s;
                proxy_redirect  http://www.$DOMAIN:$APACHE_PORT   http://www.$DOMAIN;
                proxy_redirect  http://$DOMAIN:$APACHE_PORT  http://$DOMAIN;
                proxy_pass   http://$IP:$APACHE_PORT/;
                proxy_set_header   Host   \$host;
                proxy_set_header   X-Real-IP  \$remote_addr;
                proxy_set_header   X-Forwarded-For \$proxy_add_x_forwarded_for;
        }
}
EOF
        if [ ! -e $NGINX_LN_CONFIG_PATH$DOMAIN.conf ]; then
                ln -s $NGINX_CONFIG_PATH$DOMAIN.conf $NGINX_LN_CONFIG_PATH$DOMAIN.conf
        fi
        done
done
Как это можно исправить? Пробовал крутить настройки rpaf ни один из вариантов не работает

Оффлайн shkiper-dv

  • Новичок
  • *
  • Сообщений: 28
    • Просмотр профиля
Re: nginx + apache реальный IP на сайтах
« Ответ #1 : 22 Октября 2015, 05:59:47 »
netstat -tn | grep ESTABLISHED
что выдает, IP шлюза или реальные?
у меня при доступе к сайту в ДМЗ через два шлюза в локалке (локалка---шлюз1---шлюз2---дмз(сайт)), у подключений отображался адрес шлюза, пришлось настраивать маршрут попроще - сразу к тому шлюзу, где расположен сайт, стали отображатся реальные адреса
при этом при доступе из вне, к этому же сайту (по резервному каналу - потому такие сложности), через другой шлюз (т.е. инет---шлюз1---локалка---шлюз2---дмз(сайт)) netstat выдает реальные IP
в причинах пока не копался, думаю это из-за того что где то в первом случае в правилах шлюза вместо ната стоит аллоу (но если бы на обоих шлюзах был "аллоу", то маршрут бы не работал (не работала бы именно исх. маршрутизация, вх. пакеты дошли бы до адресата без проблем), получается для вх. и исх. трафика используются разные дорожки)
во втором случае (из вне по рез. каналу) при исходящей маршрутизации подставляются виртуальные таблицы маршрутизации - и в правилах там везде нат
аллоу - это "разрешить" пакеты на интерфейс, без механизма nat, при этом если на пути попадется второй шлюз, то интерфейс назначения исходного IP не увидит, только адрес этого шлюза, где было allow
P.S. в апачах и нжинксах ничего не понимаю, сетевики мы, этой темой меня озадачили веб-программеры, в логах у ни не отображались адрес локальных юзеров
« Последнее редактирование: 22 Октября 2015, 06:11:16 от shkiper-dv »

Оффлайн flint2000

  • Автор темы
  • Активист
  • *
  • Сообщений: 268
    • Просмотр профиля
Re: nginx + apache реальный IP на сайтах
« Ответ #2 : 22 Октября 2015, 09:23:42 »
shkiper-dv,
Выдает адрес сервера. Я так думаю, что проблема все таки в связке nginx + apache, а скорее всего в конфиге nginx. Ведь на Дебиан 7 такая связка работала без проблем, к тому же в логах апача отображается реальный ИП

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Re: nginx + apache реальный IP на сайтах
« Ответ #3 : 22 Октября 2015, 12:29:18 »
Для 2.4 не нужен RPAF. Там уже есть собственный модуль для этого.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн flint2000

  • Автор темы
  • Активист
  • *
  • Сообщений: 268
    • Просмотр профиля
Re: nginx + apache реальный IP на сайтах
« Ответ #4 : 22 Октября 2015, 14:55:49 »
Для 2.4 не нужен RPAF. Там уже есть собственный модуль для этого.
Без RPAF даже в логах адрес сервера

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Re: nginx + apache реальный IP на сайтах
« Ответ #5 : 22 Октября 2015, 18:01:18 »
Вы мой ответ внимательно прочли?...
http://httpd.apache.org/docs/2.4/new_features_2_4.html :
New modules:
mod_remoteip
Replaces the apparent client remote IP address and hostname for the request with the IP address list presented by a proxies or a load balancer via the request headers.


/facepalm
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн flint2000

  • Автор темы
  • Активист
  • *
  • Сообщений: 268
    • Просмотр профиля
Re: nginx + apache реальный IP на сайтах
« Ответ #6 : 22 Октября 2015, 19:53:15 »
AnrDaemon,
Да прочитал, просто до последнего надеялся это исправить. remoteip настроил и работает. Спасибо

 

Страница сгенерирована за 0.074 секунд. Запросов: 25.