редирект apache на другой порт
Apache Forwarding — проброска портов веб-сервера
Что такое Forwarding
Чтобы понимать, что такое Forwarding и для чего это нужно, вспомним как устроено подключение большинства домашних компьютеров. Обычно у большинства из нас дома установлен роутер, к которому подключён кабель Интернет-провайдера. От этого роутера наши домашние устройства — компьютеры, телефоны, планшеты, умные телевизоры и другие — подключаются к Интернету через Wi-Fi или кабель. То есть у нас дома функционирует локальная сеть, в которой у каждого из устройств есть свой локальный (серый) IP адрес.
Представим, что на одном из компьютеров вы установили и настроили веб-сервер Apache. И вы хотите, чтобы к этому веб-серверу можно было подключаться из Интернета. Самый простой способ это сделать — набрать в адресной строке внешний IP адрес.
Кстати, вот вы сидите за компьютером, который через роутер подключён к Интернету, у меня к вам вопрос, какой внешний IP адрес у компьютера? Вы можете зайти на один из многочисленных сервисов показа вашего IP адреса, но суть в том, что любой ответ будет неправильным. Дело в том, что у вашего компьютера, который подключён к Интернету через роутер, вообще нет внешнего IP! Этот внешний IP есть только у вашего роутера (и то не всегда — об этом в этой же статье, но позже).
Если вашему компьютеру нужно выйти в Интернет, то он по локальной сети обращается к роутеру, роутер для него делает запрос, и затем также по локальной сети отправляет полученный ответ. То есть роутер выходит в Интернет, а ваш компьютер — нет. У роутера есть внешний IP адрес, а у вашего компьютера — нет.
Возвращаемся к нашей ситуации — мы хотим, чтобы наш веб-сервер был доступен из Глобальной сети (из Интернета) — как мы все знаем, в глобальной сети компьютеры обмениваются данными друг с другом на основе адресации по IP. Но у нашего компьютера вообще нет внешнего IP — есть только локальный, который для Интернета является немаршрутизируемым, то есть никто никакие данные на наш локальный IP адрес не сможет прислать из глобальной сети.
Вот именно эту проблему и решает Forwarding, который ещё называют «переадресацией» портов, «проброской портов», «перенаправлением портов».
Для чего нужна проброска портов. Что делает Forwarding
Перенаправление портов заключается в следующем: на роутере (или на другом сетевом устройстве) устанавливается правило, суть которого примерно в следующем
«трафик, пришедший на порт 80 отправить на IP адрес 192.168.1.30 на порт 80».
В качестве IP адреса может быть указан локальный, серый IP. Пример такого адреса выше (192.168.1.30). В качестве исходного порта и порта назначения можно указывать любые порты, они не обязательно должны быть одинаковыми.
В результате получается, что можно сделать HTTP запрос к роутеру, указав его глобальный IP, роутер получит этот запрос и отправит его веб-серверу в локальной сети. Благодаря переадресации портов веб-сервер без внешнего IP оказывается доступным за пределами локальной сети.
Перенаправление портов для Apache
Как бы это не было странно, но именно в настройках Apache ничего для перенаправления портов делать не надо.
Настройка роутера требует добавления одной записи, в которой нужно указать локальный IP адрес, на который будет переадресовываться пришедший запрос. По умолчанию в роутерах используется DHCP — если коротко, благодаря этому протоколу любое подключившееся к роутеру устройство автоматически получает IP адрес. Это удобно — не нужно делать настройки. Но дело в том, что устройству выдаётся любой не занятый IP в локальной сети. Поэтому у компьютера с веб-сервером может меняться IP адрес при каждом переподключении, в результате, настроенная переадресация портов перестанет работать из-за смены IP веб-сервера.
То есть начать нужно с того, чтобы настроить статичный локальный IP адрес для компьютера. Это можно сделать двумя способами: 1) на компьютере с веб-сервером, 2) в роутере
Для изменения на компьютере, откройте Панель управления → Сеть и Интернет → Центр управления сетями и общим доступом → Изменение параметров адаптера:
Правой кнопкой мыши откройте контекстное меню интересующего вас подключения, найдите там пункт IP версии 4 (TCP/IPv4):
Нажмите Свойства и пропишите нужные параметры в зависимости от настроек вашей сети (Основной шлюз — это IP адрес вашего роутера):
Некоторые роутеры поддерживают выдачу статичных IP адресов определённым устройствам сети — они их запоминают на основе MAC-адреса устройства. У всех роутеров это настраивается чуть по-разному, но обычно нужно искать в настройках DHCP. Некоторые роутеры не поддерживают эту возможность.
Переадресация портов для Apache в роутере
Теперь, когда компьютеру с веб-сервером назначен постоянный локальный IP, нужно добавить правило перенаправления портов. В роутерах это может называться Forwarding, «Перенаправление портов», «Переадресация портов» и т. д. Иногда в роутерах имеются заготовленные настройки и можно выбрать из списка название службы, для которой вы хотите сделать переброску портов. Для Apache выберите службу HTTP:
В качестве портов назначения и перенаправления запроса укажите 80. На скриншоте видно, что можно установить не один порт, а диапазон портов. Если вы хотите настроить только один порт, то укажите одно и то же значение в качестве начала диапазона и конца диапазона.
В качестве Local (локальный IP, адрес, куда будет перенаправлен запрос) укажите IP веб-сервера. External (внешний IP) указывать не нужно.
Активируйте созданное правило перенаправления портов.
Теперь все запросы, пришедшие на 80 порт роутера, будут перенаправлены на указанный IP адрес и указанный порт. Аналогичные настройки можно сделать для любых служб — для FTP сервера, SSH и так далее. То есть к этим службам появиться доступ из внешней сети.
Делая такие настройки, всегда помните о безопасности. Теперь служба становится доступной из глобальной сети, и хакеры могут атаковать её.
Когда не нужен Forwarding
Если у вас кабель Интернет-провайдера напрямую подключается к компьютеру с веб-сервером, то вам не нужен форвардинг. При аренде VPS сервера также не нужен форвардинг, так как у таких серверов прямой (белый) IP адрес.
Если Интернет провайдер использует NAT
NAT — это технология, которая позволяет множеству устройств выходить в Интернет используя один и тот же IP адрес. Кстати, в вашей локальной сети, в которой имеется роутер, уже применяется NAT — именно благодаря этому все ваши устройства могут выходить в Глобальную сеть и не нужно каждому из них иметь внешний IP.
Как вы понимаете, это часто используемая технология. Возможно, вы много лет ею пользуетесь, даже не зная про неё. Она действительно приносит очень много пользы, но у неё есть недостаток — она позволяет делать подключения «в одну сторону». То есть если ваш компьютер инициализировал подключение к Интернету, то он отправит его роутеру, роутер сделает две вещи: 1) запомнит, что запрос пришёл с определённого устройства и 2) отправить этот запрос в Интернет. Когда придёт ответ, роутер всё ещё «помнит», что этот запрос был сделан для определённого устройства в локальной сети, и отправит ответ именно этому устройству. И так происходит каждый раз.
Но вот если на роутер придёт новый HTTP запрос из Глобальной сети (не ответ на запрос, а именно новый запрос), то роутер банально не знает, для кого в локальной сети он предназначен (если не настроена переадресация портов). Поэтому с этим поступившим запросом роутер ничего не делает. Мы уже рассмотрели эту проблему и даже нашли решение — переадресация портов. Но многие Интернет-провайдеры также используют NAT. И работа происходит по точно такому же принципу — ваши HTTP запросы уходят в Глобальную сеть и вы без проблем получаете HTTP ответы, но новые запросы из Интернета к вашему компьютеру не могут пройти через NAT.
И поэтому даже если вы на своём роутере правильно настроили форвардинг портов, может получиться так, что вы всё равно не сможете подключится к нему из Интернета. Выход из такой ситуации только один — аренда белого IP у Интернет-провайдера.
Как изменить порт Apache
HTTP сервер Apache – один из наиболее часто используемых веб-серверов в интернете на сегодняшний день. По своим характеристикам и многофункциональности он превосходит своих конкурентов (таких, как Nginx).
Как изменить порт Apache
Сервер Apache по умолчанию настроен на ожидание входящих соединений через порт 80. Если настроить протокол TLS, сервер будет слушать соединения через порт 443. Для использования других портов, необходимо подправить конфигурационный файл Apache.
sudo nano /etc/apache2/ports.conf
sudo nano /etc/httpd/conf/httpd.conf
В этом примере мы настроим HTTP сервер Apache для ожидания подключений на порту 8081. Убедитесь, что после директивы Listen 80, дающей указание серверу прослушивать порт 80, была добавлена следующая строка:
После того, как вы добавили приведенную выше строку, вам нужно создать или изменить виртуальные хосты Apache, чтобы привязать хост к нужному порту. В приведенном ниже примере мы изменим порт Apache для стандартного виртуального хоста веб-сервера с 80 на 8081.
Нужно открыть и отредактировать файл /etc/apache2/sites-enabled/000-default.conf, указав порт 8081, как показано на картинке ниже.
sudo nano /etc/apache2/sites-enabled/000-default.conf
Чтобы применить изменения и новые порты Apache стали доступны, перезапустите сервис. После перезапуска порт 8081 должен отображаться в выводе утилиты ss или netstat. Команды для Ubuntu:
Настройка портов apache завершена. Теперь вы можете открыть браузер и зайти на веб-сервер, введя доменное имя или IP-адрес и порт 8081. Страница Apache должна отобразиться в браузере. Однако, если вы не можете просмотреть веб-страницу, вернитесь на консоль сервера и убедитесь, что правила брандмауэра установлены верно для разрешения сетевого трафика по данному порту:
Если у вас включен SELinux в CentOS или RHEL установите пакет policycoreutils, чтобы добавить необходимые правила. А потом перезапустите Apache для применения изменений.
sudo yum install policycoreutils
Чтобы открыть порт Apache 8081 добавьте правила SELinux.
Откройте браузер и попытайтесь перейти на ваш сервер по IP-адресу или доменному имени через порт 8081. Убедитесь в работоспособности порта. В браузере должна отобразиться страница Apache.
Если вы вcё ещё не можете получить доступ к данному адресу убедитесь, что этот порт разрешен в брандмауэре вашего сервера.
Перенаправление Apache и Nginx
Статья давно не обновлялась, поэтому информация могла устареть.
Содержание
Apache
Подключения модуля mod_rewrite
Для включения перенаправления средствами Apache, достаточно чтобы модуль mod_rewrite.so был загружен в Apache.
После внесения изменений в конфигурационный файл Apache, для вступления в силу этих изменений, нужно перезапустить веб сервер:
Правила Redirect
Redirect или RedirectPermanent
Главный недостаток данных правил заключается в том, что для каждого адреса необходимо прописывать новое правило. Если необходимо сделать несколько редиректов, то каждый новый редирект пишется с новой строки.
Если нужно сделать несколько редиректов, то каждый новый редирект нужно написать с новой строки.
Для перенаправления всех запросов на другой сайт вы можете использовать следующую конструкцию:
RedirectMatch
Этот редирект отличается тем, что в нем можно использовать регулярное выражение. Например, при переносе сайта с Windows на Linux, необходимо сменить все ссылки с *.php на *.aspx:
RewriteRule
Для работы данного модуля убедитесь в том, что включена опция FollowSymLinks, эту функцию нужно прописать в конфигурационном файле Apache или в файле .htaccess как указано ниже.
Рассмотрим самые распространённые варианты её использования.
Редирект с одного сайта на другой
Редирект с www на без www
Или более понятный синтаксис
Вы можете использовать любой.
Редирект с без www на www
Перенаправление домена с https на http
Для того, чтобы данное перенаправление работало, должен использоваться только Web-сервер Apache. При использовании связки Nginx+Apache будет возникать ошибка циклической переадресации. Поэтому редирект нужно будет настраивать именно в Nginx
Перенаправление домена с http на https
Для того, чтобы данное перенаправление работало, должен использоваться только Web-сервер Apache. При использовании связки Nginx+Apache будет возникать ошибка циклической переадресации. Поэтому редирект нужно будет настраивать именно в Nginx
Nginx
Модуль ngx_http_rewrite_module, необходимый для настройки перенаправлений, он устанавливается автоматически вместе с Nginx.
Редирект 301 с www.domain.com на domain.com
Для Nginx вам нужно создать две секции server в конфигурационный файл, одна для домена с www, вторая для домена без www:
Секция server для редиректа:
Секция server, где находятся основные настройки домена:
После внесения изменений в конфигурационный файл Nginx, для вступления в силу этих изменений, нужно перезапустить веб сервер.
Редирект 301 с domain.com на www.domain.com
Для Nginx вам нужно создать две секции server в конфигурационный файл, одна для домена без www, вторая для домена с www.
Секция server для редиректа:
Секция server, где находятся основные настройки домена.
После внесения изменений в конфигурационный файл Nginx, для вступления в силу этих изменений, нужно перезапустить веб сервер.
Редирект 301 с https на http
Для Nginx вам нужно создать две секции server в конфигурационный файл, одна для https(443 порт), вторая для http(80 порт).
Секция server для открытия по https(443 порт) и настройки редиректа:
Секция server, для открытия по http(80 порт), где находятся основные настройки домена.
После внесения изменений в конфигурационный файл Nginx, для вступления в силу этих изменений, нужно перезапустить веб сервер.
Редирект 301 с http на https
Для Nginx вам нужно создать две секции server в конфигурационный файл, одна для http(80 порт), вторая для https(443 порт).
Для нового домена в конф. файле nginx
Секция server, для открытия по http(80 порт) и настройки перенаправления:
Секция server, для открытия по https(443 порт), где находятся основные настройки домена.
Для существующего домена в конф. файле nginx
Если вы вносите изменения в существующую секцию конф. файла nginx делайте это так: Из основной секции домена удалите строку вида
И создайте новую секцию server такого вида:
После внесения изменений в конфигурационный файл Nginx, для вступления в силу этих изменений, нужно его перезапустить так:
Как сделать редирект с одного порта на другой?
Пробовал в virtualhost на порту 8083 добавить строки
Не помогло, апач похоже туда даже и не до ходит, есть варианты как это вылечить?
Если у вас «стоит связка nginx+apache2», то зачем apache2 отвечает на внешние запросы?
По-идеи, за обработку внешних запросов http:80/https:443 должен отвечать nginx, и при необходимости проксировать их уже локально apache2. А, apache2 в свою очередь должен слушать только локлаьные запросы и быть недоступен извне.
Тогда и поисковики не увидят страницы с разными портами.
есть варианты как это вылечить?
Apache2 слушает только локлаьные запросы:
«VirtualHost 127.0.0.1:8080». «/VirtualHost»
«VirtualHost 127.0.0.1:8083». «/VirtualHost»
Nginx слушает внешние запросы:
server <
listen *:80;
.
>
server <
listen *:443 ssl http2;
.
>
И при необходимости передает их в apache2:
proxy_pass backend/;
Тогда все запросы site.ru и https://site.ru будет обрабатывать nginx на стандартных портах, и извне site.ru:8080 и https://site.ru:8083 не будут доступны.
Опишу как я делал у себя, может вам такая схема тоже подойдёт.
За все внешние http/https соединения у меня отвечает nginx, причем стоит автоматический редирект с http на https. Поэтому конфиги хостов для nginx выглядят вот так:
upstream backend <
server 127.0.0.1:80;
>
Соответственно, теперь внешние запросы принимаются только на порты :80/:443 nginx’ом, а все нестандартные порты :8080/:8083 и т.д. никто не слушает, поэтому и не доступны из вне.
Перенаправление Apache на другой порт
Я боролся с этим некоторое время и определенно делаю что-то не так.
У меня есть сервер Apache и сервер JBoss на одном компьютере. Я хочу перенаправить трафик с mydomain.com на JBoss localhost: 8080 / example. DNS в настоящее время настроен для mydomain.com, и при вводе в браузере он будет идти прямо на порт 80.
У меня вопрос: как мне перенаправить на другой порт, когда определенное доменное имя приходит к apache (в данном случае «mydomain.com»)?
14 ответов
После внесения этих изменений добавьте необходимые модули и перезапустите apache.
Это работает и в ISPConfig. В списке веб-сайтов войдите в домен, перейдите на вкладку «Параметры» и добавьте следующие строки:;
Тогда зайдите на сайт и wolaa 🙂 Это тоже рабочий протокол HTTPS.
Все это отличное понимание доступа к портам через доменные имена на виртуальных серверах. Однако не забудьте включить виртуальные серверы; это можно закомментировать:
Мы запускаем WSGI с сервером Apache в домене sxxxx.com и сервером golang, работающим на порту 6800. Некоторые брандмауэры, похоже, блокируют доменные имена с помощью портов. Это было нашим решением:
Apache поддерживает виртуальные хосты на основе имен и IP. Похоже, вы используете оба, что, вероятно, не то, что вам нужно.
Мой apache слушает 2 разных порта,
Я использую 80, когда мне нужен прозрачный URL-адрес, и не помещаю порт после URL-адреса, полезного для служб Google, которые не разрешают локальный URL-адрес?
Но я использую 8080 для внутренней разработки, где я использую порт как ссылку для «среды разработки».
Просто используйте обратный прокси в своей конфигурации apache (напрямую):
Если вам не нужно использовать прокси для JBoss и mydomain.com:8080 может быть «открыт» миру, я бы сделал это.
Вы должны убедиться, что прокси включен на сервере. Вы можете сделать это с помощью следующих команд:
Выяснил это методом проб и ошибок. Если ваша конфигурация указывает ServerName, тогда ваша директива VirtualHost должна будет сделать то же самое. В следующем примере awesome.example.com и amazing.example.com будут перенаправлены в какую-то локальную службу, работающую на порту 4567.
Я знаю, что это не совсем ответ на вопрос, но я помещаю его здесь, потому что это лучший результат поиска для переадресации портов Apache. Так что я полагаю, что когда-нибудь это кому-нибудь поможет.
Я хотел сделать именно это, чтобы получить доступ к Jenkins из корневого домена.
Я обнаружил, что мне пришлось отключить сайт по умолчанию, чтобы это работало. Вот что я и сделал.
И вставьте это в файл:
Далее нужно включить / отключить соответствующие сайты:
Надеюсь, это кому-то поможет.
Я решил эту проблему с помощью следующего кода:
Я также использовал:
Это может быть старый вопрос, но вот что я сделал:
Объяснение: Слушайте все запросы к порту 80 локальной машины. Если я запросил » http://something.com/somethingorother «, перенаправьте этот запрос на » http://localhost:8080/somethingorother «. Это должно работать для внешнего посетителя, потому что, согласно документации, он сопоставляет удаленный запрос с пространством локального сервера.
Я использую Apache 2.4.6-2ubuntu2.2, поэтому я не уверен, как «-2ubuntu2.2» влияет на более широкую применимость этого ответа.
После внесения этих изменений добавьте необходимые модули и перезапустите apache.