Heroku 需要 ALLOWED_HOSTS 吗?
Posted
技术标签:
【中文标题】Heroku 需要 ALLOWED_HOSTS 吗?【英文标题】:Is ALLOWED_HOSTS needed on Heroku? 【发布时间】:2015-10-19 13:30:17 【问题描述】:据我了解,ALLOWED_HOSTS
会在DEBUG=False
进行检查,以防止攻击者将他们自己的域指向您的站点。
看起来 Heroku 的 Custom Domains 也在做同样的事情。
因此,不要在app.json
中为Heroku Button 添加必需的ALLOWED_HOSTS
变量(因为它感觉多余并且在您赶时间时容易出错),您可以设置ALLOWED_HOSTS = ['*']
并允许Heroku 来验证请求是否到达了它们应该到达的地方?
【问题讨论】:
相关***.com/questions/16218446/… 【参考方案1】:警告:可能已过期
下面的 settings.py
代表 Heroku 文档的内容,当时这个答案最初是在 2015 年编写的。虽然我相对确定此处提供的 ALLOWED_HOSTS
设置是安全的,但请在复制其余任何内容之前咨询 the up-to-date docs这些设置!
原始答案如下。有关详细信息,请参见下文。
这正是你应该做的,Getting Started with Django on Heroku:
settings.py
# Parse database configuration from $DATABASE_URL
import dj_database_url
DATABASES['default'] = dj_database_url.config()
# Honor the 'X-Forwarded-Proto' header for request.is_secure()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# Allow all host headers
ALLOWED_HOSTS = ['*']
# Static asset configuration
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
2018 年更新
上面的链接不再有效,因为 Heroku 的 Getting Started 文档的格式最近有所不同,提供了预构建的示例 repos,而不是文档中的代码示例。当前的Python Getting Started Repo有ALLOWED_HOSTS = []
,也有DEBUG = True
,根据the Django 2.1 docs触发了一个特殊情况
ALLOWED_HOSTS = ['localhost', '127.0.0.1', '[::1]']
由于DEBUG = True
在生产中不推荐或根本不是一个好主意,因此此答案中的原始建议仍然是 Heroku 应用程序的生产就绪解决方案。在决定做什么之前,请务必阅读并理解 Charlie Weems' brief answer。
完全披露:我没有在最新版本的 Django 中构建生产 Heroku 应用程序。 YMMV :)
【讨论】:
哦,太好了!我阅读的所有教程都将其设置为yourapp.herokuapp.com
。我想我应该直接去看文档。谢谢!【参考方案2】:
请注意,2017 年 12 月的入门指南中的 Heroku removed ['*']
。
我建议设置ALLOWED_HOSTS = ['.herokuapp.com']
。
即使 Heroku 的域服务提供了这种保护,如果移动到另一个托管服务,指定设置将提醒更新配置。
【讨论】:
更新了我的答案以反映过时的文档并参考您的。干杯!以上是关于Heroku 需要 ALLOWED_HOSTS 吗?的主要内容,如果未能解决你的问题,请参考以下文章