J'ai un service (registre docker) qui s'exécute port 5000
, j'ai installé nginx pour rediriger la requête http de 8080
vers 5000
. Si j'effectue une boucle, localhost:5000
cela fonctionne, mais lorsque j'effectue une boucle, localhost:8080
j'obtiens une erreur de passerelle incorrecte.
fichier de configuration nginx:
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;
}
}
En /var/log/nginx/error.log
j'ai:
[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"
Une idée?
Réponses:
Je suppose que c'est une boîte Linux, donc très probablement SELinux empêche la connexion car il n'y a pas de politique permettant la connexion.
Vous devriez pouvoir simplement exécuter
# setsebool -P httpd_can_network_connect true
puis redémarrez nginx.
la source
Sur la base du message d'erreur, je me demande si localhost: 5000 est résolu en tant qu'adresse ipv6, ce que vous ne voudrez peut-être pas. Vous pouvez essayer de changer cela en 127.0.0.1:5000
EDIT: Dans votre ligne proxy_pass, il est possible qu'il vous manque une partie de l'URL? Essayez d'ajouter $ request_uri pour qu'il soit:
ou probablement:
Je ne sais pas lequel est le plus correct.
Une autre chose à considérer. Votre configuration indique:
Ainsi, localhost: 8080 peut ne pas correspondre. Pour les tests, vous pouvez changer cela en:
Ensuite, l'hôte local: 8080 serait mis en correspondance, ainsi que votre domaine. Je suppose que registry.mydomain.com n'est qu'un exemple et vous mettriez votre vrai FQDN de serveur là-dedans.
la source
127.0.0.1:5000
et j'ai essayé avec seulementserver_name localhost
etserver_name registry.mydomain.com
(en essayant à partir d'un autre serveur dans le même lan avec le nom d'hôteregistry.mydomain.com
dans / etc / hosts), et les deux, mais rien ... même erreur[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"
[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"