it-swarm.com.de

Proxy (nginx) zeigt einen fehlerhaften Gateway-Fehler an

Ich habe einen Dienst (Docker-Registrierung), der auf port 5000 Ausgeführt wird. Ich habe nginx installiert, um die http-Anfrage von 8080 Nach 5000 Umzuleiten. Wenn ich eine Locke zu localhost:5000 Mache, funktioniert es, aber wenn ich eine Locke zu localhost:8080 Mache, erhalte ich einen Bad Gateway Fehler.

nginx-Konfigurationsdatei:

upstream docker-registry {
 server localhost:5000;
}

server {
 listen 8080;
 server_name registry.mydomain.com;

 proxy_set_header Host       $http_Host; 
 proxy_set_header X-Real-IP  $remote_addr; 
 client_max_body_size 0; 
 chunked_transfer_encoding on;

 location / {

     proxy_pass http://docker-registry;
 }
 location /_ping {
     auth_basic off;
     proxy_pass http://docker-registry;
 }
 location /v1/_ping {
     auth_basic off;
     proxy_pass http://docker-registry;
 }

}

In /var/log/nginx/error.log Habe ich:

[crit] 15595#0: *1 connect() to [::1]:5000 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: registry.mydomain.com, request: "GET / HTTP/1.1", upstream: "http://[::1]:5000/", Host: "localhost:8080"

Irgendeine Idee?

18
hellb0y77

Ich gehe davon aus, dass es sich um eine Linux-Box handelt, daher verhindert SELinux höchstwahrscheinlich die Verbindung, da es keine Richtlinie gibt, die die Verbindung zulässt.

Sie sollten in der Lage sein, einfach zu rennen

# setsebool -P httpd_can_network_connect true

und starten Sie dann nginx neu.

58
Warren

Aufgrund der Fehlermeldung frage ich mich, ob localhost: 5000 als IPv6-Adresse aufgelöst wird, was Sie möglicherweise nicht möchten. Sie können versuchen, dies in 127.0.0.1:5000 zu ändern

EDIT : In Ihrer proxy_pass-Zeile fehlt möglicherweise ein Teil der URL? Versuchen Sie, $ request_uri hinzuzufügen, damit Folgendes möglich ist:

proxy_pass http://docker-registry/$request_uri;

oder wahrscheinlich:

proxy_pass http://docker-registry$request_uri;

Ich bin mir nicht sicher, welches am richtigsten ist.

Eine andere Sache zu beachten. Ihre Konfiguration zeigt an:

server_name registry.mydomain.com;

Daher ist localhost: 8080 möglicherweise nicht übereinstimmend. Zum Testen können Sie dies ändern in:

server_name registry.mydomain.com localhost;

Dann würde der localhost: 8080 sowie Ihre Domain übereinstimmen. Ich gehe davon aus, dass registry.mydomain.com nur ein Beispiel ist und Sie dort Ihren echten Server-FQDN einfügen würden.

5
Gregor