Passagem do proxy Apache no nginx

1

Eu tenho a seguinte configuração no Apache:

RewriteEngine On


#APP
ProxyPass /abc/ http://remote.com/abc/
ProxyPassReverse /abc/   http://remote.com/abc/

#APP2
ProxyPass /efg/ http://remote.com/efg/
ProxyPassReverse /efg/   http://remote.com/efg/ 

Estou tentando ter a mesma configuração no nginx. Depois de ler alguns links, é isso que tenho:

server {
      listen 8081;
      server_name  localhost;
      proxy_redirect http://localhost:8081/ http://remote.com/;

      location ^~/abc/ {
        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://remote.com/abc/;
      }

       location ^~/efg/ {
        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://remote.com/efg/;
      }
    }

Eu já tenho a seguinte configuração:

server {
        listen       8080;
        server_name  localhost;


        location / {
            root   html;
            index  index.html index.htm;
        }
        location ^~/myAPP {
            alias   path/to/app;
            index main.html;
        }

        location ^~/myAPP/images {
            alias   another/path/to/images
            autoindex on;
        }
    }

A ideia aqui é superar um problema de política de mesma origem. As páginas principais estão em localhost: 8080, mas precisamos de chamadas ajax para o link . Ambos os domínios estão sob meu controle.

Usando a configuração acima, as chamadas ajax não chegam ao servidor remoto ou são cortadas devido à origem cruzada.

A solução acima funcionou no Apache e não está funcionando no nginx, então estou assumindo que é um problema de configuração.

Acho que há uma questão implícita aqui: devo ter duas declarações server ou devo de alguma forma mesclá-las em uma?

EDITAR: Adicionadas mais algumas informações

EDIT2: Mudei toda a configuração do proxy_pass para a declaração principal server e mudei todas as chamadas do ajax para passar pela porta 8080. Agora estou recebendo um novo erro: 502 Connection reset by peer . O Wireshark mostra pacotes saindo para o link com uma soma de verificação de cabeçalho IP incorreta.

    
por summerbulb 25.06.2012 / 12:26

1 resposta

2

Não funciona não é especialmente detalhado, mas deixe-me tentar adivinhar qual pode ser o problema. Sugiro tentar a seguinte configuração:

server {
  listen 8081;
  server_name  localhost;

  location /abc/ {
    proxy_pass http://remote.com/abc/;
    proxy_http_version 1.1;
    proxy_redirect http://localhost:8081/ http://remote.com/;
    proxy_set_header Host $host;
    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; 
  }

   location /efg/ {
    proxy_pass http://remote.com/efg/;
    proxy_http_version 1.1;
    proxy_redirect http://localhost:8081/ http://remote.com/;
    proxy_set_header Host $host;
    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; 
  }
}

O que eu realmente mudei foram as definições de blocos de localização e adicionei um cabeçalho Host , apenas para o caso de o host remoto usar hosts virtuais baseados em nome. Todas as outras alterações são cosméticas - a legibilidade é melhorada quando todas as diretivas correspondentes são reunidas e ordenadas adequadamente (isso pode estar em ordem de importância ou por algum outro traço).

Se a configuração acima não funcionar conforme o esperado, adicione algumas informações sobre o que exatamente não funciona e como ela falha exatamente.

Editar: também adicionei um cabeçalho Host à configuração acima, para o caso de o remoto usar hosts virtuais baseados em nome.

    
por 25.06.2012 / 12:37