- PVSM.RU - https://www.pvsm.ru -

Веб-разработка / Решение проблемы с появлением 8080 порта в ISP manager (настройка редиректа на 80 порт)

Сегодня столкнулся с проблемой — обнаружилось, что по ошибке старого системного администратора, в одном очень редком случае у нас происходил редирект с обычного 80 порта на порт 8080.

Из-за этого в индекс яндекса попала целая куча страниц, имеющих адрес example.com:8080, потому что проблема существовала уже 3 года, а заметили ее только сейчас.

Проблема усугублялась тем, что сервер конфигурировался автоматически с помощью ISP manager, что привело к тому, что сайты были доступны как по адресу example.com, так и по example.com:8080, и с учетом того, что к серверу было привязано 5 ip-адресов и на нем крутилось около 20 сайтов, переконфигурировать все вручную чтобы сконфигурировать правильным способом апач и nginx (сделать, чтобы апач слушал только 127.0.0.1 и чтобы они висели на одном порту с nginx, а внешние адреса слушал только nginx) не представлялось возможным. Проблеме потенциально подвержены все сайты, которые пользуются ISP manager, поэтому я считаю ее достаточно актуальной, и решил опубликовтаь свое решение, чтобы все тоже проверили и исправили, если надо.

Соответственно стояла задача — «малой кровью» сделать:
1. чтобы сайт example.com корректно работал, но не открывался по адресу example.com:8080
2. чтобы с порта 8080 для одного определенного сайта шел редирект на 80 порт, чтобы сохранить работоспособность страниц, попавших в выдачу яндекса.

Перейти сразу к ответу, без предыстории [1]
Беглое гугление [2] не показало ничего хорошего, большинство способов были аналогичны способу с iptables, предложенному тут [3]:

iptables -A INPUT -p tcp -m tcp --dport 8080 -j REDIRECT --to-ports 80

Проблема в том, что этот способ не работает — dmesg выдает

ip_tables REDIRECT target: only valid in nat table, not filter.

После небольшого гугления нашел вариант в списке рассылки nginx-ru:
www.lexa.ru/nginx-ru/msg21134.html [4]
Вариант был такой — перевесить в apache.conf мой сайт с моего ip 11.22.33.44:8080 на 127.0.0.1:8080, в nginx.conf соответсвенно прописать proxy_pass 127.0.0.1:8080 вместо 11.22.33.44:8080 для моего сайта, и потом добавить в конфиг nginx новый сервер

 server {        listen  11.22.33.44:8080;        rewrite ^/(.*)$ http://$host:80/$1 redirect; }

Вариант в принципе был похож на правду, но была одна проблема — апач упорно слушал порт 11.22.33.44:8080, и соответсвенно не давал nginx-у начать его слушать.

Тут меня осенило — можно просто взять, и реализовать такой же редирект, но средствами apache а не nginx.

Просто берем и добавляем в apache2.conf соответствующий VirtualHost:

<VirtualHost 11.22.33.44:8080> ServerName example.com Redirect 301 / http://example.com/ </VirtualHost> 

Попробовал — и вуаля, все заработало!

Решение проблемы

Таким образом, решение проблемы "как сделать редирект с 8080 порта на 80", при условии что у вас стоит debian, nginx, apache и все это настроено isp-менеджером для сайта example.com с ip 11.22.33.44, состоит из четырех простых шагов:
1. В конфиге Apache (/etc/apache2/apache2.conf) меняем все вхождения

Virtual Host 11.22.33.44:8080

на

VirtualHost 127.0.0.1:8080

2. Добавляем в конфиг Apache (/etc/apache2/apache2.conf) новый VirtualHost с редиректом:

<VirtualHost 11.22.33.44:8080> ServerName example.com Redirect 301 / http://example.com/ </VirtualHost> 

3. В конфиге nginx (/etc/nginx/nginx.conf) меняем все вхождения

proxy_pass http://11.22.33.44:8080

на

proxy_pass http://127.0.0.1:8080

4. перезапускаем apache, перезапускаем nginx

/etc/init.d/apache2 restart /etc/init.d/nginx restart 

Автор: rednaxi


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/nginx/2621

Ссылки в тексте:

[1] Перейти сразу к ответу, без предыстории: #answer

[2] Беглое гугление: http://yandex.ru/yandsearch?p=1&text=%D0%BA%D0%B0%D0%BA+%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C+%D1%80%D0%B5%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82+%D1%81+%D0%BF%D0%BE%D1%80%D1%82%D0%B0+8080+%D0%BD%D0%B0+80&clid=46511&lr=43

[3] тут: http://habrahabr.ru/qa/451/#answer_1967

[4] www.lexa.ru/nginx-ru/msg21134.html: http://www.lexa.ru/nginx-ru/msg21134.html