首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >HSTS和HTTPS设置无效

HSTS和HTTPS设置无效
EN

Stack Overflow用户
提问于 2019-06-13 02:34:31
回答 1查看 1.7K关注 0票数 0

如django文档所述,我设置了几个设置,但有两个问题:

  1. SecurityMiddleware不起作用
  2. 一旦SECURE_SSL_REDIRECT = True网站无法访问

SecurityMiddleware应该设置Strict-Transport-Security: max-age=31536000; includeSubDomains是responde标头,但是我通过chrome F12检查响应头,响应头是这样的:

代码语言:javascript
运行
复制
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Thu, 13 Jun 2019 02:18:17 GMT
Server: openresty/1.15.8.1
Set-Cookie: uid=e59e2b54f7d64a6799b0f160dc80fae6; expires=Sun, 10 Jun 2029 02:18:17 GMT; HttpOnly; Max-Age=315360000; Path=/
Transfer-Encoding: chunked
X-Frame-Options: SAMEORIGIN

没有严格的-运输-安全在其中

我使用nginx重定向,但我仍然不知道为什么SECURE_SSL_REDIRECT = True导致网站访问,如果这个设置有其他影响?chrome显示ERR_TOO_MANY_REDIRECTS

django设置:

代码语言:javascript
运行
复制
MIDDLEWARE = [
   # 'django.middleware.cache.UpdateCacheMiddleware',
    'blog.middleware.user_id.UserIDMiddleware',
    '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',
]

ALLOWED_HOSTS = ['www.xxxxxx.club']

#SECURE_SSL_REDIRECT = True
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-13 05:36:39

我认为这两个问题,两个由同样的原因引起的问题。我使用nginx作为代理,并在nginx中将redirery HTTP设置为HTTPS,但是

代理可能“吞服”了这样一个事实,即请求是HTTPS,使用代理和Django之间的非HTTPS连接。

因此Django总是获得HTTP请求,同时将SECURE_SSL_REDIRECT = True all http重定向到HTTPS,但所有这些HTTPS将再次成为代理和django之间的http,这就是导致无限重定向的原因。

如果SECURE_SSL_REDIRECT = False django不会从nginx重定向http,而django只会在HTTPS响应头中设置strict-transport-security,这就是为什么即使我的浏览器接收https响应(由nginx接收,没有django),响应头中没有strict-transport-security,所以我更改了一些设置:

  1. 在django设置中设置SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
  2. 在nginx 443端口内设置proxy_set_header X-Forwarded-Proto $scheme;

https://github.com/richardcornish/django-removewww/issues/1 HEADER https://stackoverflow.com/a/41488430/11350098

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56572638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档