【问题标题】:root Flask app route hits 403 forbidden in production (nginx, uwsgi)root Flask 应用程序路由在生产中遇到 403 禁止(nginx、uwsgi)
【发布时间】:2015-11-15 17:44:27
【问题描述】:

基本上我只有一个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 日志:

“/srv/www/cc/app/”目录索引被禁止

有人知道我的烧瓶路线出了什么问题,会导致行为从“/admin/”变为“/”吗?

编辑

我在网上找到了多篇关于这个问题的帖子,其中一个建议是在 nginx 中打开自动索引。我这样做了,它给了我一个根位置的目录......这让我认为问题可能是 nginx 根本没有将请求传递给 uwsgi。但我不知道该怎么办。

【问题讨论】:

  • 几乎可以肯定 nginx 的用户权限错误。确保 www-data 可以读取该目录
  • @reptilicus 我在网上看到了对权限的引用,所以我拿走了我的整个 /srv/www/cc/ 树并制作了所有文件 644 和所有目录 775。它们也都拥有 www-data 并拥有组 www-data
  • @Chockomonkey 如果您直接在 /srv/www/cc/ 路径上更改了权限,您还需要确保您在 /srv 和 / 的路径上具有相同或更高的许可权限srv/万维网。见:unix.stackexchange.com/questions/13858/…
  • @chishaku 感谢您的建议。我继续将 755 应用于从 /srv 开始的所有目录,但仍然没有骰子。不过值得一试。
  • @Chockomonkey 还要仔细检查您是否递归地设置了权限,以便 ./app/templates/client 具有相同的权限。之所以提到这一点,是因为您的两条路线之间的一个区别是主页模板在路径中更深一层。

标签: python nginx flask http-status-code-403 production


【解决方案1】:

我也遇到了同样的问题。就我而言,不幸的是,yarn-build 失败了,并且 build 文件夹什么也没有! 所以,重新运行 yarn-build 就解决了问题

这可能对面临此类问题的人有所帮助。

【讨论】:

    【解决方案2】:

    原来这是我编写 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-12-26
      • 2020-03-12
      • 1970-01-01
      • 2016-01-19
      • 2014-06-04
      • 2019-07-13
      • 2019-06-07
      • 2019-04-17
      相关资源
      最近更新 更多