2017-04-13 3 views
1

Ich versuche, eine zweite Marke einer Web-App in die erste Marke zusammenzufallen und 301 Weiterleitungen zu verwenden, um alle anhaltenden Verkehr umzuleiten. Der Server ist in einer Vagrant Box Weiterleitung läuft auf Port 8001. Ich mag würde haben:Nginx behalten Port-Nummer, wenn 301 Umleitung

Statt https://local-dev-url:8001/foo/(anything) 301 bis https://local-dev-url:8001/(anything)

Statt https://local-dev-url:8001/adminfoo/(anything) 301 bis https://local-dev-url:8001/admin/(anything).

Hier ist, was ich habe:

location ~ /foo/?(.*)$ { 
     return 301 $1/; 
    } 

    location ~ /adminfoo/?(.*)$ { 
     return 301 admin/$1/; 
    } 

    location/{ 
     proxy_set_header Host $http_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-Port 443; 
     proxy_set_header Authorization $http_authorization; 
     proxy_set_header X-Scheme $scheme; 
     proxy_pass http://127.0.0.1:5000; 
     proxy_redirect http:// $scheme://; 
    } 

    location /admin/ { 
     alias /hostonly/path/to/admin/stuff/; 
    } 

Doch statt https://local-dev-url:8001/foo/ zu https://local-dev-url:8001/ Umleitung wird 301ing zu https://local-dev-url// statt. (Keine Portnummer, extra Schrägstrich.) Ich habe Antworten gesehen, die die URL der Weiterleitung hart codieren, aber da ich mit vielen anderen Entwicklern arbeite und wir alle eindeutige lokale Entwickler-URLs haben, ist der einzige konsistente Teil der: 8001 Portnummer.

Gibt es eine Möglichkeit, den 301 wie gewünscht zu konfigurieren?

+0

Welchen Port hört dieser Server auf? Schicken Sie 8001 bis 80? –

+0

@RichardSmith Port 443, nicht 80. –

Antwort

2

Wenn nginx nicht auf Port 8001 hört, kann es nicht wissen, welchen Port in der Umleitung zu verwenden ist. Sie müssen es explizit angeben:

location ~ /foo(.*)$ { 
    return 301 $scheme://$http_host$1; 
} 
location ~ /adminfoo(.*)$ { 
    return 301 $scheme://$http_host/admin$1; 
} 

Die $http_host Variablen bestehen aus dem Hostnamen und Port von der ursprünglichen Anfrage. Einzelheiten finden Sie unter this document.