如何配置Apache实现HTTPS正常访问已部署的Flask应用?
问题根因
当前Apache配置仅在80端口(HTTP协议)的虚拟主机块中配置了mod_wsgi对应的Flask应用转发规则,443端口(HTTPS协议)的虚拟主机块没有同步对应配置,HTTPS请求会直接命中Apache默认站点规则,因此返回默认欢迎页。
修复步骤
- 定位Apache虚拟主机配置目录,常见路径为
/etc/httpd/conf.d/(CentOS/RHEL系列发行版)或/etc/apache2/sites-available/(Debian/Ubuntu系列发行版) - 打开配置了自签名证书的HTTPS虚拟主机配置文件(通常文件名包含ssl、443关键字,例如
example.com-ssl.conf) - 将80端口HTTP虚拟主机中所有和Flask应用相关的mod_wsgi配置,完整复制到
<VirtualHost *:443>配置块内部,和已有的证书配置项保持同级。需要同步的配置项和你HTTP站点里已写的配置保持一致即可,不需要修改参数,参考结构如下:
# WSGI进程配置 WSGIDaemonProcess flaskapp python-home=/你的Flask虚拟环境绝对路径 user=apache group=apache threads=5 # 脚本路由映射 WSGIScriptAlias / /你的Flask项目绝对路径/wsgi.py process-group=flaskapp # 项目目录权限配置 <Directory /你的Flask项目绝对路径> Require all granted </Directory> # 若配置了静态文件映射,需一并复制 Alias /static/ /你的Flask项目绝对路径/static/ <Directory /你的Flask项目绝对路径/static> Require all granted </Directory>
- 配置修改完成后先执行语法校验,避免配置错误导致服务中断:
- CentOS/RHEL系列:执行
httpd -t - Debian/Ubuntu系列:执行
apache2ctl configtest
- CentOS/RHEL系列:执行
- 校验返回
Syntax OK后重启Apache服务让配置生效:- CentOS/RHEL系列:执行
systemctl restart httpd - Debian/Ubuntu系列:执行
systemctl restart apache2
- CentOS/RHEL系列:执行
注意:不要将WSGI相关配置写在
<VirtualHost>块外部,这类全局配置仅会对默认匹配的站点生效,无法同时覆盖HTTP、HTTPS两个独立的虚拟主机。如果后续需要将所有HTTP请求自动跳转至HTTPS,只需在80端口虚拟主机中添加跳转规则即可,不需要重复配置WSGI代理规则。
内容的提问来源于stack exchange,提问作者DG 2626
相关产品推荐
相关产品推荐

