我的本地机器是一个虚拟的 CeontOS-7,带有一个包含 Flask 应用程序目录的 Python 2.7 virtualenv,结构如下:
/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 deploy 从/myApp 将它部署到一个名为 myApp 的 Beanstalk 应用程序,环境名为 myApp-env。
我认为静态文件路径设置在/.ebextensions/myApp-env.config 中:
option_settings:
"aws:elasticbeanstalk:container:python:staticfiles":
"/static/": "flaskApp/static/"
我可以在 AWS web console-> environment-> Configurations-> Software Configuration 中看到
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),但它没有不要改变任何东西。事实上,我认为与防火墙/selinux 没有任何关系,因为主页实际上正在加载。
有人知道如何解决这个问题吗?
最佳答案
我想我找到了问题所在。我正在通过 EB SSH 检查以了解发生了什么,我注意到我登录 AWS 机器的“ec2-user”可以访问(运行 cd 命令)直到目录
/opt/python/current/app
但 ec2-user 不允许访问目录
/opt/python/current/app/flaskApp
因为权限。
虽然 flaskApp 中包含的静态目录和文件的权限设置为 755,但我注意到 flaskApp 目录(包含静态目录)是 744(我认为这没问题)。所以我将 flaskApp 目录权限更改为 755 并且它起作用了:现在加载了静态文件!
顺便说一句,我怀疑这个权限集是否适合生产。另一种方法是构建 dirs,使 static 不是 flaskApp dir 的子目录,允许这种方式将 static dir 设置为 755,同时将 flaskApp dir 设置为更保守的权限。
关于python - 403 forbidden for AWS Beanstalk Flask static files without SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34475835/