satchmo nginx redirect to https then to http and b

2019-06-06 03:53发布

Im having a weird issue with a django project called satchmo, Im deploying with nginx and uwsgi.

Whats happening is that the application does respond and it redirects to https and then to http and back to https until nginx stops and the application never responds.

Help me figure out this. Thank you!

this is my sites-available config file for nginx:

server {
   listen 80;
   server_name miche.maumercado.com;
   rewrite      ^ https://$server_name$request_uri? permanent;
}

server {
        listen 443;
        charset utf-8;
        server_name miche.maumercado.com;
        ssl on;
        ssl_certificate /home/ubuntu/test.pem;
        ssl_certificate_key /home/ubuntu/cert-EO5rjY;
        access_log /home/ubuntu/logs/miche/nginx/access.log;
        error_log /home/ubuntu/logs/miche/nginx/error.log;
        client_max_body_size 100m;
        location ^~ /static/ {
                alias /home/ubuntu/django-projects/miche_store/static-collect/;
                expires max;
        }

        location ^~ /media/ {
                alias /home/ubuntu/django-projects/miche_store/media/;
                expires max;
        }

        location / {
                uwsgi_pass unix:/tmp/uwsgi_miche.sock;
                include /etc/nginx/uwsgi_params;
        }

}

This is the uwsgi.conf file in /etc/init:

# file: /etc/init/uwsgi_miche.conf
description "uWSGI starter"

start on (local-filesystems and runlevel [2345])
stop on runlevel [016]

respawn

# home - is the path to our virtualenv directory
# pythonpath - the path to our django application
# module - the wsgi handler python script

exec /home/ubuntu/ve/miche_store/bin/uwsgi \
--uid ubuntu \
--pythonpath /home/ubuntu/django-projects/miche_store \
-H /home/ubuntu/ve/miche_store \
--socket /tmp/uwsgi_miche.sock \
--chmod-socket 644 \
--module wsgi \
--logdate \
--optimize 2 \
--processes=6 \
--max-requests=5000 \
--master \
--vacuum \
--logto /home/ubuntu/logs/miche/uwsgi.log

And heres my wsgi.py file:

import os
import sys
import site

site.addsitedir('/home/ubuntu/ve/miche_store/lib/python2.6/site-packages')
sys.path.append(os.path.abspath(os.path.dirname(__file__)))
sys.path.append(os.path.join(os.path.realpath(os.path.dirname(__file__)), '../'))

os.environ['DJANGO_SETTINGS_MODULE'] = 'miche_store.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Thank you all for your help!

1条回答
三岁会撩人
2楼-- · 2019-06-06 04:31

Satchmo includes a piece of middleware called satchmo_store.shop.SSLMiddleware.SSLRedirect, which automatically does redirecting to SSL/non-SSL portions of the site. You have to set up URLs to be served via SSL if you want them to be served via SSL, otherwise the middleware redirects to a non-SSL page. From the docs:

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'),
     )

In your case, since you're serving the entire site via SSL, you can probably just disable that middleware in your settings.py file.

查看更多
登录 后发表回答