我是新的Flask用户,我遇到了问题。我想将所有网址从http重定向到https,但我遇到此错误:
连接已重置
这是我的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)
如果我直接输入地址 https ://192.168.42.186:5000,则可以使用 http 只是它不是
感谢您提前帮助我
答案 0 :(得分:2)
您现在无法使用ssl_context
和Werkzung
(Flask的默认服务器)执行此操作。 2014年提出并拒绝了允许这样做的功能:auto http to https redirect;举例:
这需要运行另一个HTTP服务器。 Werkzeug不具备这一能力,IMO超出范围。 run_simple只应该用于开发。
所以正在发生的是你的Flask应用程序调用下面的run_simple
,传递ssl_context
和其他一些变量。只要您使用ssl_context
,SSLify就不会对您的路由产生任何影响,因为此变量的唯一存在使得Werkzung主机仅使用 https 架构。要从http重定向到https,您需要设置另一台服务器,监听http并重定向到https或迁移到其他更高级的服务器,这样可以轻松实现重定向。
我建议迁移到Apache或gunicorn。 Flask提供有关部署的全面说明:Deployment Options。请记住,Flask(Werkzung)的内置服务器不适合制作,因为Flask的作者写道:
虽然轻巧且易于使用,但Flask的内置服务器却没有 适合生产,因为它不能很好地扩展,并且默认服务 一次只能提出一个请求。
使用Apache,你可以使用VirtualHost规则重定向所有http请求,在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上查看更多内容。