it-swarm.com.de

Docker Nginx Reverse Proxy gibt "502 Bad Gateway" aus

Ich versuche, einen Docker-Container mit nginx als Reverse-Proxy für andere Docker-Container einzusetzen, und ich bekomme "Bad Gateway" an anderen Stellen als dem Basisstandort "/".

Ich habe den folgenden Serverblock:

server {

  listen 80;

  location / {
    proxy_pass "http://game2048:8080";
  }

  location /game {
    proxy_pass "http://game:9999";
  }

}

Es funktioniert für http://localhost, aber nicht für http://localhost/game, was im Browser "Bad Gateway" und dies im Nginx-Container gibt:

[error] 7#7: *6 connect() failed (111: Connection refused) 
while connecting to upstream, client: 172.17.0.1, server: , 
request: "GET /game HTTP/1.1", upstream: "http://172.17.0.4:9999/game", 
Host: "localhost"

Ich verwende das offizielle nginx Docker-Image und lege meine eigene Konfiguration darauf ab. Sie können es testen und hier alle Details anzeigen: https://github.com/jollege/ngprox1

Irgendwelche Ideen, was geht schief?

NB: Ich habe lokale Hostnamen-Einträge auf dem Docker-Host so eingestellt, dass sie diesen Namen entsprechen:

127.0.1.1       game2048
127.0.1.1       game
5
jollege

Ich habe es repariert! Ich habe den Servernamen in verschiedenen Serverblöcken in nginx config eingestellt. Denken Sie daran, den Docker-Port und nicht den Host-Port zu verwenden.

server {

  listen 80;
  server_name game2048;

  location / {
    proxy_pass "http://game2048:8080";
  }

}

server {

  listen 80;
  server_name game;

  location / {
    # Remember to refer to docker port, not Host port
    # which is 9999 in this case:
    proxy_pass "http://game:8080";
  }

}

Das github-Repo wurde aktualisiert, um den Fix wiederzugeben. Die alte Readme-Datei befindet sich unter ./README.old01.md.

Typisch, dass ich die Antwort finde, wenn ich die Frage sorgfältig an andere formuliere. Kennst du dieses Gefühl?

7
jollege

Für mich half diese Codezeile proxy_set_header Host $http_Host;

location / {
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_set_header Host $http_Host;
   proxy_set_header X-NginX-Proxy true;

   proxy_redirect off;
   proxy_pass http://myserver;
}

Ich hatte den gleichen Fehler, aber für eine Webanwendung, die einfach nicht an der in der Konfiguration genannten IP-Adresse und dem Port diente.

Sagen Sie also, Sie haben folgendes:

location /game {
    proxy_pass "http://game:9999";
}

Stellen Sie dann sicher, dass die Webanwendung, die Sie unter http: // game: 9999 erwarten, wirklich in einem Docker-Container namens "game" bereitgestellt wird und der Code so eingestellt ist, dass die App an Port 9999 bereitgestellt wird.