根 Flask 应用程序路由在生产中被禁止访问 403(nginx、uwsgi)
root Flask app route hits 403 forbidden in production (nginx, uwsgi)
基本上我有一个 views.py,里面有我所有的路线。他们都在生产上工作得很好,除了一个......根位置的主页'/'
来自views.py
@app.route('/', methods = ['GET'])
def homepage():
return render_template("/client/homepage.html")
@app.route('/admin/', methods = ['GET'])
@login_required
def admin():
submissions = Campaign.query.all()
return render_template("admin.html",
title = 'Admin',
submissions = submissions)
我没有显示页面,而是收到 403 禁止消息。
来自 nginx 日志:
directory index of "/srv/www/cc/app/" is forbidden
有人知道我的 flask 路由有什么问题会导致行为从“/admin/”变为“/”吗?
编辑
我在网上找到了很多关于这个问题的帖子,其中一个建议是在 nginx 中打开自动索引。我这样做了,它给了我一个根位置的目录......这让我觉得问题可能是 nginx 根本没有将请求传递给 uwsgi。但我不确定该怎么做。
原来这是我写 nginx.conf 的方式。
在阅读 try_files 上的文档后,我发现我需要简单地添加
error_page 403 = @cc;
到我的位置块。原因显然是 try_files 指令将尝试按照列出的顺序直接匹配每个请求,所以在我的例子中,我的位置 @cc 是最后一个。 Nginx 正在根据 $uri 找到 / 且仅 / 的匹配项,然后尝试相应地显示页面。因为我的所有 uwsgi 东西都在我的@cc 位置,所以我不得不使用 error_page 403 = @cc; 将请求重定向到那里。位.
这是最终产品:
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;
error_page 403 = @cc;
}
location /uploads/ {
expires max;
}
location /static/ {
expires max;
}
location @cc {
include uwsgi_params;
uwsgi_pass unix:/tmp/uwsgi.sock;
}
}
我也遇到了同样的问题。在我的例子中,不幸的是 yarn-build 失败了,build 文件夹什么也没有!。
因此,重新运行 yarn-build 并解决了问题
可能对遇到此类问题的人有所帮助。
基本上我有一个 views.py,里面有我所有的路线。他们都在生产上工作得很好,除了一个......根位置的主页'/'
来自views.py
@app.route('/', methods = ['GET'])
def homepage():
return render_template("/client/homepage.html")
@app.route('/admin/', methods = ['GET'])
@login_required
def admin():
submissions = Campaign.query.all()
return render_template("admin.html",
title = 'Admin',
submissions = submissions)
我没有显示页面,而是收到 403 禁止消息。
来自 nginx 日志:
directory index of "/srv/www/cc/app/" is forbidden
有人知道我的 flask 路由有什么问题会导致行为从“/admin/”变为“/”吗?
编辑
我在网上找到了很多关于这个问题的帖子,其中一个建议是在 nginx 中打开自动索引。我这样做了,它给了我一个根位置的目录......这让我觉得问题可能是 nginx 根本没有将请求传递给 uwsgi。但我不确定该怎么做。
原来这是我写 nginx.conf 的方式。
在阅读 try_files 上的文档后,我发现我需要简单地添加
error_page 403 = @cc;
到我的位置块。原因显然是 try_files 指令将尝试按照列出的顺序直接匹配每个请求,所以在我的例子中,我的位置 @cc 是最后一个。 Nginx 正在根据 $uri 找到 / 且仅 / 的匹配项,然后尝试相应地显示页面。因为我的所有 uwsgi 东西都在我的@cc 位置,所以我不得不使用 error_page 403 = @cc; 将请求重定向到那里。位.
这是最终产品:
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;
error_page 403 = @cc;
}
location /uploads/ {
expires max;
}
location /static/ {
expires max;
}
location @cc {
include uwsgi_params;
uwsgi_pass unix:/tmp/uwsgi.sock;
}
}
我也遇到了同样的问题。在我的例子中,不幸的是 yarn-build 失败了,build 文件夹什么也没有!。 因此,重新运行 yarn-build 并解决了问题
可能对遇到此类问题的人有所帮助。