Proxy (nginx) mostra um erro de gateway inválido

16

Eu tenho um serviço (registro docker) que é executado em port 5000 , instalei o nginx para redirecionar a solicitação http de 8080 para 5000 . Se eu fizer uma ondulação para localhost:5000 , funciona, mas quando faço uma ondulação para localhost:8080 , recebo um erro Gateway ruim .

arquivo de configuração do 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.log 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"

Alguma ideia?

    
por hellb0y77 17.04.2015 / 18:21

2 respostas

46

Eu assumo que é uma caixa Linux, então provavelmente o SELinux está impedindo a conexão, já que não há política que permita a conexão.

Você deve ser capaz de executar apenas

# setsebool -P httpd_can_network_connect true

e reinicie o nginx.

    
por 27.04.2015 / 02:50
3

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

EDIT: Na sua linha proxy_pass, é possível que você não tenha uma parte do URL? Tente adicionar $ request_uri para que ele possa ser:

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

ou provavelmente:

proxy_pass http://docker-registry$request_uri;

Não sei qual é o mais correto.

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

server_name registry.mydomain.com;

Portanto, localhost: 8080 pode não ser correspondido. Para testes, você pode alterar isso para:

server_name registry.mydomain.com localhost;

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

    
por 18.04.2015 / 06:16