2012-02-01 10 views
4

Djangoのeコマースサイトを実行しており、購入してSSL証明書をインストールしました。DjangoがHTTPSからHTTPにリダイレクトしています

私はVirtualHostのエントリを追加しました:正常に動作している非SSL用のconfもあり

from django.conf.urls.defaults import patterns, include, url 
from django.contrib import admin 
from django.conf import settings 

from gallery.models import LOCATIONS, Photo 

admin.autodiscover() 

from satchmo_store.urls import urlpatterns as satchmo_urls 

from satchmo_store.shop.views.sitemaps import sitemaps 
from cms.sitemaps import CMSSitemap 
sitemaps['pages'] = CMSSitemap 

urlpatterns = patterns('', 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^search/', include('haystack.urls')), 

    # Include satchmo urls. Unfortunately, this also includes it's own 
    # /admin/ and everything else. 
    url(r'^shop/', include(satchmo_urls)), 
    url(r'^sitemap\.xml/?$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}), 

    url(r'events/gallery/(.*)/(.*)/$', 'gallery.views.events_image'), 
    url(r'locations/view-all/(.*)/$', 'gallery.views.locations_image'), 
    url(r'locations/view-all/$', 'gallery.views.locations_view_all',{ 
      'queryset':Photo.objects.filter(gallery__category=LOCATIONS).distinct()}), 
    url(r'^contact-us/', include('contact_form.urls')), 
    url(r'^', include('cms.urls')), 
) 

if settings.DEBUG: 
    urlpatterns = patterns('', 
     (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}), 
     (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}), 
     (r'^404/$', 'django.views.defaults.page_not_found'), 
     (r'^500/$', 'django.views.defaults.server_error'), 
    ) + urlpatterns 

:ここ

<VirtualHost *:443> 
     #Basic setup 
     ServerAdmin [email protected] 

     ServerName test.com 
     ServerAlias www.test.com 

     Alias /media/admin/ /home/test/public_html/test/release/env/lib/python2.6/dist-packages/django/contrib/admin/media/ 
     Alias /static/ /home/test/public_html/test/release/static/ 
     Alias /media/ /home/test/public_html/test/release/media/ 

     <Directory /home/test/public_html/test/release/> 
      Order deny,allow 
      Allow from all 
     </Directory> 
     RewriteEngine On 

     LogLevel warn 
     ErrorLog /home/test/public_html/test/logs/error.log 
     CustomLog /home/test/public_html/test/logs/access.log combined 

     WSGIDaemonProcess test user=www-data group=www-data threads=20 processes=2 
     WSGIProcessGroup test_ssl 

     WSGIScriptAlias//home/test/public_html/test/release/apache/test.wsgi 

     SSLEngine On 
     SSLCertificateFile /etc/apache2/ssl/test.com.crt 
     SSLCertificateChainFile /etc/apache2/ssl/gs_root.pem 
     SSLCertificateKeyFile /etc/apache2/ssl/www.test.com.key 
</VirtualHost> 

はurls.pyファイルです。

私はHTTPSバージョンのサイトをリクエストするたびに、HTTPバージョンにリダイレクトする302ヘッダー応答を取得します。アイブ氏はしばらくの間、このに対して私の頭を強打されて

明示的にポート80に行く状態apacheのconfのにはリダイレクトはありません

、任意のヘルプは素晴らしいだろう!

ありがとうございました

+0

リダイレクトするcms/urls.pyには何かがありますか? – cubetwo1729

+0

私たちはDjangoCMSを使用していますが、そこには何もありません.... – Simon

答えて

8

あなたはすでにそれを修正している可能性がありますが、まったく別の問題かもしれませんが、ちょっと似たようなものが出てきました。あなたの問題を解決した答えが見つからなかったので、返信(私は301とあなた302を持っていたにもかかわらず)。

私はnginxの後ろにgunicornでDjangoサイト(Django 1.6.1)を実行しています。したがって、nginxはSSLを行います。環境変数HTTPSonに設定されています。

http-to-httpsリダイレクトなしでテストサーバーを設定すると、いくつかのリクエストがhttpアドレスにリダイレクトされることに気がつきました。私の場合は特定のリンク。要求と応答のヘッダーを調べた後、私は見つけました: 最初のリクエストhttps://example.org/test301 MOVED PERMANENTLYhttp://exmaple.org/test/にDjango/gunicornによってリダイレクトされました。 nginxは400 Bad Request - The plain HTTP request was sent to HTTPS portで応答しました。

すぐに私は前もって注意を払っていなかった設定を見つけました:APPEND_SLASHhttps://docs.djangoproject.com/en/1.6/ref/settings/#std:setting-APPEND_SLASH)、デフォルト値はTrueです。

settings.pyファイルにAPPEND_SLASH = Falseを追加した後、https://example.org/testへのリクエストでは、httpへのリダイレクトなしで404 NOT FOUNDという応答が返されました。だから、APPEND_SLASHHTTP環境変数設定を尊重していないようです - 私はSECURE_PROXY_SSL_HEADERhttps://docs.djangoproject.com/en/1.6/ref/settings/#std:setting-SECURE_PROXY_SSL_HEADER)を設定すると思いますが、まだテストしていません。

ところで、私のケースでは、「欠陥のある」リンクの理由は、テンプレート内にハードコードされたリンクでした。そのようなリンクを避ける簡単な方法は、組み込みの{% url ... %}テンプレートタグ(https://docs.djangoproject.com/en/1.6/ref/templates/builtins/#url [申し訳ありませんが、私は "少なくとも10評判" ...]がないため、このリンクをクリック可能にできませんでした)を使用しています。

これはおそらく、Djangoが時々httpsからhttpにリダイレクトされるのを疑問視するあなたや他の人に役立ちます。

+3

SECURE_PROXY_SSL_HEADERを設定すると、これが修正されました。 – Nathan

+0

'SECURE_PROXY_SSL_HEADER =( 'HTTP_X_FORWARDED_PROTO'、 'https')'を設定しましたが、場合によってはHTTPへのリダイレクトも起こります。私はDjango 1.6.5を使用していて、HTTPSを非HTTPSに「代理」するロードバランサの背後にあるAWSに展開しています。残念ながら 'APPEND_SLASH'が必要です。 – jweyrich

+0

HTTP_X_FORWARDED_PROTOを設定してウェブサーバを正しく設定した場合、通常は動作するはずです。おそらく、ロードバランサがヘッダーで回っているのでしょうか? – goetz

0

私の考えることのできることは、データベース内のサイト設定だけです。 Siteオブジェクトに明示的なポート番号を設定した場合...あなたの管理者を見てみることができますか?

0

私はこれが古い質問だと知っていますが、私はちょうど同じ問題の解決策を探して時間を費やしてしまったので、ここで私が最終的に働いたものを投稿すると思いました。 私はオリジナルのポスターとしてSatchmoを使用していました。ミドルウェアクラスsatchmo_store.shop.SSLMiddleware.SSLRedirectがあります。デフォルトでは、元の質問に記載されているとおりのリダイレクトがhttpsからhttpに302ヘッダーレスポンスで送信されます。 MIDDLEWARE_CLASSESの行にコメントすると問題は解決し、誰かがhttpsで完全に動作させたい場合は問題ありませんが、文書http://satchmo.readthedocs.org/en/latest/configuration.html#sslは正しく使用する方法を説明しています。これは私がしようとしていることです。

関連する問題