我想要达到的结果
实现这个页面是为了满足微信小程序api要求:
- 不能出现ip
- 必须要是https协议
更详细的问题描述
- 使用的是flask框架,现在能通过在宝塔上部署一个直接通过 “http://公网ip:端口号" 访问的页面
- 域名已经解析到公网上,但是通过 ”http://域名:端口号“ 的方式也无法访问页面【会自动转成https协议,威森莫呢❓】
我的思路和尝试过的方法
我有个大概的概念:
- https和http协议不同所以需要在宝塔(或者flask)上整一个ssl的证书
- 宝塔上部署flask和直接运行python3 app.py有区别
- 云服务器教程里说的‘进nginx/conf改配置’和‘【在宝塔界面配置ssl】'应该是两种不同的方法
- 还有的说什么iis配置什么的,我感觉应该没那么复杂
尝试的方法
搜不同关键词总能出来不同的答案,大概试下来有这么几个感觉希望最大的(但是都失败了)
1.在flask里面直接配置ssl_context
- 我看到至少两位答主说可以通过ssl_context这个参数解决,但是很遗憾、
- 我觉得这应该是直接在flask上完成的(也就是跟宝塔面板无关),如果这个方法真的管用,是不是我应该一直保持这个程序在运行状态? 另外,如果我用域名访问它,是不是还要内网穿透什么的
app.run(debug=True, host='0.0.0.0', ssl_context=('your_ssl.pem', 'your_ssl.key'))
2.python+flask子域名访问设置
在方法1的基础上,加上了:
通过”给子域名添加DNS解析 + 子域名ssl证书申请+代码修改“的方法
#coding:utf8
#创建一个子域名
from flask import Blueprint
api = Blueprint('api',__name__,subdomain='api')
# attention1: 原来是app.route('/')
@api.route('/')
def index():
return u'这个是api的首页'
@api.route("/login/")
def login():
return u'我是登录页面'
if __name__="__main__":
app = Flask(__name__)
# attention2:你的以及域名,比如bbaidu.com
app.config['SERVER_NAME'] ='bbaidu.com'
app.run('0.0.0.0', debug=True, port=8100, ssl_context=('your_path/XXXX.pem', 'your_path/XXXX.key'))
[参考博主dyingstraw代码]
一些小问题
是否需要内网穿透
为什么http://域名会自动转为https,能不能在宝塔上实现访问http://域名:端口和IP:端口达到同样的效果
以上