如何在Flask中使用SSL
我正在尝试设置Flask,让它通过SSL运行,并且把所有的HTTP流量重定向到HTTPS。
目前我使用Apache作为网络服务器,它在80端口上正常处理HTTP流量。但是,当我把80端口的配置移到443端口,并为80端口设置重定向时,重定向是有效的,但Apache却一直显示Apache测试页面,而没有提供Flask应用。错误日志里没有显示任何有用的信息。我唯一看到的错误是Directory index forbidden by Options directive: /var/www/html
。我根本不使用/var/www/html,我知道这主要是针对旧版浏览器的警告。
这是我的Apache虚拟主机设置:
LoadModule wsgi_module modules/mod_wsgi.so
WSGISocketPrefix run/wsgi
NameVirtualHost *:80
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
NameVirtualHost *:443
<VirtualHost *:443>
SSLEngine on
SSLEngine on
SSLCertificateFile <<FILE PATH>>
SSLCertificateKeyFile <<FILE PATH>>
SSLCertificateChainFile <<FILE PATH>>
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
WSGIPassAuthorization On
WSGIDaemonProcess api processes=4 threads=1
WSGIProcessGroup api
WSGIScriptAlias / /usr/local/app/api/current/conf/application.wsgi
AddType text/html .py
<Directory /usr/local/app/api/current/>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
这有什么问题呢?当我把所有的WSGI和目录行复制到80端口,并把443端口的内容移走时,它就能正常工作。
2 个回答
1
看看这个叫做Sslify的东西。使用这个小工具,你的flask应用里的所有流量都会从HTTP自动转到HTTPS。
你只需要在初始化你的flask应用时运行以下代码就可以了:
from flask import Flask
from flask_sslify import SSLify
app = Flask(__name__)
sslify = SSLify(app)
3
这个问题属于超级用户。
顺便说一下,这和Flask没有关系。
你在你的VirtualHost
定义中缺少DocumentRoot
指令。
所以Apache会使用默认的/var/www/html
目录。