403禁止用于没有SSL的AWS Beanstalk Flask静态文件



我的本地机器是一个虚拟的CeontOS-7,带有一个包含Flask应用程序目录的Python 2.7虚拟机,其结构如下:

/var
  /www
    /myAppenv
      /myApp
        /.ebextensions
           myApp-env.config
        /.elasticbeanstalk
        application.py
        requirements.txt
        /flaskApp
          /core
            views.py
            models.py
            forms.py
          /templates
          /static

我使用EB CLI从/myApp部署它,部署到名为myApp的Beanstalk应用程序和名为myApp-env的环境中。

我认为静态文件路径设置在/.eextensions/myApp-env.config:中

option_settings:
   "aws:elasticbeanstalk:container:python:staticfiles":
     "/static/": "flaskApp/static/"

我可以在AWS web控制台->环境->配置->软件配置中看到

StaticFiles: /static/=flaskApp/static/ 

因此,路径设置似乎不是问题的原因。

因此,当我打开应用程序的网页时,我看到页面缺少css和js,因为静态目录中的所有内容都会得到403禁止的响应:

GET http://myApp-dev.elasticbeanstalk.com/ [HTTP/1.1 200 OK 174ms]
GET http://myApp-dev.elasticbeanstalk.com/static/bootstrap-3.3.5-dist/js/bootstrap.min.js  [HTTP/1.1 403 Forbidden 55ms]
...

猜测这是关于权限的问题,因为在我的本地目录中,文件由我的linux帐户所有(出于samba的原因),然后我尝试chown root和chgrp root(静态目录和文件权限为755),但它没有改变任何东西。实际上,我不认为与firewall/selinux有任何关系,因为主页实际上正在加载。

有人知道如何解决这个问题吗?

我想我发现了问题。我通过EB SSH进行了检查,只是为了了解发生了什么,我注意到我登录到AWS机器的"ec2用户"可以访问(运行cd命令),直到目录

/opt/python/current/app

但ec2用户不允许访问目录

/opt/python/current/app/flaskApp

因为权限。

虽然flaskApp中包含的静态目录和文件的权限设置为755,但我注意到flaskApp的目录(包含静态目录)为744(我认为这很好)。所以我把flaskApp-dir权限改为755,它起作用了:现在静态文件被加载了!

顺便说一句,我怀疑这个权限集是否适合生产。另一种选择是构建目录,使static不是flaskApp目录的子目录,这样可以将static目录设置为755,同时将flaskApp的目录设置为更保守的权限。

如果不是所有用户都可以查看文件,则作为root的所有者/组可能无关紧要。通过在所有静态文件上运行chmod 664,确保所有人都可以访问它们。

最新更新