2017-10-12 2 views
0

Ich habe einen Reverse-Proxy auf meinem Server mit Nginx innerhalb Docker eingerichtet, und seitdem alle Anfragen auf https umleiten, obwohl ich nicht alle Standorte auf https Umleitung gesetzt.verhindern Umleiten zu HTTPS und URI Hacks Nginx Reverse-Proxy

Grundsätzlich möchte ich in der Lage sein, sowohl https als auch http mit dem Reverseproxy zu bedienen. Zusätzlich möchte ich dynamisch auf verschiedene URI umleiten können, zum Beispiel möchte ich alle Routen von/bla2/foo/bar so einstellen, dass sie nur zu dem weitergeleitet werden, was danach kommt/bla2 Zugriff auf sie example.com/bla2/foo/bar sollte es ohne die bla2 Abschnitt example.com/foo/bar umleiten ...

  1. Ist es möglich, auf der gleichen Konfigurationsdatei?
  2. was mein Server alle Anfragen umleiten kann dazu führen,

Das ist mein Server 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; 
     } 
} 

ich direkt von http://example.com:3004 Inhalt erhalten können, wollen https wenn Ich lege es in den Browser ohne Umleitung auf https. Nur wenn ich versuche, Zugang example.com/bla2 Ich möchte es https anstelle von http, und auf andere Pfad umgeleitet werden.

+0

Was ist das Problem gerade? Auch was läuft auf 3004? KnotenJS? –

+0

Ich habe 2 verschiedene Probleme, eine ist die alle HTTP umgeleitet auf http egal, wenn ich auf eine App verweisen, und die andere das Routing-Problem, wie ich oben erwähnt. Ich habe gerade den Inhalt editiert, ich hoffe, es ist jetzt klarer. Ja, die Apps sind Knoten js apps – user4860092

+1

Wenn Sie direkt im Browser "http: //example.com: 3004 /" zugreifen und das zu https umleitet, dann könnte es nur sein, weil Ihre App diese Umleitung sendet. Stellen Sie außerdem sicher, dass Sie den Browser-Cache leeren –

Antwort

1

Sie müssen für diese

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

Eine andere Art und Weise zu tun, es wäre nur für reguläre Ausdrücke und Capture-Gruppen verwenden, wird

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

umschreiben verwenden Wenn Sie transparent Proxy wollen es die example.com:3004 Entfernen /bla2 dann sollten Sie verwenden

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

Die Schrägstrich / in /bla2/ und http://example.com:3004/ ist sehr wichtig hier

+0

Wenn es Ihnen nichts ausmacht, eine dritte Option hinzuzufügen, ohne die Umleitung zu verwenden, kann ich die Antwort akzeptieren, da ich schließlich eine Option ausgewählt habe, die keine Umleitung verwendet. Ich denke, Sie wissen, was ich meine – user4860092

+0

@ user4860092 Jetzt prüfen –

Verwandte Themen