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

в 7:01, , рубрики: Apache, nginx, редирект, метки: , ,

Сегодня столкнулся с проблемой — обнаружилось, что по ошибке старого системного администратора, в одном очень редком случае у нас происходил редирект с обычного 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 порт, чтобы сохранить работоспособность страниц, попавших в выдачу яндекса.


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

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
Вариант был такой — перевесить в 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


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js