2015-09-28 3 views
5

Я новый пользователь Flask, и у меня есть проблема. Я хочу, чтобы перенаправить все URL с HTTP на HTTPS, но я имею эту ошибку:Переадресация флэш-Python на https Соединение было сброшено

The connection was reset

Это мой Колба код:

#! /usr/bin/python 
# -*- coding:utf-8 -*- 

from flask import * 
from OpenSSL import SSL 
import psycopg2 
import os 
from datetime import timedelta 
import sys 
from flask_sslify import SSLify 
reload(sys) 
sys.setdefaultencoding('utf8') 
db_conn = psycopg2.connect("dbname=billjobs host=192.168.42.96 port=50434 user=username password=password") 

app = Flask(__name__) 
db = db_conn.cursor() 
app.permanent_session_lifetime = timedelta(seconds=900) 
sslify = SSLify(app) 
app.secret_key='\xatYK\x1ba\x1dz\xa6-D\x9d\x97\x83\xfa\xcf\xcbd\xfa\xfb\x1a|\x08\x1af' 
context = ('ssl.crt','ssl.key') 
@app.route('/') 
def pre_log(): 
    return render_template('index.html') 
if __name__ == '__main__': 
    app.run(host="192.168.42.186", ssl_context=context, debug=False) 

Если я вхожу сразу адрес HTTPS://192.168.42.186:5000 это работает, но с HTTP только его не

Благодаря оптоволоконный r помогать мне заранее

ответ

1

Вы не можете сделать это, используя ssl_context и Werkzung (по умолчанию сервер Flask). Функциональность, позволяющая это, была предложена и отклонена в 2014 году: auto http to https redirect; ссылаясь на:

That requires running another HTTP server. Werkzeug is not capable of that and IMO it's out of scope. run_simple should only be used for development anyway.

Так что происходит это приложение Настой вызывает run_simple снизу, передавая ssl_context и некоторые другие переменные. SSLify не влияет на вашу маршрутизацию, пока вы используете ssl_context, потому что единственное присутствие этой переменной делает Werkzung хост только с использованием схемы https. Чтобы получить перенаправление с http на https, вам нужно либо настроить другой сервер, прослушивать HTTP и перенаправить на https, либо перенести на другой более продвинутый сервер, который легко перенаправляет.

Я рекомендую перейти на Apache или gunicorn. Flask предоставляет исчерпывающие инструкции по развертыванию: Deployment Options. Имейте в виду, что встроенный сервер Колба (Werkzung) не подходит для производства, как авторы Колба пишут:

While lightweight and easy to use, Flask’s built-in server is not suitable for production as it doesn’t scale well and by default serves only one request at a time.

Использование Apache вы можете перенаправлять все запросы HTTP, используя правило VirtualHost, слушая в 80:

<VirtualHost *:80> 
    ServerName mysite.example.com 
    DocumentRoot /usr/local/apache2/htdocs 
    Redirect /secure https://mysite.example.com/secure 
</VirtualHost> 

Подробнее об этом на Redirect Request to SSL Apache wiki.