Proxy (nginx) mostra un errore gateway non valido


18

Ho un servizio (registro docker) che funziona port 5000, ho installato nginx per reindirizzare la richiesta http da 8080a 5000. Se faccio un ricciolo localhost:5000, funziona, ma quando faccio un ricciolo localhost:8080ottengo un errore del gateway Bad .

file di configurazione 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;
 }

}

In /var/log/nginx/error.logho:

[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"

Qualche idea?


Nel mio caso, il mio servizio che stavo procurando è morto (e non me ne sono reso conto) mentre lo usavo. Un secondo stavo accedendo ad esso, il secondo successivo ho avuto un gateway difettoso. Ho dovuto riavviare il servizio.
Michael Plautz,

Risposte:


57

Presumo che sia una scatola Linux, quindi molto probabilmente SELinux sta impedendo la connessione in quanto non esiste una politica che consenta la connessione.

Dovresti essere in grado di correre

# setsebool -P httpd_can_network_connect true

e quindi riavviare nginx.


Selinux è disabilitato, anche il servizio firewalld
hellb0y77,

2
Hai appena risolto il mio problema, anche se non hai risolto quello di hellb0y77. SE_LINUX colpisce ancora!
Wesley Burr,

1
Questo ha funzionato anche per me. Qualcuno ha ulteriori informazioni su ciò che sta effettivamente facendo? Odio non sapere!
martinedwards,

Eseguito l'upgrade e il funzionamento di centOs 7, posso chiedere quali problemi di sicurezza potrebbero aprire. In genere eseguo una serie di regole iptables che consentono il traffico locale. Mi chiedo quali siano questi effetti.
edencorbin,

1
@edencorbin consente ai moduli httpd di connettersi alla rete.
Warren,

5

Sulla base del messaggio di errore, mi chiedo se localhost: 5000 sia stato risolto come indirizzo ipv6, che potresti non voler. Potresti provare a cambiarlo in 127.0.0.1:5000

EDIT: nella tua linea proxy_pass, è possibile che manchi parte dell'URL? Prova ad aggiungere $ request_uri in modo che possa essere:

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

o probabilmente:

proxy_pass http://docker-registry$request_uri;

Non sono sicuro di quale sia il più corretto.

Un'altra cosa da considerare. La tua configurazione indica:

server_name registry.mydomain.com;

Quindi, localhost: 8080 potrebbe non essere abbinato. Per i test, è possibile modificare questo in:

server_name registry.mydomain.com localhost;

Quindi il localhost: 8080 verrebbe abbinato, così come il tuo dominio. Presumo register.mydomain.com è solo un esempio e inseriresti il ​​tuo FQDN del tuo vero server.


Non lavoro, set 127.0.0.1:5000e ho provato solo con server_name localhoste server_name registry.mydomain.com(cercando da un altro server nella stessa LAN con hostname registry.mydomain.comin / etc / hosts), ed entrambi, ma niente ... lo stesso errore
hellb0y77

Whit register.mydomain.com [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", con 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"
hellb0y77,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.