Proxy (nginx) mostra um erro de gateway incorreto

18

Eu tenho um serviço (registro do docker) que é executado port 5000, instalei o nginx para redirecionar a solicitação http de 8080para 5000. Se eu fizer uma curvatura, localhost:5000ele funciona, mas quando faço uma curvatura localhost:8080, recebo um erro de gateway inválido .

arquivo de configuração 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;
 }

}

Em /var/log/nginx/error.logeu tenho:

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

Qualquer ideia?

hellb0y77
fonte
No meu caso, meu serviço que eu estava executando proxy morreu (e eu não percebi) no meio de mim usando-o. Um segundo eu estava acessando, no segundo seguinte eu tive um gateway ruim. Eu tive que reiniciar o serviço.
Michael Plautz

Respostas:

57

Presumo que seja uma caixa do Linux, então provavelmente o SELinux está impedindo a conexão, pois não há política que permita a conexão.

Você deve ser capaz de executar

# setsebool -P httpd_can_network_connect true

e, em seguida, reinicie o nginx.

Warren
fonte
SELinux está desativado, também a firewalld serviço
hellb0y77
2
Você acabou de corrigir o meu problema, mesmo que você não tenha corrigido o hellb0y77. SE_LINUX ataca novamente!
Wesley Burr
11
Isso funcionou para mim também. Alguém tem mais informações sobre o que está realmente fazendo? Eu odeio não saber!
martinedwards
Promovido e trabalhou no centOs 7, posso perguntar quais problemas de segurança isso pode abrir. Geralmente, executo um conjunto de regras do iptables que permitem o tráfego local. Imaginando o que isso afeta.
Edencorbin
11
@edencorbin, permite que os módulos httpd possam se conectar à rede.
Warren
5

Com base na mensagem de erro, me faz pensar se localhost: 5000 está sendo resolvido como um endereço IPv6, o que você pode não querer. Você pode tentar mudar isso para 127.0.0.1:5000

EDIT: Na sua linha proxy_pass, é possível que você esteja perdendo parte do URL? Tente adicionar $ request_uri para que possa ser:

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

ou provavelmente:

proxy_pass http://docker-registry$request_uri;

Não tenho certeza qual é o mais correto.

Outra coisa a considerar. Sua configuração indica:

server_name registry.mydomain.com;

Portanto, localhost: 8080 pode não corresponder. Para testar, você pode alterar isso para:

server_name registry.mydomain.com localhost;

Em seguida, o localhost: 8080 seria correspondido, bem como o seu domínio. Presumo que registry.mydomain.com é apenas um exemplo e você colocaria o FQDN do servidor real lá.

Gregor
fonte
Não trabalho, set 127.0.0.1:5000e eu tentei com apenas server_name localhoste server_name registry.mydomain.com(tentar de outro servidor na mesma lan com hostname registry.mydomain.comem / etc / hosts), e ambos, mas nada ... mesmo erro
hellb0y77
Whit registration.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", com 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