Вопрос или проблема
На данный момент я пытаюсь настроить свой первый 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
право.
Это можно сделать двумя способами:
-
[Это требует SystemD версии 229 или позже, поэтому это исключает CentOS 7] Попросив SystemD запустить Tomcat с этим правом:
systemctl edit --full tomcat.service
В редакторе перейдите в раздел
[Service]
и добавьте эту строку:AmbientCapabilities=CAP_NET_BIND_SERVICE
Сохраните файл, а затем скажите SystemD перезагрузить:
systemctl daemon-reload
-
Запуская Tomcat через
authbind
(сравните этот блог-пост), что позволяет дальше ограничивать правоCAP_NET_BIND_SERVICE
: например, вы можете настроить Tomcat так, чтобы он мог связываться только с портом80
.
Ответ или решение
Чтобы сделать ваше веб-приложение Tomcat доступным не только по порту 8080, но и по стандартному порту 80, вам нужно рассмотреть несколько подходов. Прежде всего, стоит упомянуть, что порт 80 является стандартным портом для HTTP, и его использование улучшит доступность вашего приложения для пользователей, так как они не будут указывать порт в URL.
Вот шаги, которые вы можете предпринять для достижения этой цели:
1. Использование обратного прокси
Самый рекомендуемый способ – установить обратный прокси-сервер, такой как Apache или Nginx, который будет слушать на порту 80 и перенаправлять запросы на ваш Tomcat, который работает на порту 8080.
Пример конфигурации для Apache:
-
Установите Apache:
sudo yum install httpd
-
Включите модули для проксирования:
sudo a2enmod proxy sudo a2enmod proxy_http
-
Добавьте следующую конфигурацию в файл конфигурации Apache (обычно это
/etc/httpd/conf/httpd.conf
):ProxyRequests Off ProxyPreserveHost On ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/
-
Перезапустите Apache:
sudo systemctl restart httpd
Пример конфигурации для Nginx:
-
Установите Nginx:
sudo yum install nginx
-
Добавьте следующую конфигурацию в файл конфигурации 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; } }
-
Перезапустите Nginx:
sudo systemctl restart nginx
2. Запуск Tomcat на порту 80
Если вы хотите, чтобы Tomcat работал непосредственно на порту 80, есть несколько способов сделать это, но стоит учитывать, что для этого могут потребоваться привилегии суперпользователя.
Использование authbind
Вы можете использовать authbind
, чтобы разрешить обычному пользователю использовать порты ниже 1024.
-
Установите
authbind
:sudo yum install authbind
-
Настройте
authbind
для Tomcat:sudo touch /etc/authbind/byport/80 sudo chown tomcatuser: /etc/authbind/byport/80 sudo chmod 500 /etc/authbind/byport/80
-
Измените конфигурацию запуска Tomcat (в файле, например,
tomcat.service
), добавивauthbind
:ExecStart=/usr/bin/authbind --deep /path/to/tomcat/bin/startup.sh
Использование CAP_NET_BIND_SERVICE
Если у вас более новая версия systemd, вы можете настроить систему так, чтобы Tomcat мог использовать порт 80, не имея привилегий суперпользователя. Для этого:
-
Откройте файл службы Tomcat:
sudo systemctl edit tomcat.service
-
Добавьте следующую строку в секцию
[Service]
:AmbientCapabilities=CAP_NET_BIND_SERVICE
-
Перезагрузите конфигурацию 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. Оба подхода имеют свои плюсы, и выбор зависит от ваших требований и конфигурации сервера.