Flask 应用程序的根位置在 nginx 服务器上返回 403

Flask 应用程序的根位置在 nginx 服务器上返回 403

我看到其他帖子说文件权限或缺少索引指令是原因。但是,我的 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 位置并显示主页。

相关内容