我看过其他帖子说文件权限或缺少索引指令是原因。但是,我的 Flask 应用程序根本没有索引文件,而且大多数网站的工作方式都像一个魅力。
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;
}
}
来自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)
所以我基本上只有一个views.py,里面有很多路线。所有的 /admin/ 都像魅力一样工作,但只是 / 的却没有。
正如我所说,我没有索引。我尝试将 nginx.conf 中的 index 指令设置为“app”,因为这就是魔法发生的地方……但没有骰子。
这是我的文件结构:
/cc/
app/
__init__.py
views.py
etc
uploads/
static/
config.py
从 nginx 日志:
“/srv/www/cc/app/”的目录索引被禁止
我在网上从其他人那里发现了类似的问题,并且我已经验证了 nginx 使用用户 www-data 运行,并且这个使用是目录的所有者。
所以显然我没有完全理解 try_files 是如何工作的。
在阅读它之后,它没有找到任何不是“/”但它与“/”匹配的请求的匹配项,并试图列出目录。一旦我将 error_page 403 = @cc 添加到根位置块中,它就会正确重定向到我的 cc 位置并显示主页。