2017-06-11 6 views
0

Ich möchte bestimmte Subdomains meiner Domain an mein Backend als Präfixe der URL umleiten, die an das Backend übergeben wird. Dies liegt daran, dass ich einen einzelnen Server habe und aufgrund der erhöhten Komplexität nicht die mehreren Domänen im Backend behandeln muss.NGINX Subdomains als URL in einen proxy_pass umschreiben

Wenn also ich habe:

  • sub1.domain.com =>domain.com/sub1/
  • sub1.domain.com/pathname =>domain.com/sub1/pathname
  • sub1.domain.com/pathname?searchquery =>domain.com/pathname?searchquery

und so weiter.

Bisher, was ich mit kommen haben, ist die folgende:

server { 
    charset utf8; 
    listen 80; 
    server_name 
    domain.com, 
    sub1.domain.com, 
    sub2.domain.com, 
    sub3.domain.com, 
    sub4.domain.com, 
    sub5.domain.com; 

    # Default 
    if ($host ~ ^domain\.com) { 
    set $proxy_uri $request_uri; 
    } 
    # Rewrites 
    if ($host ~ (.*)\.domain\.com) { 
    set $proxy_uri $1$request_uri; 
    } 

    location/{ 
    expires 1s; 
    proxy_pass http://node:8080$proxy_uri; #node is an internally listed host (docker container) 
    proxy_set_header Host domain.com; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_cache_valid 200 1s; 
    } 
} 

Aber leider alles, was ich bekommen, ist eine 502: Bad Gateway mit dem folgenden Protokoll, 2017/06/11 12:49:18 [error] 6#6: *2 no resolver defined to resolve node, client: 136.0.0.110, server: domain.com:8888,, request: "GET /favicon.ico HTTP/1.1", host: "sub1.domain.com:8888", referrer: "http://sub1.domain.com:8888/" Irgendeine Idee, wie ich mein Ziel erreichen kann? Jede Hilfe würde sehr geschätzt werden :)

Prost!

Antwort

0

Es scheint, ich war nicht so weit von der Antwort - Hinzufügen eines Upstream-Block, bevor der Server-Block war ausreichend, um die Konfiguration auf den gewünschten Effekt abzuschließen.

upstream backend { 
    server node:8080; 
    keepalive 8; 
} 

Ich hatte auch die Proxy-Pass-Linie auf die folgende leicht ändern:

muss
proxy_pass http://backend$proxy_uri; 

Das Problem wahrscheinlich haben gewesen zu erzählt, wie NGINX die Proxy-Pass Urls parst - wenn jemand dies lesen kann geben Sie einen Einblick in den Grund, bitte bearbeiten Sie diese Antwort!

Verwandte Themen