Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask服务器名称永远不正确_Python_Amazon Web Services_Flask_Subdomain - Fatal编程技术网

Python Flask服务器名称永远不正确

Python Flask服务器名称永远不正确,python,amazon-web-services,flask,subdomain,Python,Amazon Web Services,Flask,Subdomain,我目前正在Amazon的AWS上开发一个Flask应用程序。我正在处理的应用程序有几个组件,我正在处理其中两个组件。我期待着为这些组件设置子域,虽然我有一些麻烦 我想: www.example.com>GoDaddy dashboard.example.com>AWS api.example.com>AWS www子域是一个静态站点,一切正常。我能够设置Route53和GoDaddy,这样dashboard.example.com和api.example.com就可以访问运行Flask应用程

我目前正在Amazon的AWS上开发一个Flask应用程序。我正在处理的应用程序有几个组件,我正在处理其中两个组件。我期待着为这些组件设置子域,虽然我有一些麻烦

我想:

  • www.example.com>GoDaddy
  • dashboard.example.com>AWS
  • api.example.com>AWS
www
子域是一个静态站点,一切正常。我能够设置Route53和GoDaddy,这样dashboard.example.com和api.example.com就可以访问运行Flask应用程序的EC2服务器。我已经确认了这一点,因为当我用浏览器访问域时,我可以看到请求(404ing)

我遇到的问题是Flask希望将
app.config.SERVER\u NAME
设置为服务器名称,该名称也必须与URI匹配。我的EC2实例的服务器名是
EC2-###-##-#35;-#35;-#计算-1.amazonaws.com.

如果我将服务器名设置为该名称,Flask应用程序运行良好,我会得到一个404页面,当我访问dashboard.example.com或api.example.com时,通过查看Flask应用程序的输出来查看请求

要不显示404页面,应将
app.config.SERVER\u NAME
设置为example.com,但如果我这样做,Flask应用程序将不会运行,并且我得到
socket.error:[Errno 99]无法分配请求的地址。

这是我的密码:


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


提前感谢您提供的任何帮助。

我确实发表了评论,但我在测试中成功地再现了错误

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

另外,我认为在我的示例中有一个输入错误,你的意思是
host=app.config['SERVER\u NAME']
,并且没有丢失应用程序或小写的服务器名称


乔纠正了打字错误。谢谢你接电话。