Перейти до

Правильный редирект


Рекомендованные сообщения

Пробовал и с via. У меня так реализовано прозрачное проксирование.

Но на виртуал хост не работает. Буду искать.

 

P.S. Теперь лезет "Тестовая страница Apache". :)

Кажется дошло - таким способом не выйдет. :/

Копаю дальше.

Ссылка на сообщение
Поделиться на других сайтах

NameVirtualHost *:80
#Listen 80

<VirtualHost 10.0.0.10>
DocumentRoot /usr/local/www/stg
ServerName 10.0.0.10
   <Directory "/">
Options None
AllowOverride all
Order allow,deny
Allow from all
   </Directory>
</VirtualHost>

<VirtualHost 10.0.0.8:80>
DocumentRoot /usr/local/www/red
ServerName 10.0.0.8
ErrorLog /usr/local/apache/ver_log
CustomLog /usr/local/apache/cust_log common
   <Directory "/">
Options None
AllowOverride all
Order allow,deny
Allow from all
   </Directory>
</VirtualHost>

 

#Listen 80 можно ставить или убирать, можно задавать порты (81-й) вместо IP-адресов - результат один.

Странно, что из браузера если набрать искомый хост - он работает, но через fwd 10.0.0.8 или fwd 127.0.0.1,81 - перекидывает на тестовую Apache.

Ссылка на сообщение
Поделиться на других сайтах

Нужно настроить апач таким образом, чтобы он при обращении по ip отдавал нужную страницу.

Или делать редирект в два этапа:

- фаерволом перенаправлять на вэбсервер

- вэбсервером с помощью redirect или mod_rewrite и т.д. перенаправлять на нужную страницу

Ссылка на сообщение
Поделиться на других сайтах

Мне надо регулировать этот процесс правилами из OnConnect - если я приплету сюда ещё и Апач, эта задача станет геморной. Должно быть более простое решение.

Второй день бьюсь. Смешно просто - не могу сделать элементарное: перенаправить юзера на нужную страницу, когда сервер находится в полном моём распоряжении. :D

Ссылка на сообщение
Поделиться на других сайтах

С ipfw не знаком :D

На iptables я бы попробовал для одноразового редиректа покопать в сторону лимитирующих критериев (quota и quota2)

почитать можно тут

Возможно и в ipfw существуют подобные модули.

Ссылка на сообщение
Поделиться на других сайтах

Второй день бьюсь. Смешно просто - не могу сделать элементарное: перенаправить юзера на нужную страницу, когда сервер находится в полном моём распоряжении. :D

 

Вы много хотие от фаервола. Фаервол умеет перенаправлять трафик на IP и порт, на URL - перенаправлять он не умеет.

Ссылка на сообщение
Поделиться на других сайтах

Я и пытаюсь переправить на IP, я виртуальный сделал.

И сегодня свершилось: заработало. Позже выложу решение для страждущих. :D

Ссылка на сообщение
Поделиться на других сайтах

Имеем:

Сервер на ОС FreeBSD, билинг Stargazer 2.406.

 

Задача: сделать перенаправление http-запросов с целью оповещения юзеров.

 

Сделал как смог. Прошу не пинать. Если можете предложить лучше - выкладывайте.

 

Решение.

 

Сначала редктируем /usr/local/apache/conf/http.conf:

NameVirtualHost *:80
Listen 80
Listen 81

<VirtualHost *:80>
DocumentRoot /usr/local/www/stg
ServerName localhost
   <Directory "/">
Options None
AllowOverride all
Order allow,deny
Allow from all
   </Directory>
</VirtualHost>

<VirtualHost *:81>
DocumentRoot /usr/local/www/red
ServerName localhost
ErrorLog /usr/local/apache/ver_log
CustomLog /usr/local/apache/cust_log common
   <Directory "/">
Options None
AllowOverride all
Order allow,deny
Allow from all
   </Directory>
</VirtualHost>

Таким образом создаём 2 виртуальных хоста на 80 и 81 порту.

 

Перезапускаем Апач:

/usr/sbin/apachectl restart

 

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

 

Теперь ставим из портов:

 

cd /usr/ports/net/rinetd && make && make install clean

 

Добавим строку в файл /etc/rc.conf для разрешения запуска процесса демона

 

echo "rinetd_enable="YES"" >> /etc/rc.conf

 

Делаем:

 

touch /usr/local/etc/rinetd.conf

 

В /usr/local/etc/rinetd.conf добавляем:

 

127.0.0.1 81 10.0.0.1 81

 

10.0.0.1 - адрес шлюза в локальной сети (внутренний ИФ).

 

Теперь рисуем два простых скрипта:

 

Получаем список наших юзеров в файл.

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

#!/bin/sh
ls /var/stargazer/users > /usr/local/www/red/users
exit

 

Скрипт, "помечающий" юзеров к редиректу по списку, созданного скриптом выше.

Просто создаёт пустой файлик forum в каталоге юзера.

#!/bin/sh
a=`grep -c "." /usr/local/www/red/users`
a=`expr $a + 0`
g=0
while expr $a \> 0
do
b=`awk NR==$(($g+1)) /usr/local/www/red/users`
touch /var/stargazer/users/$b/forum
g=$(($g + 1))
a=$(($a - 1))
done
exit

 

А теперь правим /etc/stargazer/OnConnect, добавляя такой фрагмент:

 

...
if find /var/stargazer/users/$1/forum
then
${fwcmd} add `expr $id '*' 10 + 29000` fwd 127.0.0.1,81 tcp from $ip to any 80,8080,3128
${fwcmd} add `expr $id '*' 10 + 29001` allow all from any to $ip
${fwcmd} add `expr $id '*' 10 + 29002` allow all from $ip to any
rm -R /var/stargazer/users/$1/forum
echo "C `date +%Y.%m.%d-%H.%M.%S``arp $ip` $cash" >> /var/stargazer/users/$login/connect.log
${sgconf} -s <IP servera> -p 5555 -a admin -w <pass> -u $1 -m "ОГАНИЧЕННОЕ ПОДКЛЮЧЕНИЕ
ПОСЕТИТЕ ФОРУМ: http:/10.0.0.2/forum
ЗАТЕМ ПЕРЕПОДКЛЮЧИТЕСЬ"
   exit 1
fi
...

$1 - это переменная, хранящая логин текущего юзера;

$ip - соответственно его IP-адрес;

$id - уникальный идентификатор юзера;

Читайте документацию Stargazer в прилагаемом pdf-файле по этим переменным, если что-то непонятно.

 

Логика проста.

При коннекте скрипт проверяет есть ли в каталоге юзера файлик forum и если да - выдаёт через STG, на всякий случай, сообщение "ОГРАНИЧЕННОЕ ПОДКЛЮЧЕНИЕ ПОСЕТИТЕ ФОРУМ: http:/10.0.0.2/forum ЗАТЕМ ПЕРЕПОДКЛЮЧИТЕСЬ".

В добавок ко всему, форвардит юзера на виртуальный хост (81-й порт), где он увидит предупреждающую страничку, на которой предлагается перейти на форум (знаю что криво, писал как умел):

 

<?php

echo "Если Вы видите эту страницу, значит возникла необходимость в том, чтобы Вы посетили форум." . '<br>';
echo "Пожалуйста, учавствуйте в обсуждении вопросов и читайте объявления, это очень важно!" . '<br><br><br>';
echo "Для доступа к Интернет-страницам - выполните переподключение в авторизаторе." . '<br><br>';

echo '<hr />';

?>

<a href="http://10.0.0.2/forum/">Вход на форум </a><br><br>

 

 

Можно так же добавить в скриптик что-то вроде этого:

Ссылка на пример

 

Для возобновления нормальной работы - юзеру остаётся лишь переподключить авторизатор: после отработки скрипта OnConnect, ключевой файл "forum" - удаляется.

 

Минус, который мне удалось выявить:

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

Ссылка на сообщение
Поделиться на других сайтах
  • 3 weeks later...

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

 

Почему-же безрезультатно? Я помучался и в итоге заработало :)

Кстати поначалу "костылем" тоже пользовался, но решение с ним получается кривое.

 

Знаешь, в чем была проблема того, что апач перекидывал на IT WORKS! ?

В версии апача!!! пока стоял 1.3 был этот косяк, переустановил на 2.2 - запустилось все со старта!

 

Минус, который мне удалось выявить:

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

 

а прописать страницы 403/404 религия не позволяет?

 

  
DirectoryIndex index.php
ErrorDocument 404 /index.php
ErrorDocument 403 /index.php

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...