Pull to refresh

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

Website development *
Сегодня столкнулся с проблемой — обнаружилось, что по ошибке старого системного администратора, в одном очень редком случае у нас происходил редирект с обычного 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
Tags: 808080apachenginxредирект
Hubs: Website development
Total votes 8: ↑3 and ↓5 -2
Comments 7
Comments Comments 7

Popular right now