Configurando o nginx como proxy do tomcat / uWSGI

3

Estou no processo de configuração de uma máquina amazon EC2 para desenvolvimento de java e django. A pilha que escolhemos é o nginx como ouvinte de nível superior em: 80 port e passando os pedidos para os respectivos aplicativos, thro: 8080 para tomcat e thro a .sock para uWSGI.

Eu tenho o nginx configurado da seguinte maneira:

   server {
             listen       80;
             server_name  test.myproject.com;
             rewrite ^/(.*)$ /myproject/$1;
             location / {

                         proxy_pass http://127.0.0.1:8080/;
                         proxy_set_header Host $host;
                         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             }
    }
    server {
              listen       80;
              server_name  test.myotherproject.com;
             rewrite ^/(.*)$ /myotherproject/$1;
             location / {
                         proxy_pass http://127.0.0.1:8080/;
                         proxy_set_header Host $host;
                         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             }
    }
    server {
             listen       80;
             server_name  web1.myhost.com.br;

             location /static/ {
                     root /home/ubuntu/projects/hellow/;
             }

             location / {
                 uwsgi_pass      unix:/var/run/uwsgi.sock;
                 include         uwsgi_params;
                 uwsgi_param     SCRIPT_NAME '';
             }

    }

A primeira entrada do 'servidor' redireciona para um aplicativo web do tomcat .war e seu funcionamento é impecável. o terceiro está redirecionando para a meia uWSGI e também está funcionando bem. o segundo é o problema. ele é configurado da mesma maneira que o primeiro, mas quando eu acesso link , meu navegador me dá um 404 com a seguinte mensagem:

    HTTP Status 404 - /myotherproject/myotherproject/user/redirectPermission

    type Status report

    message /myotherproject/myotherproject/user/redirectPermission

    description The requested resource is not available.

    Apache Tomcat/7.0.33

/ user / redirectPermission é uma página válida, e é o comportamento esperado do aplicativo para ir até lá no primeiro acesso, para obter o usuário autenticado. O problema é o segundo / myotherproject / part que é adicionado, e eu não consigo descobrir por que ou onde isso está acontecendo. Observe que a URL que me fornece o número 404 acima é: link . Além disso, o tomcat não tem nenhuma configuração extra no arquivo server.xml, além de alterar sua porta para 8080, e a guerra está no webbapps e seu nome myotherproject.war (tomcat7.x / webapps / myotherproject.war). Alguém sabe como configurar essa configuração corretamente? Desde já, obrigado, Salvia

    
por Salvia 27.05.2013 / 20:09

2 respostas

0

Você pode realizar um teste simples?

$ curl -I http://test.myproject.com/myproject
$ curl -I http://test.myotherproject.com/myotherproject

A saída para o segundo, se estiver certo, está retornando um 301 (ou similar) para / myotherproject / user / redirectPermission, que é reescrito como / myotherproject / myotherproject / user / redirectPermission pelas regras de reconfiguração:

rewrite ^/(.*)$ /myotherproject/$1;

Se esse é realmente o problema, uma solução é fazer com que ambos os aplicativos sejam exibidos no contexto raiz, mas configurados como hosts virtuais no Tomcat, para que ele decida qual aplicativo será veiculado com base no cabeçalho do Host (talvez seja necessário para passar este cabeçalho explicitamente de nginx para Tomcat).

Mas a solução adequada é simplesmente encaminhar toda a solicitação para o Tomcat com base em uma regra de localização e deixar que o Tomcat a manipule da maneira desejada.

    
por 29.05.2013 / 08:48
0

Você pode tentar alterar a localização do proxy_pass em vez de reescrever a regra:

proxy_pass http://127.0.0.1:8080/myotherproject/;

A segunda parte do myotherproject provavelmente é anexada às regras do aplicativo Tomcat.

    
por 29.05.2013 / 11:25