Sim*_*mon 4 sysadmin apache django ssl https
我有一个Django电子商务网站正在运行,并购买并安装了SSL证书.
我添加了一个VirtualHost条目:
<VirtualHost *:443>
#Basic setup
ServerAdmin blah@test.com
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>
Run Code Online (Sandbox Code Playgroud)
这是urls.py文件:
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
Run Code Online (Sandbox Code Playgroud)
还有一个非ssl的conf,工作正常.
每当我请求网站的HTTPS版本时,我都会得到一个302头响应,它会重定向到HTTP版本.
apache conf中没有明确表示转到端口80的重定向.
我一直在反对这一点,任何帮助都会很棒!
谢谢
你可能已经修好了它,这可能是一个完全不同的问题,但我只是听到了一些听起来有些类似的东西,而且我没有找到解决你问题的答案,我认为发布回复可能是值得的(尽管我有301而你是302).
我正在运行一个Django站点(Django 1.6.1),后面是nginx的gunicorn.因此nginx执行SSL.环境变量HTTPS设置为on.
当我设置一个没有http到https重定向的测试服务器时,我注意到有些请求最终被重定向到一个http地址 - 类似于你所描述的,但在我的情况下,它只是针对一个特定的链接.在查看请求和响应标头后,我发现:初始请求https://example.org/test被Django/gunicorn重定向301 MOVED PERMANENTLY到http://exmaple.org/test/.然后nginx回应400 Bad Request - The plain HTTP request was sent to HTTPS port.
很快我遇到了一个我以前没注意过的设置:APPEND_SLASH(https://docs.djangoproject.com/en/1.6/ref/settings/#std:setting-APPEND_SLASH),默认值True.
添加APPEND_SLASH = False到我的settings.py文件后,请求https://example.org/test导致404 NOT FOUND响应,而没有重定向到http.所以似乎APPEND_SLASH不尊重HTTP环境变量设置 - 我猜配置SECURE_PROXY_SSL_HEADER(https://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的人.
| 归档时间: |
|
| 查看次数: |
4531 次 |
| 最近记录: |