Назад | Перейти на главную страницу

Балансировка нагрузки с помощью nginx и tomcat

Здравствуйте, это должно быть довольно легко ответить для любого системного администратора, проблема в том, что я не администратор сервера, но я должен выполнить эту задачу, я очень близок, но все еще не могу этого сделать. Вот что я имею в виду, у меня есть два экземпляра tomcat, работающие на machine1 и machine2. Люди обычно получают к ним доступ, посещая URL-адреса:

http://machine1:8080/appName
http://machine2:9090/appName

Проблема в том, что я настраиваю nginx с доменным именем, т.е. domain.com, nginx отправляет запросы на http://machine1:8080/ и http://machine2:9090/ вместо того http://machine1:8080/ и http://machine2:9090/appName

Вот моя конфигурация (очень простая, как можно заметить):

upstream backend {
  server machine1:8080;
  server machine2:9090;
}

server {

  listen 80;

  server_name www.mydomain.com mydomain.com;

  location / {

    # needed to forward user's IP address to rails
    proxy_set_header  X-Real-IP  $remote_addr;

    # needed for HTTPS
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_max_temp_file_size 0;

    proxy_pass http://backend;

  } #end location

} #end server

Какие изменения я должен сделать, чтобы сделать следующее: - когда пользователь посещает mydomain.com - перевести его в любой machine1:8080/appName или machine2:9090

Спасибо

Обновление вопроса:

Я думаю, это сложно для новичка вроде меня. Я собираюсь использовать только один сервер экземпляра вместо двух, вот моя конфигурация:

server {

  listen 80;

  server_name www.mydomain.com mydomain.com;
  location / {
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://localhost:8080;
    }

}

Эта проблема :

Когда я приезжаю mydomain.com Я получаю эту известную страницу кота If you're seeing this page via a web browser, it means you've setup Tomcat successfully. Congratulations!.

Если я вручную перейду к mydomain.com/myApp тогда все работает как положено.

Вопрос:

Есть ли способ настроить это, чтобы сделать следующее:

Когда я набираю в адресной строке mydomain.com что меня переводят в mydomain.com/myApp

Или я совсем не в этом деле. Есть способ попроще?

Обновление II:

Когда я меняю конфигурацию на:

proxy_pass http://localhost:8080/appName/;

Сайт выглядит так, как будто он работает, но на самом деле это не так. Ссылки не работают, css / js не загружается.

Мне неясно, исходя из вашего вопроса, на каком компьютере или на обоих есть "appname" в целевом URL. Предполагая, что ваши направления:

http://machine1:8080/appName
http://machine2:9090/appName

Я просто делаю снимок, но я бы попытался добавить "/ appName" либо в блок восходящего потока, либо в строку передачи прокси:

upstream backend {
  server machine1:8080/appName;
  server machine2:9090/appName;
}

ИЛИ

location / {
    ...
    proxy_pass http://backend/appName;
} #end location

Документацию по директиве proxy_pass можно найти Вот.

Вам просто нужен HTTP 302 (перенаправление).

rewrite ^/*$ https://www.example.com/appName/ redirect;

Регулярное выражение поймает https://www.example.com вместе с https://www.example.com/ и https://www.example.com///. Новый URL-адрес будет показан пользователю браузера.

Я знаю, что ответ пришел с опозданием примерно на 5 лет, но нить перепуталась, и я увидел, что «кто-то не прав в Интернете».