Eu vi outras postagens dizendo que as permissões de arquivo ou a falta de uma diretiva de índice são a causa. No entanto, meu aplicativo Flask não possui nenhum arquivo de índice e a maior parte do site funciona perfeitamente.
nginx.conf
server {
listen 80;
server_name localhost;
charset utf-8;
client_max_body_size 5M;
root /srv/www/cc/app;
location / {
try_files $uri $uri/ @cc;
}
location /uploads/ {
# root /srv/www/cc/app;
expires max;
}
location /static/ {
# root /srv/www/cc/app;
expires max;
}
location @cc {
include uwsgi_params;
uwsgi_pass unix:/tmp/uwsgi.sock;
}
}
trecho de views.py
@app.route('/', methods = ['GET'])
def client():
return render_template("/client/index.html")
#-----------------CLIENT ABOVE, ADMIN BELOW------------------#
@app.route('/admin/', methods = ['GET'])
@login_required
def admin():
submissions = Campaign.query.all()
return render_template("admin.html",
title = 'Admin',
submissions = submissions)
Basicamente, tenho um único views.py com várias rotas. Todos os que são /admin/ funcionam como um encanto, mas aquele que é apenas /, não.
Como eu disse, eu não tenho um índice. Eu tentei definir a diretiva index em nginx.conf para "app", pois é aí que a mágica acontece... mas sem dados.
Aqui está a minha estrutura de arquivos:
/cc/
app/
__init__.py
views.py
etc
uploads/
static/
config.py
Nos logs do nginx:
índice de diretório de "/srv/www/cc/app/" é proibido
Encontrei problemas semelhantes de outras pessoas online e verifiquei que o nginx é executado com o usuário www-data e que esse uso é o proprietário do diretório.
Então, aparentemente, eu não entendi completamente como try_files funcionava.
Depois de ler sobre ele, ele não encontrou uma correspondência para nenhuma solicitação que não fosse '/', mas estava correspondendo a '/' e tentando listar o diretório. Depois de adicionar error_page 403 = @cc no bloco de localização raiz, ele redireciona corretamente para minha localização cc e exibe a página inicial.