Configurar nginx para jboss / tomcat

26

Para passar o tráfego para o JBoss / TomCat na porta 80 usando o Apache, costumávamos instalar e configurar mod_jk.

Existe um equivalente para nginx? Basicamente, deseja que todo o tráfego da porta 80 seja passado para o jboss.

Kev
fonte
Você pode verificar minha postagem no blog sobre a configuração do Nginx como proxy reverso para o Tomcat . Pode ser interessante para você, pois o exemplo inclui alguns ajustes adicionais como o armazenamento em cache de conteúdo apenas para usuários não conectados e o redirecionamento para diferentes idiomas.
Vladimir Grichina

Respostas:

17

Para o nginx, confira seus documentos aqui . O suporte a proxy é incorporado.

No exemplo abaixo do site deles, você verá que o tráfego específico da porta 80 está sendo enviado para um único contêiner de servlet em execução na porta 8080.

Observe que, se você deseja executar vários contêineres de servlet de back-end (para balanceamento de carga, dimensionamento, etc ...), consulte o Upstream Fair Module que enviará tráfego ao servidor de back-end menos ocupado. Não é enviado por padrão w / 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;
  }
}
Ryan Cox
fonte
3

Outra maneira de fazê-lo, como descrito na página wiki do 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;
    }
}

Também o testei com / myapp em vez de root e funciona também, colocando location / myapp e proxypass http: // myapp: 8080 / myapp ;

Além disso, essa configuração mapeia tudo para o aplicativo Java, o que é útil quando você tem URLs legais mapeadas por uma estrutura MVC como Struts.

Marc Climent
fonte
2

Você não precisa usar o mod_jk, pode usar o mod_proxy, ou seja, passar o tráfego pelo HTTP em vez do AJP. Se o nginx tiver capacidade de proxy, isso também funcionará.

skaffman
fonte
7
O problema com um proxy é que ele é mais lento do que mod_jk / fastcgi / AJP
Adam Gent
2

Agora existe um novo ajp_module para o nginx . Não tenho experiência com isso, mas acho que a aderência da sessão e, especialmente, as conexões persistentes de back-end são bastante úteis para o Tomcat. Ambos os métodos (proxy http ou proxy ajp) são infelizmente inflexíveis para consultas extensas (cometa) ou grandes transferências de arquivos (uploads).

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

O lighttpd BTW possui um módulo proxy geral que pode lidar com codificação FCGI, HTTP, CGIS e AJP13. Parece uma abordagem melhor (mas acho que, ao ler, ela tem as mesmas limitações em relação aos padrões atípicos de solicitações / respostas longas / grandes).

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

eckes
fonte