2017-09-11 1 views
0

Je configure une pile web/app/db et la configuration du proxy nginx ne fonctionne pas comme je le souhaitais.Les redirections proxy nginx utilisent le numéro de port du proxy, pas l'hôte

alors voici un exemple de la pile ... l'URL de l'application est: https://testapp.com

ici est la config nginx:

server { 
    listen  8886; 
    server_name _; 
    root   /usr/share/nginx/html; 
    include /etc/nginx/default.d/*.conf; 

    #ELB 
    if ($http_user_agent = 'ELB-HealthChecker/2.0') { 
    return 200 working; 
    } 

    #HTTP to HTTPS 
    if ($http_x_forwarded_proto != 'https') { 
     return 301 https://$host$request_uri; 
    } 
    location/{ 
     set $proxy_upstream_name "testapp.com"; 
     port_in_redirect off; 
     proxy_pass   http://internal-alb.amazonaws.com:8083/; 
     proxy_redirect  off; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Host $server_name; 
     proxy_set_header Access-Control-Allow-Origin $http_origin;} 

L'application est approximée à un interne AWS alb , et il le transmet à un serveur d'application unique (à ce stade).

Je suis en mesure d'obtenir le site à servir. Toutefois, l'application crée une redirection lors de la connexion et j'obtiens la réponse suivante.

Request URL:https://testapp.com/login 
Request Method:POST 
Status Code:302 
Remote Address:34.192.444.29:443 
Referrer Policy:no-referrer-when-downgrade 
Response Headers 
content-language:en-US 
content-length:0 
date:Mon, 11 Sep 2017 18:35:34 GMT 
location:http://testapp.com:8083/testCode 
server:openresty/1.11.2.5 
status:302 

La redirection échoue parce qu'il est servi sur 443, et non 8083.

Pour une raison quelconque l'application ou le proxy est pas mis à jour le port comme il le faire est chose proxy inverse, de sorte que la redirection a le port mandaté PAS le port d'application réel 443.

Que dois-je faire avec nginx config pour qu'il redirige correctement.

merci. myles.

+0

Ceci est un appel AJAX ou un appel de poste normal? –

+0

Essayez d'ajouter 'proxy_redirect http://internal-alb.amazonaws.com:8083/ https: //testapp.com;' –

Répondre

0

Le comportement normal de nginx est de réécrire l'adresse amont à l'adresse à partir de laquelle la page a été servie. Il semble que, au lieu d'utiliser votre adresse en amont (http://internal-alb.amazonaws.com:8083/), votre application répond en utilisant un mélange des deux (http://testapp.com:8083). Vous pouvez soit changer le comportement de l'application, soit, pour le corriger au niveau nginx, utiliser le proxy_redirect directive.

Je suis raisonnablement sûr que la directive pour résoudre ce problème est proxy_redirect http://testapp.com:8083/ https://testapp.com/;