我目前正在研究亚马逊AWS上托管的Flask应用程序。我正在处理的应用程序有几个组件,其中我正在处理两个组件。我想为这些组件设置子域虽然遇到了一些麻烦。
我想:
www
子域名是一个静态网站,所有内容都很顺利。我能够设置Route53和GoDaddy,以便dashboard.example.com和api.example.com命中我的EC2服务器运行我的Flask应用程序。我已经确认了这一点,因为当我使用浏览器访问域时,我可以看到请求(即404)。
我遇到的问题是Flask希望将app.config.SERVER_NAME
设置为服务器名称,该名称也必须与URI匹配。我的EC2实例的服务器名称是ec2-###-###-###-###.compute-1.amazonaws.com.
如果我将我的服务器名称设置为此,Flask应用程序运行正常,我得到一个404页面,当我获取dashboard.example.com或api时,通过观察Flask应用程序的输出来查看请求.example.com的。
要不显示404页面app.config.SERVER_NAME
应设置为example.com,但如果我这样做,Flask应用程序将无法运行,我得到socket.error: [Errno 99] Cannot assign requested address.
这是我的代码:
from flask import \
Flask, \
request
# my imports
from dashboard import blueprint as dashboard
app = Flask(__name__)
@app.route('/')
def catch():
return request.url
def main():
print('Starting main ...')
app.register_blueprint(dashboard)
if __name__ == '__main__':
main()
app.config['SERVER_NAME'] = 'example.com'
app.run(
host=app.config['server_name'],
port=80,
debug=True,
)
这是我的仪表板模块:
from flask import \
render_template, \
Blueprint,\
Response
blueprint = Blueprint(
'dashboard', __name__,
static_folder='static',
template_folder='templates',
subdomain='dashboard',)
@blueprint.route('/', methods=['GET'])
def _():
return render_template('index.html')
@blueprint.route('/js/')
def _js(path):
print('js : %s' % path)
with blueprint.open_resource('static/js/' + path, mode='r') as f:
content = f.read()
return Response(content, mimetype='text/javascript')
@blueprint.route('/css/')
def _css(path):
print('css : %s' % path)
with blueprint.open_resource('static/css/' + path, mode='r') as f:
content = f.read()
return Response(content, mimetype='text/css')
提前感谢大家提供的任何帮助。
答案 0 :(得分:1)
我做了评论,但我设法在测试中完全重现了错误。
您无法绑定到example.com地址,并且本地计算机上未列出IP地址。我可以绑定到mydomain.com,因为它解析为我服务器上的地址。
此外,我认为示例中有一个拼写错误我认为host=app.config['SERVER_NAME']
并且没有丢失应用程序或者SERVER_NAME是小写的?
乔