Назад | Перейти на главную страницу

Iptables: как перенаправить порт 80 только для определенного домена

извините за название, но я такой новичок в конфигурациях серверов. У меня есть проблема (конечно), и я постараюсь объяснить ее вам:

Моя проблема в том, что веб-серверу необходимо перенаправлять соединения с порта 80 на 8080, поэтому мой разработчик Ruby (не я, я всасываю ruby) сделал перенаправление с помощью

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

Как следствие, мой веб-сайт, конечно, не работает с портом 80. мой вопрос: есть ли способ указать iptables перенаправить порт 80 только для подключения к рубиновому серверу (и, следовательно, к первому домену?) Я не могу изменить порт сервера, так как вы предлагаете мне, чтобы использовать 80 для веб-сайта? извините за глупые вопросы, но я полностью отстой. Я забыл упомянуть, что я больше не общаюсь с разработчиком Ruby, так что это делает ситуацию более драматичной для меня :)

заранее спасибо

Если вы обслуживаете оба домена с одного и того же IP-адреса, вы не можете сделать это с помощью переадресации портов, потому что iptables не имеет возможности узнать, к какому домену пытается подключиться клиент. Ваш сервер не участвует в поиске DNS, и клиент не отправляет HTTP Host: заголовок до после TCP-соединение установлено.

Что вы можете сделать, так это использовать Apache mod_proxy создать обратный прокси который передает HTTP-запросы на сервер Ruby. Этот рецепт покажи покажи:

<VirtualHost *:*>
    ProxyPreserveHost On
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
    ServerName your.ruby.site
</VirtualHost>

В этой конфигурации люди, которые посещают сайт Ruby, фактически не будут подключаться к серверу Ruby, они будут подключаться к Apache. Но Apache будет обслуживать страницы, запрашивая их с сервера Ruby, поэтому результат в основном такой же.