gpt4 book ai didi

django - apache + django + mod_wsgi 转换为 https 不断返回到 http

转载 作者:太空宇宙 更新时间:2023-11-03 14:50:05 25 4
gpt4 key购买 nike

我有一个使用 Apache 和 mod_wsgi 的 django (satchmo) 站点现在运行良好了几年。到目前为止,它只提供 http 服务,我正在尝试将整个站点转换为 https。我有一个签名的 ssl 证书,我认为它没问题。

我根据我对文档的理解调整了我的 Apache 配置。

当我尝试使用 https 连接到站点时,浏览器在端口 443 上连接正常,并且 Apache 服务器响应正确的 ssl 证书,然后是 TLS key 交换等(根据我在 Wire Shark 中看到的)。那时一切看起来都很好,没有错误。但是..

一旦建立了 ssl 连接,浏览器就会在到端口 80(即 http)的新 TCP 连接中启动“GET/HTTP/1.1”。就好像它对已经存在的 https 连接一无所知。

有没有可能是django的问题?我根本没有更改 django 配置,因为我的印象是只有 Apache 需要知道它? (我不使用 nginx - Apache 处理所有内容。)

我无法“看到”ssl 对话中发生了什么,但大概是 django 告诉浏览器客户端以某种方式连接到端口 80?这可能吗?

为简单起见,当您连接到 http 时,我现在有一个普通的 index.html 页面,并且我已将所有 django 和 mod_wsgi 移动到端口 443。如果我直接连接到 http 地址,我会得到简单的索引页,没问题。

当我尝试连接到 https 地址时,浏览器有效地重定向到 index.html 页面。 (虽然我在 Apache 中没有任何重定向或重写命令。)

这是我的 Apache 配置:

<VirtualHost *:80>
ServerName demo.pasta.co.za

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

DocumentRoot /var/www/http_site
</VirtualHost>

<VirtualHost *:443>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile /etc/ssl/private/pasta.co.za.crt
SSLCertificateKeyFile /etc/ssl/private/pasta.co.za.key
SSLCertificateChainFile /etc/ssl/private/root_bundle.crt

ServerName demo.pasta.co.za

Alias /favicon.ico /usr/local/django/pasta/static/favicon.ico
Alias /robots.txt /usr/local/django/pasta/static/robots.txt
AliasMatch ^/([^/]*\.css) /usr/local/django/pasta/store/static/$1

WSGIDaemonProcess demo.pasta.co.za processes=2 threads=25 display-name=%{GROUP}
WSGIProcessGroup demo.pasta.co.za

WSGIScriptAlias / /usr/local/django/pasta/apache/django.wsgi

<Directory /usr/local/django/pasta/apache>
Order allow,deny
Allow from all
</Directory>

Alias /static/admin/ /usr/share/pyshared/django/contrib/admin/static/admin/
Alias /static/images/ /usr/local/django/pasta/store/static/images/
Alias /static/ /usr/local/django/pasta/store/static/
Alias /media/ /usr/local/django/pasta/store/static/

<Directory /usr/local/django/pasta/store/static>
Order deny,allow
Options -Indexes
Allow from all
</Directory>

<Directory /usr/share/pyshared/django/contrib/admin/static/admin>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>

这是我的 mod_wsgi 文件:

import os, sys
sys.path.insert (0,"/usr/local/django/pasta/store")
import settings
import django.core.management
django.core.management.setup_environ(settings)
utility = django.core.management.ManagementUtility()
command = utility.fetch_command('runserver')
command.validate()
import django.conf
import django.utils
django.utils.translation.activate(django.conf.settings.LANGUAGE_CODE)
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

SO 上有许多示例,其中人们或多或少地完成了我正在尝试做的事情。

我错过了什么?感觉我遗漏了一些非常明显的东西。

我有 Debian 稳定运行 django v1.4.5 python v2.7.3 和 apache v2.2.22 与 mod-wsgi v3.3-4。

非常感谢!

最佳答案

satchmo nginx redirect to https then to http and back 的已接受答案由 mipadi ...

Satchmo 包含一个名为 satchmo_store.shop.SSLMiddleware.SSLRedirect 的中间件,它会自动重定向到站点的 SSL/非 SSL 部分。如果您希望通过 SSL 提供 URL,则必须将 URL 设置为通过 SSL 提供,否则中间件将重定向到非 SSL 页面。来自文档:

This middleware answers the problem of redirecting to (and from) a SSL secured path by stating what paths should be secured in urls.py file. To secure a path, add the additional view_kwarg 'SSL':True to the view_kwargs.

For example

urlpatterns = patterns('some_site.some_app.views',
(r'^test/secure/$','test_secure',{'SSL':True}),
)

All paths where 'SSL':False or where the kwarg of 'SSL' is not specified are routed to an unsecure path.

For example

urlpatterns = patterns('some_site.some_app.views',
(r'^test/unsecure1/$','test_unsecure',{'SSL':False}),
(r'^test/unsecure2/$','test_unsecure'),
)

在您的情况下,由于您通过 SSL 为整个站点提供服务,因此您可能只需在 settings.py 文件中禁用该中间件即可。

(根据我的经验,您需要在几个文件中更改相当多的 urlpatterns。)

关于django - apache + django + mod_wsgi 转换为 https 不断返回到 http,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35253429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com