Flask SERVER_NAME从不纠正

时间:2013-08-14 19:20:49

标签: python amazon-web-services flask subdomain

我目前正在研究亚马逊AWS上托管的Flask应用程序。我正在处理的应用程序有几个组件,其中我正在处理两个组件。我想为这些组件设置子域虽然遇到了一些麻烦。

我想:

  • www.example.com> GoDaddy的
  • dashboard.example.com> AWS
  • api.example.com> AWS

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')

提前感谢大家提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

我做了评论,但我设法在测试中完全重现了错误。

您无法绑定到example.com地址,并且本地计算机上未列出IP地址。我可以绑定到mydomain.com,因为它解析为我服务器上的地址。

此外,我认为示例中有一个拼写错误我认为host=app.config['SERVER_NAME']并且没有丢失应用程序或者SERVER_NAME是小写的?