Настройте nginx для jboss / tomcat

26

Для передачи трафика на JBoss / TomCat через порт 80 с использованием Apache мы использовали его для установки и настройки mod_jk.

Есть ли эквивалент для nginx? Как правило, требуется, чтобы весь трафик порта 80 передавался в jboss.

Кев
источник
Вы можете проверить мой пост в блоге о настройке Nginx в качестве обратного прокси-сервера для Tomcat . Это может быть вам интересно, так как пример включает в себя несколько дополнительных настроек в качестве кешируемого контента только для не авторизованных пользователей и перенаправления на разные языки.
Владимир Гричина

Ответы:

17

Для nginx ознакомьтесь со своими документами здесь . Поддержка прокси встроена.

В приведенном ниже примере с их сайта вы увидите, что определенный трафик порта 80 отправляется в один контейнер сервлета, работающий на порту 8080.

Обратите внимание, что если вы хотите запустить несколько контейнеров сервлетов бэкэнда (для балансировки нагрузки, масштабирования и т. Д.), Вам следует обратиться к модулю Upstream Fair, который будет отправлять трафик на бэкэнд-сервер с наименьшей нагрузкой. Он не поставляется по умолчанию с nginx.

server {
  listen          80;
  server_name     YOUR_DOMAIN;
  root            /PATH/TO/YOUR/WEB/APPLICATION;
  location / {
    index index.jsp;
  }
  location ~ \.do$ {
    proxy_pass              http://localhost:8080;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        Host $http_host;
  }                                                                                                       
  location ~ \.jsp$ {
    proxy_pass              http://localhost:8080;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        Host $http_host;
  }
  location ^~/servlets/* {
    proxy_pass              http://localhost:8080;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        Host $http_host;
  }
}
Райан Кокс
источник
3

Еще один способ сделать это, как описано на вики-странице LikeApache .

server {
    listen myhost:80;
    server_name  myhost;
    location / {
        root /path/to/myapp/public;
        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://myapp:8080;
    }
}

Я также проверил это с / myapp вместо root и работает так же, поместив location / myapp и proxypass http: // myapp: 8080 / myapp ;

Кроме того, эта конфигурация сопоставляет все с приложением Java, что полезно, когда у вас есть хорошие URL-адреса, которые сопоставляются с инфраструктурой MVC, такой как Struts.

Марк Климент
источник
2

Вам не нужно использовать mod_jk, вы можете использовать mod_proxy, то есть передавать трафик через HTTP вместо AJP. Если у nginx есть способность прокси, это должно работать так же хорошо.

skaffman
источник
7
Проблема с прокси в том, что он медленнее, чем mod_jk / fastcgi / ajp
Адам Гент,
2

Теперь есть довольно свежий ajp_module для nginx . У меня нет с этим опыта, но я думаю, что прилипание сеанса и особенно постоянные соединения с бэкэндом весьма полезны для Tomcat. Оба метода (http proxy или ajp proxy), к сожалению, негибки для длинных запросов (комета) или для передачи больших файлов (загрузки).

https://github.com/yaoweibin/nginx_ajp_module#readme

lighttpd BTW имеет общий прокси-модуль, который может обрабатывать кодировки FCGI, HTTP, CGIS и AJP13. Это выглядит как лучший подход (но я думаю, что его чтение имеет те же ограничения в отношении нетипичных шаблонов длинных / больших запросов / ответов).

http://redmine.lighttpd.net/wiki/1/Docs:ModProxyCore

eckes
источник