发布到生产※
使用 django-admin 和 manage.py 工具创建的 Django 骨架网站,是为了使开发更容易而配置的。出于安全性或性能原因,许多 Django 项目设置(在settings.py中指定),在生产应该是不同的。
你必须检查的关键设置是:
DEBUG
. 这应该在生产环境中设置为False
(DEBUG = False
)。这将停止显示敏感/机密调试跟踪和变量信息。SECRET_KEY
. 这是用于 CRSF 保护等的大随机值。重要的是,生产中使用的密钥,不应在源代码管理中、或在生产服务器外部可访问。Django 文档表明,可能最好从环境变量加载,或从仅供服务的文件中读取。# Read SECRET_KEY from an environment variable import os SECRET_KEY = os.environ['SECRET_KEY'] #OR #Read secret key from a file with open('/etc/secret_key.txt') as f: SECRET_KEY = f.read().strip()
让我们更改 LocalLibrary 应用程序,以便我们从环境变量中,读取SECRET_KEY
和 DEBUG
变量(如果已定义),否则使用配置文件中的默认值。
打开 /locallibrary/settings.py,禁用原始的SECRET_KEY
配置,并加入如下以粗体显示的几行。在开发过程中,不会为密钥指定环境变量,因此将使用默认值(在此处使用的密钥,或密钥“泄漏”无关紧要,因为你不会在生产环境中使用它)。
# SECURITY WARNING: keep the secret key used in production secret!
# SECRET_KEY = 'cg#p$g+j9tax!#a3cup@1$8obt2_+&k3q+pmu)5%asj6yjpkag'
import os
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', 'cg#p$g+j9tax!#a3cup@1$8obt2_+&k3q+pmu)5%asj6yjpkag')
然后注释掉现有的DEBUG
设置,并如下所示,添加新的一行。
# SECURITY WARNING: don't run with debug turned on in production!
# DEBUG = True
DEBUG = bool( os.environ.get('DJANGO_DEBUG', True) )
默认情况下,DEBUG
的值为True
,但如果DJANGO_DEBUG
环境变量的值,设置为空字符串,则为False
,例如,DJANGO_DEBUG=''
。
备注:如果我们可以直接将DJANGO_DEBUG
环境变量设置为True
或False
,而不是分别使用“any string”或“empty string”,那将更直观。不幸的是,环境变量值存储为 Python 字符串,计算结果为 False
的唯一字符串,是空字符串(例如bool('')==False
)。
部署清单(Django 文档)中,提供了你可能要更改的完整设置清单。你还可以使用下面的终端命令,列出其中的一些:
python3 manage.py check --deploy
一些生产环境可能需要的配置※
DEBUG = True
- 这个选项用于控制是否开启调试模式。在开发阶段,通常将其设置为
True
,以便在出现错误时获得详细的错误信息。但在生产环境中,应该将其设置为False
,以防止泄露敏感信息。
- 这个选项用于控制是否开启调试模式。在开发阶段,通常将其设置为
ALLOWED_HOSTS
- 这个选项用于指定允许访问应用程序的主机名。如果请求中的主机名不在这个列表中,Django 将拒绝该请求。这有助于防止主机名伪造攻击。如果使用本地反向代理,应该设置
127.0.0.1
- 这个选项用于指定允许访问应用程序的主机名。如果请求中的主机名不在这个列表中,Django 将拒绝该请求。这有助于防止主机名伪造攻击。如果使用本地反向代理,应该设置
- 以
SECURE_
开头的选项- 这些选项用于配置应用程序的安全性。它们包括:
SECURE_HSTS_SECONDS
: 设置 HTTP Strict Transport Security(HSTS)的持续时间,以秒为单位。它告诉浏览器在指定的时间内强制使用 HTTPS 访问网站。SECURE_HSTS_INCLUDE_SUBDOMAINS
: 指定是否包括所有子域名。SECURE_SSL_REDIRECT
: 指定是否强制使用 HTTPS。SESSION_COOKIE_SECURE
: 指定会话 cookie 是否仅通过 HTTPS 连接传输。CSRF_COOKIE_SECURE
: 指定 CSRF 保护的 cookie 是否仅通过 HTTPS 连接传输。SECURE_HSTS_PRELOAD
: 指定是否启用 HSTS 预加载。USE_X_FORWARDED_HOST
: 指定是否使用 X-Forwarded-Host 头。USE_X_FORWARDED_PORT
: 指定是否使用 X-Forwarded-Port 头。SECURE_PROXY_SSL_HEADER
: 指定代理服务器使用的 HTTPS 头。
- 这些选项用于配置应用程序的安全性。它们包括: