Ich habe einen Dienst (Docker-Registrierung), der ausgeführt port 5000
wird. Ich habe nginx installiert, um die http-Anforderung von 8080
nach umzuleiten 5000
. Wenn ich eine Locke mache, localhost:5000
funktioniert es, aber wenn ich eine Locke mache, localhost:8080
bekomme 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
ich habe:
[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?
Antworten:
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.
Du solltest einfach laufen können
# setsebool -P httpd_can_network_connect true
und starten Sie dann nginx neu.
quelle
Anhand der Fehlermeldung frage ich mich, ob localhost: 5000 als IPv6-Adresse aufgelöst wird, was Sie möglicherweise nicht möchten. Sie könnten versuchen, dies in 127.0.0.1:5000 zu ändern
BEARBEITEN : Ist es möglich, dass in Ihrer proxy_pass-Zeile ein Teil der URL fehlt? Versuchen Sie, $ request_uri hinzuzufügen, damit es so aussieht:
oder wahrscheinlich:
Ich bin mir nicht sicher, welches am richtigsten ist.
Noch etwas zu beachten. Ihre Konfiguration zeigt an:
Also, localhost: 8080 kann möglicherweise nicht übereinstimmen. Zum Testen können Sie Folgendes ändern:
Dann würde der localhost: 8080 genauso wie Ihre Domain passen. Ich nehme an, registry.mydomain.com ist nur ein Beispiel und Sie würden dort Ihren echten Server-FQDN eintragen.
quelle
127.0.0.1:5000
und ich habe versucht, nur mitserver_name localhost
undserver_name registry.mydomain.com
(versuchen von einem anderen Server im gleichen LAN mit Hostnamenregistry.mydomain.com
in / etc / hosts), und beides, aber nichts ... der gleiche Fehler[crit] 16839#0: *5 connect() to 127.0.0.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://127.0.0.1:5000/", host: "localhost:8080"
, mit localhost:[crit] 16839#0: *5 connect() to 127.0.0.1:5000 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:5000/", host: "localhost:8080"