tl; dr
Чтобы Tomcat прослушивал порт 8080 для получения запросов, поступающих из веб-браузеров через порт 80, используйте инструмент фильтрации пакетов в операционной системе вашего хоста, чтобы изменить номер порта входящих сетевых пакетов.,Этот процесс известен как переадресация портов .
Порт 80 ограничен ?
Я хочу, чтобы веб-сервер работал на порту 80. Везде, где ячитай, Apache Tomcat работает на 8080. Кто хочет, чтобы это было в их URL?Итак, мой первый вопрос: где я могу изменить номер порта?
В Unix-подобных операционных системах (macOS, BSD, Linux, Solaris и т. Д.), Номера портов ниже 1024 имеют ограниченный доступ в целях безопасности.По умолчанию Java построена так, чтобы быть защищенной, и поэтому не имеет (как мне известно) способа доступа к этим портам.Таким образом, все серверы Java по умолчанию имеют какое-то число от 1024 до ограничения около 64 000.По умолчанию Tomcat - 8080
, произвольно выбранный из-за симпатичного повторения 80, обычного порта для веб-приложений.
Каждый веб-браузер по умолчанию использует этот порт 80 и скрывает этот факт от пользователя.Таким образом, URL-адрес, такой как http://www.StackOverflow.com/
, эквивалентен URL-адресу с явным номером порта, например http://www.StackOverflow.com:80/
.
. Как вы и предлагали, мы обычно не хотим беспокоить наших пользователей явным портом, например 8080, для Tomcat.Как решить эту проблему Catch-22 , когда веб-браузер хочет по умолчанию использовать порт 80, но серверы на базе Java, такие как Tomcat, не могут прослушивать порт 80?Общее решение известно как перенаправление портов .
Переадресация портов ⏩
Большинство каждой Unix-подобной ОС поставляется с брандмауэром , известным как фильтр пакетов .Каждый пакет данных, передаваемый по сети и на серверную машину, может быть проверен, отфильтрован и даже изменен с помощью такого инструмента.
Требуемая нами модификация для любого входящего пакета, поступающего на порт 80 длябыть перенаправлен на порт 8080, на котором прослушивает Tomcat.При таком подходе мы изменяем сетевой трафик, не зная Tomcat, и вообще ничего не делая с Tomcat.Ни веб-браузер, ни веб-сервер не будут знать, что происходит, оба остаются блаженно невежественными.Браузер отправляет запросы, адресованные на порт 80, а веб-сервер (Tomcat, Jetty и т. Д.) Получает те теперь измененные запросы, поступающие на порт 8080.
Инструменты фильтрации пакетов, которые я видел, работаютТочно так же: вы указываете список правил.Каждое правило определяет условие, которое в случае выполнения должно привести к выполнению действия.Каждый пакет сравнивается с правилами один за другим.Список правил упорядочен, каждому правилу присваивается номер.Первое правило, соответствующее пакету, выигрывает, и его действие выполняется, в то время как остальные правила в списке игнорируются.Итак, нам нужно установить правило, которое гласит: «если этот пакет поступает на порт 80, измените порт на 8080 и позвольте ему продолжать свой путь».
Простая идея.К сожалению, у каждого инструмента фильтрации пакетов есть собственный синтаксис для этих правил.Вам нужно будет найти, какой фильтр пакетов является текущим для вашей ОС, так как некоторые старые инструменты перестали работать, вытесненные новыми инструментами.И тогда вам нужно будет изучить синтаксис правил этого инструмента.Если повезет, вы легко найдете пример фрагмента для копирования, поскольку порт 80 переадресации портов для веб-серверов встречается крайне часто.
Имейте в виду, что большинство фильтров пакетов поддерживают свои правила только для текущего сеанса работы.Когда машина, на которой размещены операционные системы, перезагружается, фильтр пакетов возвращается к настройкам по умолчанию без добавленного правила.Вы можете вручную добавить правило переадресации портов после каждой перезагрузки или найти способ, с помощью которого конкретный инструмент фильтрации пакетов может узнать правило, чтобы оно автоматически применялось после перезагрузки.
Предупреждение:Мое обсуждение выше предполагает, что вы используете Apache Tomcat в качестве веб-сервера, а также в качестве механизма JSP / Servlet.Вы упомянули HTTP-сервер Apache .Если вы используете Tomcat за Apache HTTP-сервером, то Tomcat действует только как механизм JSP / Servlet, но не как веб-сервер, что совершенно другая ситуация.