O proxy Nginx passa para o localhost Gunicorn retorna 50x erro inesperadamente

1

Eu tenho uma configuração muito básica com o nginx instalado com um aplicativo django sendo executado em um servidor gunicorn. O gunicorn conf é simples e abaixo:

exec gunicorn myapp.wsgi:application \
    --workers 5
    --reload

Configurei o servidor nginx para proxy_pass em todo o tráfego de entrada no servidor padrão para 127.0.0.1:8000. No entanto, quando vou para o endereço IP do servidor, vejo a tela nginx 404 padrão. Então estou assumindo que o tráfego foi passado pelo proxy do servidor nginx mas de alguma forma não foi roteado corretamente e nenhuma resposta foi dada, o que força o nginx a retornar um erro 404. O que exatamente estou fazendo errado na configuração gunicorn ou nginx aqui? Para referência, abaixo está também o meu arquivo completo nginx.conf:

user nginx; worker_processes auto; 

error_log /var/log/nginx/error.log; 
pid /run/nginx.pid;

    # Load dynamic modules. See /usr/share/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf;

    events {
        worker_connections 1024; }

    http {
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';

        access_log  /var/log/nginx/access.log  main;

        sendfile            on;
        tcp_nopush          on;
        tcp_nodelay         on;
        keepalive_timeout   65;
        types_hash_max_size 2048;

        include             /etc/nginx/mime.types;
        default_type        application/octet-stream;

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
        include /etc/nginx/sites-available/*

    upstream app_server {
        server 127.0.0.1:8000 fail_timeout=0;
}

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        proxy_pass http://127.0.0.1:8000;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }

    }

EDIT: Depois de olhar mais de perto a mensagem de erro nesta configuração, eu percebo que não é um 404 e é realmente um 50x então algo definitivamente deve estar errado na forma como os dois serviços estão se comunicando uns com os outros. Ir para o endpoint de gunicorn sozinho produz o aplicativo django sem problemas. Como vai para a tela padrão do nginx antes de adicionar o parâmetro proxy_pass. Qualquer ajuda, o que exatamente estou perdendo. Obrigado

    
por EazyC 29.06.2017 / 01:53

1 resposta

1

Resolvi meu próprio problema. Basicamente, para soluções baseadas no fedora executando o nginx você deve abrir o acesso a conexões upstream para todos os usuários que não são root. Você pode fazer isso com este comando

setsebool -P httpd_can_network_connect 1

Obviamente, execute acima como root. Mais informações podem ser encontradas sobre essa outra pergunta: link

    
por 29.06.2017 / 10:32