如何在Flask中使用SSL

3 投票
2 回答
12900 浏览
提问于 2025-04-18 00:09

我正在尝试设置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目录。

撰写回答