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.html
napastastatic
.
Euconfigureimeunginx
daseguinteforma:
/etc/nginx/nginx.conf
comoseguinteconteú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.