Le proxy (nginx) affiche une erreur de passerelle incorrecte

18

J'ai un service (registre docker) qui s'exécute port 5000, j'ai installé nginx pour rediriger la requête http de 8080vers 5000. Si j'effectue une boucle, localhost:5000cela fonctionne, mais lorsque j'effectue une boucle, localhost:8080j'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.logj'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?

hellb0y77
la source
Dans mon cas, mon service que je mandatais est mort (et je ne m'en suis pas rendu compte) au milieu de mon utilisation. Une seconde, j'y ai accédé, la seconde suivante j'ai eu une mauvaise passerelle. J'ai dû redémarrer le service.
Michael Plautz

Réponses:

57

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.

Garenne
la source
Selinux est désactivé, également le service firewalld
hellb0y77
2
Vous venez de résoudre mon problème, même si vous n'avez pas résolu le problème de hellb0y77. SE_LINUX frappe à nouveau!
Wesley Burr
1
Cela a fonctionné pour moi aussi. Quelqu'un at-il d'autres informations sur ce qu'il fait réellement? Je déteste ne pas savoir!
martinedwards
A voté et travaillé sur centOs 7, puis-je demander quels problèmes de sécurité cela peut ouvrir. J'exécute généralement un ensemble de règles iptables qui autorisent le trafic local. Vous vous demandez ce que cela entraîne.
edencorbin
1
@edencorbin permet aux modules httpd de se connecter au réseau.
Warren
5

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:

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

ou probablement:

proxy_pass http://docker-registry$request_uri;

Je ne sais pas lequel est le plus correct.

Une autre chose à considérer. Votre configuration indique:

server_name registry.mydomain.com;

Ainsi, localhost: 8080 peut ne pas correspondre. Pour les tests, vous pouvez changer cela en:

server_name registry.mydomain.com localhost;

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.

Gregor
la source
Ne fonctionne pas, défini 127.0.0.1:5000et j'ai essayé avec seulement server_name localhostet server_name registry.mydomain.com(en essayant à partir d'un autre serveur dans le même lan avec le nom d'hôte registry.mydomain.comdans / etc / hosts), et les deux, mais rien ... même erreur
hellb0y77
Whit [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"
Registry.mydomain.com