我看到其他帖子说文件权限或缺少索引指令是原因。但是,我的 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 运行,并且该用户是目录的所有者。
答案1
所以显然我并不完全了解try_files是如何工作的。
读完之后,我发现它找不到任何非“/”请求的匹配项,但它确实与“/”匹配并尝试列出目录。一旦我将 error_page 403 = @cc 添加到根位置块中,它就会正确重定向到我的 cc 位置并显示主页。