2017-10-12 15 views
0

J'ai installé un proxy inverse sur mon serveur avec nginx inside docker, et depuis lors toutes les demandes redirigent vers https même si je n'ai pas défini tous les emplacements à la redirection https.empêcher la redirection vers https et URI hacks proxy inverse nginx

Fondamentalement ce que je veux est de pouvoir servir à la fois https et http avec le proxy inverse. En outre, je veux être en mesure de rediriger vers différents URI dynamiquement, par exemple je veux définir toutes les routes de/bla2/foo/bar pour être redirigé vers ce qui vient après/bla2 ce que j'ai essayé d'obtenir ici est que chaque fois l'accès à example.com/bla2/foo/bar il devrait rediriger vers example.com/foo/bar~~V~~singular~~3rd sans la section BLA2 ...

  1. Est-il possible sur le même fichier de configuration?
  2. ce qui peut provoquer mon serveur pour rediriger toutes les requêtes en https

Ceci est mon serveur nginx.conf

server { 
     listen 443; 
     ssl on; 
     ssl_certificate /etc/ssl/example.com.crt; 
     ssl_certificate_key /etc/ssl/example.com.key; 


     listen  80; 
     server_name example.com; 

     location /bla/bla { 
       proxy_pass http://example.com:3980/foo/bar1; 
     } 

     **location /bla2/**{ 
       # proxy_pass http://example.com:3004; 
       return 301 http://example.com:3004$request_uri; 

       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; 
       proxy_set_header X-NginX-Proxy true; 
       proxy_redirect off; 
       proxy_http_version 1.1; 
       proxy_set_header Upgrade $http_upgrade; 
       proxy_set_header Connection "upgrade"; 

       proxy_set_header X-Forwarded-Proto $scheme; 
     } 

     location /app3 { 
       rewrite ^/app3(.*) /$1 break; 
       proxy_pass http://example.com:1236/app3; 
     } 
} 

Je veux être en mesure d'obtenir directement le contenu de http://example.com:3004 si Je l'ai mis dans le navigateur sans aucune redirection vers https. Seulement si j'essaie d'accéder example.com/bla2 je veux qu'il soit requis https au lieu de http, et d'être redirigé vers un chemin différent.

+0

Quel est le problème en ce moment? Aussi ce qui fonctionne sur 3004? NodeJS? –

+0

J'ai 2 questions différentes, l'un est le http redirigé vers http, peu importe si je désigne une application, et l'autre le problème de routage comme je l'ai mentionné ci-dessus. Je viens d'éditer le contenu, j'espère que c'est plus clair maintenant. Oui, les applications sont node js apps – user4860092

+1

Si vous accédez directement dans le navigateur 'http: //example.com: 3004 /' et que vous redirigez vers https, il se peut que ce soit uniquement parce que votre application envoie cette redirection. Assurez-vous également d'effacer le cache du navigateur. –

Répondre

1

Vous devez utiliser des expressions régulières et des groupes de capture pour cette

location ~* /bla2/(.*) { 
    return 301 http://example.com:3004$1$is_args$args; 
} 

Une autre façon de le faire serait tout simplement utiliser réécrire

rewrite ^/bla2/(.*)$ http://example.com:3004/$1 redirect; 

Si vous voulez en toute transparence proxy à l'example.com:3004 suppression /bla2 alors vous devez utiliser

location /bla2/ { 
    proxy_pass http://example.com:3004/; 
} 

Le barre oblique / en /bla2/ et http://example.com:3004/ est très important ici

+0

si cela ne vous dérange pas d'ajouter une troisième option sans utiliser la redirection, donc je peux accepter la réponse, car finalement j'ai choisi une option qui n'utilise pas la redirection, je pense que vous savez ce que je veux dire – user4860092

+0

@ user4860092, vérifie maintenant –