Flask-Python重定向到https连接已重置

Pap*_*aye 6 python ssl redirect flask

我是一个新的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)
Run Code Online (Sandbox Code Playgroud)

如果我直接输入地址https://192.168.42.186:5000它可以正常工作,但只能使用http而不是

谢谢你提前帮助我

kra*_*ski 4

现在您不能使用ssl_contextand Werkzung(Flask 的默认服务器)来执行此操作。允许这样做的功能在 2014 年被提出并被拒绝:自动 http 到 https 重定向;引用:

\n\n
\n

这需要运行另一个 HTTP 服务器。Werkzeug 无法做到这一点,而且在我看来,它超出了范围。无论如何,run_simple 应该只用于开发。

\n
\n\n

所以发生的事情是你的 Flask 应用程序run_simple在下面调用,传递ssl_context和一些其他变量。只要您使用 SSLify,就不会影响您的路由ssl_context,因为该变量的单独存在使得 Werkzung 主机仅使用https架构。要从 http 重定向到 https,您需要设置另一个服务器,侦听 http 并重定向到 https,或者迁移到其他更高级的服务器,以便轻松重定向。

\n\n

我建议迁移到 Apache 或 Gunicorn。Flask 提供了有关部署的全面说明:部署选项。请记住,Flask (Werkzung) 的内置服务器不适合生产,正如 Flask 的作者所写:

\n\n
\n

虽然轻量且易于使用,但 Flask\xe2\x80\x99 的内置服务器不适合生产,因为它\xe2\x80\x99 的扩展性不好,并且默认情况下一次仅服务一个请求。

\n
\n\n

使用 Apache,您可以使用 VirtualHost 规则重定向所有 http 请求,监听 80:

\n\n
<VirtualHost *:80>\n   ServerName mysite.example.com\n   DocumentRoot /usr/local/apache2/htdocs\n   Redirect /secure https://mysite.example.com/secure\n</VirtualHost>\n
Run Code Online (Sandbox Code Playgroud)\n\n

有关此内容的更多信息,请参阅将请求重定向到 SSL Apache wiki。

\n