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

Как перенаправить запрос для определенного домена определенному веб-приложению, которое прослушивает определенный порт?

У меня apache2 работает на порту 80, а другой сервер приложений работает на 81.

Я хотел бы перенаправить трафик только для одного конкретного выбранного домена (mydomain.com) на сервер, работающий на порту 81, и получить доступ к этому веб-сайту, например http://mydomain.com/

Я добавил правило iptables:

iptables -A PREROUTING -t nat -i eth0 -p tcp -d mydomain.com -j REDIRECT --to-port 81

но, к сожалению, не только этот выбранный домен был перенаправлен, но и все другие веб-сайты, работающие на порте 80 и apache2, которые не должны перенаправляться на порт 81.

Есть ли какое-либо решение для достижения перенаправления только одного выбранного домена на другой порт?

Любая помощь будет высоко ценится.

iptables не видит заголовки хостов HTTP.

Что вам нужно сделать, так это либо перенаправление HTTP от Apache (указание клиенту посмотреть на http://mydomain.com:81/) или обратное проксирование с вашего порта 80 Apache в приложение порта 81 (URL-адрес клиента менять не нужно, но весь трафик будет проходить через Apache, что приведет к дополнительным накладным расходам).

Вы можете настроить его из apache, используя ИмяVirtualHost директива и дополнительные ProxyPass и ProxyPassReverse директивы, предоставленные mod_proxy модуль. Вот базовая конфигурация.

NameVirtualHost *:80

<VirtualHost *:80>
ServerName mydomain.com
DocumentRoot /var/www/mydomain
ProxyPass / http://localhost:81/
ProxyPassReverse / http://localhost:81/
</VirtualHost>

<VirtualHost *:80>
ServerName www.mydomain2.com
DocumentRoot /var/www/mydomain2
</VirtualHost>

Во-первых, не рекомендуется использовать DNS-имена в правилах iptables. Iptables будет искать имя только один раз в начале, и полученный IP-адрес будет использоваться вместо имени. Поэтому избегайте использования DNS-имен в правилах iptables.

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