2015-09-28 18 views
5

Sono un nuovo utente di Flask e ho un problema. Voglio reindirizzare tutte url da http a https, ma sto avendo questo errore:Reindirizzamento Flask-Python a https La connessione è stata reimpostata

The connection was reset

Questo è il mio codice Flask:

#! /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) 

Se entro direttamente l'indirizzo https://192.168.42.186:5000 farlo funzionare, ma con http solo i non

Grazie fo mi sta aiutando in anticipo

risposta

1

Non è possibile farlo utilizzando ssl_context e Werkzung (server predefinito di Flask) ora. Una funzionalità per consentire ciò è stata proposta e respinta nel 2014: auto http to https redirect; citando:

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.

Allora, cosa sta succedendo è la vostra applicazione Flask chiama run_simple sotto, passando ssl_context e alcune altre variabili. SSLify non ha alcun impatto sul routing se si utilizza ssl_context, perché la sola presenza di questa variabile rende l'host Werkzung solo utilizzando lo schema https. Per ottenere il reindirizzamento da http a https, è necessario configurare un altro server, ascoltare http e reindirizzare a https o migrare verso un altro server più avanzato che consente facilmente il reindirizzamento.

Raccomando di migrare ad Apache o gunicorn. Flask fornisce istruzioni complete sulla distribuzione: Deployment Options. Tenete a mente che built-in server Flask (Werkzung) non è adatto per la produzione, come autori di Flask scrittura:

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.

Utilizzo di Apache si potrebbe reindirizzare tutte le richieste HTTP usando la regola VirtualHost, l'ascolto a 80:

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

Vedi di più su questo Redirect Request to SSL wiki Apache.

Problemi correlati