Как сделать веб-приложение Tomcat доступным не только на порту 8080, но и на порту 80

Вопрос или проблема

На данный момент я пытаюсь настроить свой первый V-Server (CentOS 7) с Tomcat для запуска веб-приложения.

Сейчас все работает отлично, но я сталкиваюсь с одной последней проблемой, которая мешает мне запустить его:

Я могу получить доступ к своему веб-приложению Tomcat только по адресу exampledomain.com:8080/WebAppName/, но мне хотелось бы, чтобы это был просто exampledomain.com/WebAppName/.

После часов (буквально около 20) не могу найти решение, но заставлять пользователя постоянно вводить 8080 для меня неприемлемо.

Я был бы очень рад, если кто-то сможет помочь с решением или советом.

Заранее спасибо!

Вам следует добавить обратный прокси перед вашим Tomcat. И вам нужно либо изменить настройки Tomcat, чтобы он слушал только на 127.0.0.1, либо закрыть доступ к порту 8080 в фаерволе.

Два примера программного обеспечения, которое вы можете использовать, это Apache и nginx. С Apache вам нужно использовать ProxyPass и ProxyPassReverse следующим образом:

ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/

С nginx это будет выглядеть так:

location / {
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   Host      $http_host;
    proxy_pass         http://127.0.0.1:8080;
}

Для полноты картины, на большинстве систем вы можете запустить Tomcat непосредственно на порту 80 (в качестве почти незащищенного пользователя). Единственное, что требуется, это CAP_NET_BIND_SERVICE право.

Это можно сделать двумя способами:

  1. [Это требует SystemD версии 229 или позже, поэтому это исключает CentOS 7] Попросив SystemD запустить Tomcat с этим правом:

    systemctl edit --full tomcat.service
    

    В редакторе перейдите в раздел [Service] и добавьте эту строку:

    AmbientCapabilities=CAP_NET_BIND_SERVICE
    

    Сохраните файл, а затем скажите SystemD перезагрузить:

    systemctl daemon-reload
    
  2. Запуская Tomcat через authbind (сравните этот блог-пост), что позволяет дальше ограничивать право CAP_NET_BIND_SERVICE: например, вы можете настроить Tomcat так, чтобы он мог связываться только с портом 80.

Ответ или решение

Чтобы сделать ваше веб-приложение Tomcat доступным не только по порту 8080, но и по стандартному порту 80, вам нужно рассмотреть несколько подходов. Прежде всего, стоит упомянуть, что порт 80 является стандартным портом для HTTP, и его использование улучшит доступность вашего приложения для пользователей, так как они не будут указывать порт в URL.

Вот шаги, которые вы можете предпринять для достижения этой цели:

1. Использование обратного прокси

Самый рекомендуемый способ – установить обратный прокси-сервер, такой как Apache или Nginx, который будет слушать на порту 80 и перенаправлять запросы на ваш Tomcat, который работает на порту 8080.

Пример конфигурации для Apache:

  1. Установите Apache:

    sudo yum install httpd
  2. Включите модули для проксирования:

    sudo a2enmod proxy
    sudo a2enmod proxy_http
  3. Добавьте следующую конфигурацию в файл конфигурации Apache (обычно это /etc/httpd/conf/httpd.conf):

    ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
  4. Перезапустите Apache:

    sudo systemctl restart httpd

Пример конфигурации для Nginx:

  1. Установите Nginx:

    sudo yum install nginx
  2. Добавьте следующую конфигурацию в файл конфигурации Nginx (обычно это /etc/nginx/nginx.conf):

    server {
       listen 80;
       server_name exampledomain.com;
    
       location / {
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header Host $host;
           proxy_pass http://127.0.0.1:8080;
       }
    }
  3. Перезапустите Nginx:

    sudo systemctl restart nginx

2. Запуск Tomcat на порту 80

Если вы хотите, чтобы Tomcat работал непосредственно на порту 80, есть несколько способов сделать это, но стоит учитывать, что для этого могут потребоваться привилегии суперпользователя.

Использование authbind

Вы можете использовать authbind, чтобы разрешить обычному пользователю использовать порты ниже 1024.

  1. Установите authbind:

    sudo yum install authbind
  2. Настройте authbind для Tomcat:

    sudo touch /etc/authbind/byport/80
    sudo chown tomcatuser: /etc/authbind/byport/80
    sudo chmod 500 /etc/authbind/byport/80
  3. Измените конфигурацию запуска Tomcat (в файле, например, tomcat.service), добавив authbind:

    ExecStart=/usr/bin/authbind --deep /path/to/tomcat/bin/startup.sh

Использование CAP_NET_BIND_SERVICE

Если у вас более новая версия systemd, вы можете настроить систему так, чтобы Tomcat мог использовать порт 80, не имея привилегий суперпользователя. Для этого:

  1. Откройте файл службы Tomcat:

    sudo systemctl edit tomcat.service
  2. Добавьте следующую строку в секцию [Service]:

    AmbientCapabilities=CAP_NET_BIND_SERVICE
  3. Перезагрузите конфигурацию systemd:

    sudo systemctl daemon-reload
    sudo systemctl restart tomcat

Смена файлового брандмауэра

Не забудьте убедиться, что у вас открыты порты 80 и 8080 в файерволе:

sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

Заключение

Таким образом, вы можете сделать ваше веб-приложение Tomcat доступным на порту 80, используя либо обратный прокси, либо разрешив Tomcat работать непосредственно на порту 80. Оба подхода имеют свои плюсы, и выбор зависит от ваших требований и конфигурации сервера.

Оцените материал
Добавить комментарий

Капча загружается...