2016-10-12 10 views
1

ich ein Reverse nginx Proxy, wo ich alle Anfragen zu routen möchten, kommen mit:reroute nginx Anfrage url

http://dns.com/content/xyz <—to—> http://dns.com/content/1.0/xyz

Ich habe einen Upstream:

upstream backend_api.content.com { 
     server localhost:8080 max_fails=5 fail_timeout=30; 
     keepalive 100; 
    } 

und -ort:

#Content Service 
location ~* ^/content/?(.*) { 
    set $proxy_pass "http://backend_api.content.com"; 
    rewrite ^/content/1.0(/.*)$ /content/1.0$1 break; 
    proxy_pass $proxy_pass 
    proxy_http_version 1.1; 
    proxy_set_header Connection ""; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header Host "api.stg.xxx.com"; 
    proxy_set_header X-3scale-proxy-secret-token $secret_token; 
    proxy_set_header Original-Host $http_host; 
    proxy_set_header Authorization $outbound_auth_header; 
    proxy_set_header Original-Uri $scheme://$http_host$uri; 
    post_action /out_of_band_oauth_authrep_action; 
    } 

aber es scheint wie alles mit http://dns/content/xyz fa ils und nur wenn ich http://dns/content/1.0/xyz gebe funktioniert es.

Antwort

1

Sie scheinen Teil der URI auf der location ~* ^/content/?(.*) Aussage zu erfassen, aber nichts damit zu tun.

Sie haben auch eine rewrite ^/content/1.0(/.*)$ /content/1.0$1 break; Anweisung, die nichts tut, schreibt es einfach die gleiche URI zurück.

könnte eine schnelle und schmutzige Lösung wie diese zu verwenden, um zwei rewrite Aussagen sein:

rewrite ^/content/1.0(/.*)$ /content/1.0$1 break; 
rewrite ^/content(/.*)$ /content/1.0$1 break; 

Was bedeutet, dass alles, was nicht das erste (Nicht-) Umschreiben durch die zweite verarbeitet werden übereinstimmt, und erhält a /1.0 eingefügt.

Ich persönlich mag es nicht, und lieber zwei Standort Blöcke verwenden würde:

location /content/1.0 { 
    set $proxy_pass "http://backend_api.content.com"; 
    proxy_pass $proxy_pass; 
    proxy_http_version 1.1; 
    proxy_set_header ... 
    ... 
} 
location /content { 
    rewrite ^/content(/.*)$ /content/1.0$1 last; 
} 

Aber überprüfen Sie die Auswertungsreihenfolge Ihrer anderen location Blöcke. Beachten Sie, dass Präfix-Standortblöcke und Registerblöcke für reguläre Ausdrücke unterschiedliche Bewertungsregeln haben. Details finden Sie unter this document.