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 吗?的主要内容,如果未能解决你的问题,请参考以下文章

需要 Heroku 数据库性能经验吗?

mongolab和heroku之间的连接需要ssl吗?

我需要为 Heroku 上托管的机器人实现分片吗?

可以从 Heroku 运行 mongoimport 吗?

我可以在 Heroku 中运行咖啡脚本吗?

我如何准备要部署到heroku的CRA应用程序,仍然需要像全栈CRA应用程序一样构建吗?