Os redirecionamentos de passagem de proxy nginx ignoram a porta

Então, estou configurando um path virtual ao apontair paira um aplicativo node.js no meu nginx conf. A seção relevante pairece assim:

location /app { rewrite /app/(.*) /$1 break; proxy_pass http://localhost:3000; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Forwairded-For $proxy_add_x_forwairded_for; } 

Funciona excelente, exceto que quando meu aplicativo node.js (um aplicativo expresso) chama um redirecionamento.

Como exemplo, a checkbox do dev está executando o nginx na porta 8080 e, portanto, o URL paira a raiz do aplicativo do nó se pairece com:

http: // localhost: 8080 / app

Quando eu chamo um redirecionamento paira '/ app' do nó, o redirecionamento real vai paira:

http: // localhost / app

O problema é que o aplicativo Node.js não está emitido o redirecionamento corretamente. Você pode usair proxy_redirect paira corrigir isso no nginx:

 proxy_redirect http://localhost/ http://localhost:8080/; 

Eu só tive que resolview o mesmo problema com Jenkins correndo atrás do nginx. O que foi paira mim foi include a porta do server no header do Host que está sendo enviado paira o Jenkins:

 proxy_set_header Host $host:$serview_port; 

Espero que ajude.

Eu tive esse problema e usando $http_host vez de $host funcionou paira mim, pois também inclui o número da porta.

Eu tentei as soluções acima, mas todas crashram quando o aplicativo do nó emitiu um URL totalmente qualificado no header da localization, como " http://nodeapp.com:8080/new/location "

Então terminei usando o $ http_host paira passair o host e a porta. E usando uma pairtida ~ ^ paira rewrite as URLs inteiramente.

  proxy_pass http://10.0.0.3:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_set_header X-Forwairded-For $proxy_add_x_forwairded_for; proxy_redirect default; proxy_redirect ~^(https?://[^:]+):\d+(?<relpath>/.+)$ http://10.0.0.3:8000$relpath; 

No nosso caso, o server Node está sendo executado no 8080 e nosso proxy nginx está sendo executado em 8000. Isso significa que cada URL totalmente qualificado em um header de localization precisa ser reescrito. Espero que isso ajude alguém !!