Django 4.x HTTP 网络协议使用示例和配置方法

对于使用 Django 制作的 Web 应用程序,是一种将所有可以是 http 的访问更改为 https 的设置方法,最好使用nginx这样的服务端应用来支持。

同样常规的 http 方法对于 Django 同样也是支持的。



Https 常用配置

用于将网址访问的链接 http 转换成 https。

# SECURITY安全设置 - 支持http时建议开启
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
SECURE_SSL_REDIRECT = True # 将所有非SSL请求永久重定向到SSL
SESSION_COOKIE_SECURE = True # 仅通过https传输cookie
CSRF_COOKIE_SECURE = True # 仅通过https传输cookie
SECURE_HSTS_INCLUDE_SUBDOMAINS = True # 严格要求使用https协议传输
SECURE_HSTS_PRELOAD = True # HSTS为
SECURE_HSTS_SECONDS = 60
SECURE_CONTENT_TYPE_NOSNIFF = True # 防止浏览器猜测资产的内容类型



Http 参数说明

DATA_UPLOAD_MAX_MEMORY_SIZE

设置可接收的请求主体最大的体积,以字节为单位。超过限制则抛出 SuspiciousOperation 异常。

DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440 # 2.5 MB

DATA_UPLOAD_MAX_NUMBER_FIELDS

可通过GET或POST接收的最大参数数量。

DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000

DEFAULT_CHARSET

HttpResponse响应对象的默认字符集。

DEFAULT_CHARSET = 'utf-8'

DISALLOWED_USER_AGENTS

需要CommonMiddleware中间件支持,代表用户代理字符串的已编译正则表达式对象列表,不允许用户在系统范围内访问任何页面。

DISALLOWED_USER_AGENTS = []

DISALLOWED_USER_AGENTS = [
  re.compile(r'^\s$|^#39;), # 不允许空Headers浏览器
  re.compile(r'.*PhantomJS.*') # 不允许无头浏览器
]

FORCE_SCRIPT_NAME

SCRIPT_NAME 任何HTTP请求中环境变量的值,一般配合 Nginx 使用。

FORCE_SCRIPT_NAME = None

Nginx.conf ,用Nginx的rewrite,实现向内传递时去除SCRIPT_NAME。

location ~ ^/home/ {
    rewrite /home/(.*) /$1 break;
    proxy_pass http://127.0.0.1:8000;
    ...
}

settings.py

FORCE_SCRIPT_NAME = '/home'

INTERNAL_IPS

调试IP地址列表。

INTERNAL_IPS = []

INTERNAL_IPS = ['127.0.0.1', ]

MIDDLEWARE

在Setting.py中配置中间件,默认固定不需要修改。

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

SIGNING_BACKEND

用于签名Cookie和其他数据的后端交互,默认固定不需要修改。

SIGNING_BACKEND = 'django.core.signing.TimestampSigner'

SIGNING_BACKEND = 'django.core.signing.TimestampSigner'

USE_X_FORWARDED_HOST

是否 X-Forwarded-Host 优先于 Host 标头使用标头。

USE_X_FORWARDED_HOST = False # 源请求头优先,默认
USE_X_FORWARDED_HOST = True # 访问服务器请求头优先

USE_X_FORWARDED_PORT

是否 X-Forwarded-Port 优先于 SERVER_PORT META 变量使用标头。

USE_X_FORWARDED_PORT = False # 源请求端口优先,默认
USE_X_FORWARDED_PORT= True # 访问服务器请求端口优先

WSGI_APPLICATION

Django内置服务器(例如runserver)将使用的 WSGI 应用程序对象的完整 Python 路径用于配置Nginx使用,默认固定不需要修改。

WSGI_APPLICATION = None

MIGRATION_MODULES

一个字典,指定用于在每个应用程序中找到迁移模块的软件包,migrations文件。

MIGRATION_MODULES = {}

SECURE_BROWSER_XSS_FILTER

对内容进行消毒,去掉敏感符号。

SECURE_BROWSER_XSS_FILTER = False

SECURE_CONTENT_TYPE_NOSNIFF

阻止浏览器自动推断内容类型。

SECURE_CONTENT_TYPE_NOSNIFF = True # 防止浏览器猜测资产的内容类型

SECURE_HSTS_INCLUDE_SUBDOMAINS

将指令 SecurityMiddleware 添加 includeSubDomains 到HTTP Strict Transport Security。设置 True 严格要求使用 https 协议传输,所有子域完全使用HTTPS,否则你的站点仍旧有可能由于子域的不安全连接而受到攻击。

SECURE_HSTS_INCLUDE_SUBDOMAINS = False

SECURE_HSTS_PRELOAD

SecurityMiddleware 添加 preload 到 HTTP Strict Transport Security,默认固定不需要修改

SECURE_HSTS_PRELOAD = False

SECURE_HSTS_SECONDS

SecurityMiddleware 设置会在所有尚未使用的 HTTP 严格响应上设置 HTTP Strict Transport Security。在不安全链接指定时间内拒绝使用不安全(HTTP)的方式连接到你的域名。

SECURE_HSTS_SECONDS = 0

SECURE_HSTS_SECONDS = 3600

SECURE_PROXY_SSL_HEADER

请求的HTTP标头/值组合的元组,SECURITY安全设置。

SECURE_PROXY_SSL_HEADER = None

# SECURITY安全设置,支持http时开启
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")

SECURE_REDIRECT_EXEMPT

URL路径与此列表中的正则表达式匹配,则该请求将不会重定向到HTTPS,默认固定不需要修改

SECURE_REDIRECT_EXEMPT = []

SECURE_REFERRER_POLICY

将所有尚未将其设置为所有提供的值SecurityMiddleware的引用策略标头设置为提供的值,默认固定不需要修改。

SECURE_REFERRER_POLICY = None

SECURE_SSL_HOST

SSL重定向都将定向到该主机,而不是最初请求的主机。

SECURE_SSL_HOST =  None

SECURE_SSL_HOST = '127.0.0.1'

SECURE_SSL_REDIRECT

设置为True,则将所有非HTTPS请求重定向到HTTPS(与匹配中列出的正则表达式的URL除外 )。

SECURE_SSL_REDIRECT = False

SECURE_SSL_REDIRECT = True # 将所有非SSL请求永久重定向到SSL


发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章