Nginx serve arquivos estáticos para o aplicativo de balão 404

1

Já experimentei várias soluções de outras postagens, mas nada parece funcionar para mim. Sempre recebo um erro 404 ao tentar permitir que nginx exibam arquivos estáticos do meu aplicativo flask . Em algum lugar entre todas essas tentativas de execução, também tive um 403 , mas não consigo reconstruí-lo. Esta é a minha configuração atual:

O aplicativo está em: ~/development/Python/flask_nginx_gunicorn/ , que deve ser um projeto de teste para fazer tudo funcionar, entender o nginx e assim por diante. Tem a seguinte estrutura:

Portanto,nãohánadaalémdeumarquivochamadoapp.py,queconfiguraalgumasrotaseumindex.htmlnapastastatic.

Euconfigureimeunginxdaseguinteforma:

/etc/nginx/nginx.confcomoseguinteconteúdo:

usernginx;worker_processesauto;error_log/var/log/nginx/error.logwarn;pid/run/nginx.pid;events{worker_connections1024;}http{include/etc/nginx/mime.types;default_typeapplication/octet-stream;log_formatmain'$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;

    keepalive_timeout  65;

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

No final, há uma inclusão para o diretório sites-enabled sub. Nesse diretório eu tenho um arquivo chamado flask_project . Nesse arquivo eu tenho a seguinte configuração para o meu projeto:

server {

    root /home/xiaolong/development/Python/flask_nginx_gunicorn/;

    server_name localhost;

    # LISTENING ON WHICH PORTS?
    listen localhost:7777;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location /static/ {
        autoindex on;
        root /home/xiaolong/development/Python/flask_nginx_gunicorn/;
    }
}

Eu iniciei nginx usando o comando systemctl start nginx . Quando ele está em execução e eu faço um ps -aux | grep nginx , recebo a seguinte saída:

root     17748  1.2  2.5 1607328 102772 pts/1  Sl   20:45   0:07 /usr/local/sublime_text_3/sublime_text /etc/nginx/nginx.conf
root     18762  0.0  0.0 122720  2880 ?        Ss   20:53   0:00 nginx: master process /usr/sbin/nginx
nginx    18763  0.0  0.1 124808  7916 ?        S    20:53   0:00 nginx: worker process
nginx    18764  0.0  0.1 124808  7916 ?        S    20:53   0:00 nginx: worker process
nginx    18765  0.0  0.1 124808  7916 ?        S    20:53   0:00 nginx: worker process
nginx    18766  0.0  0.1 124808  7916 ?        S    20:53   0:00 nginx: worker process
root     18988  0.0  0.0 111032  1792 pts/0    S+   20:54   0:00 tail -f 10 /var/log/nginx/error.log
root     19001  0.0  0.0 115820  2396 pts/1    S+   20:55   0:00 grep --color=auto nginx

Então eu sei que está funcionando. Eu usei para obter um erro no log, dizendo-me nginx não pôde ligar a uma porta específica, que foi causada por SELinux , permitindo apenas certas portas para ele ligar. Eu consertei isso usando o comando semanage port --add --type http_port_t --proto tcp 7777 .

Após cada alteração, sempre corri systemctl restart nginx para reiniciar o servidor nginx , para que ele possa recarregar sua configuração.

Eu uso gunicorn app:app -b localhost:8080 para executar meu aplicativo de balão.

Quando abro o URL http://localhost:8080/static/ no navegador, obtenho um 404 e o log que eu leio usando tail -f 10 /var/log/nginx/error.log indica que não há novos erros. O aplicativo de balão está em execução, o que posso verificar indo para: http://localhost:8080/ e http://localhost:8080/data , que funcionam bem. No entanto, uma vez que haja conteúdo estático do diretório estático, recebo o 404 .

Meus palpites são os seguintes:

  1. De alguma forma, nginx não está sendo negociado e não sabe sobre a solicitação para o conteúdo da pasta estática.
  2. De alguma forma, os caminhos ainda não estão corretos.
  3. Há algum outro problema que impede a obtenção do arquivo para o navegador e faz com que ele não registre isso.

Eu tentei colocá-lo em funcionamento por dois dias agora, mas nenhuma das configurações que encontrei funcionou para mim. Eu também tentei os dois comandos a seguir, que foram sugeridos em outros lugares:

  1. Alterar contexto de segurança de um diretório de forma recursiva:

    chcon -Rt httpd_sys_content_t /home/xiaolong/development/Python/flask_nginx_gunicorn/

  2. Permite que o daemon http se conecte usando a rede (???)

    setsebool -P httpd_can_network_connect 1

O que há de errado com minha configuração?

Informações adicionais

No meu diretório /etc/nginx/ , tenho a seguinte estrutura:

  • um nginx.conf arquivo
  • sub diretório sites-available contendo apenas a configuração do meu aplicativo de balão
  • sub diretório sites-enabled contendo um link para o meu arquivo de configuração para o aplicativo de frasco em sites-available

Estou executando um Fedora 22 aqui.

    
por Zelphir 04.04.2016 / 21:05

1 resposta

1

Já faz mais de um ano, então tenho certeza de que você já resolveu isso, mas caso alguém veja isso:

O Nginx está ouvindo em localhost:7777 , mas sua URL está levando você para a porta 8080, onde seu servidor gunicorn mora. É por isso que você pode acessar seu aplicativo Flask (servido por gunicorn), mas não seu conteúdo estático (servido por ngninx). É também por isso que você não está recebendo nada em seus registros nginx. Se você for para http://localhost:7777/ , o nginx deverá passar sua solicitação para seu aplicativo do Flask e http://localhost:7777/static/ o levará para o conteúdo estático.

    
por 03.08.2017 / 19:47