python - Flask-Python 重定向到 https 连接被重置

标签 python redirect ssl flask

我是 Flask 的新用户,我遇到了一个问题。我想将所有 url 从 http 重定向到 https,但出现此错误:

The connection was reset

这是我的 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 只有它不是

谢谢你提前帮助我

最佳答案

您现在无法使用 ssl_contextWerkzung(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.

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

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

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,您可以使用 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 维基。

关于python - Flask-Python 重定向到 https 连接被重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32831122/

相关文章:

python - 有没有类似 Lisp 的 SLIME for Python/Django 的东西?

python - Google Analytics Reporting API v4 对结果进行排序

ruby-on-rails-4 - Paypal 集成,用于通过重定向到 paypal 并重定向回应用程序来创建商家帐户

multithreading - 充分利用硬件加速器

PHP CURL "NSS: client certificate not found (nickname not specified)"问题

java - 我可以为客户端和服务器 Java SSL 使用相同的自签名证书吗

python - 方法应将 "self"作为第一个参数 : pylint error for decorator

Python日志记录,如何将信息写入2个单独的

api - YouTube 数据 API OAuth 2.0 - 响应范围参数抛出 403

zend-framework - Zend Controller 操作 : _redirect() vs getHelper ('Redirector' )->gotoUrl()