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:
- 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.
- De alguma forma, os caminhos ainda não estão corretos.
- 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:
-
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/
-
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.