flask - 为什么在 0.0.0.0 上运行 Flask 应用程序时会出现 404
问题描述
我正在 AWS EC2 实例(Ubuntu)上测试我的 Flask 应用程序。
主应用:
from sonip.api.factory import create_app
app = create_app()
def main():
app.run(debug=True, threaded=True)
if __name__ == "__main__":
main()
Flask 应用程序的实际设置是在工厂完成的,包括注册blueprint
等。
def create_app():
app = Flask(__name__)
app.config['SERVER_NAME'] = settings.FLASK_SERVER_NAME
app.config['SWAGGER_UI_DOC_EXPANSION'] = settings.RESTPLUS_SWAGGER_UI_DOC_EXPANSION
app.config['RESTPLUS_VALIDATE'] = settings.RESTPLUS_VALIDATE
app.config['RESTPLUS_MASK_SWAGGER'] = settings.RESTPLUS_MASK_SWAGGER
app.config['ERROR_404_HELP'] = settings.RESTPLUS_ERROR_404_HELP
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config["SQLALCHEMY_DATABASE_URI"] = "postgresql://{}:{}@{}:{}/{}".format(
settings.DB_USER,
settings.DB_PASS,
settings.DB_HOST,
settings.DB_PORT,
settings.DB_NAME)
db.init_app(app)
blueprint = Blueprint('api', __name__, url_prefix='/api')
app.register_blueprint(blueprint)
return app
当我运行python application.py
和使用curl -X GET http://localhost:5000/api
时,它会返回正确的 Swagger 页面。但是,如果我尝试通过指定host=0.0.0.0
外部流量来运行应用程序,我会得到 404 相同的请求。
(env) ubuntu@ip-172-31-18-136:~/aae$ python application.py
* Serving Flask app "sonip.api.factory" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://localhost:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 948-062-124
127.0.0.1 - - [16/May/2018 18:07:24] "GET /api/ HTTP/1.1" 200 -
♥(env) ubuntu@ip-172-31-18-136:~/aae$ vi application.py
(env) ubuntu@ip-172-31-18-136:~/aae$ python application.py
* Serving Flask app "sonip.api.factory" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 948-062-124
165.225.34.185 - - [16/May/2018 18:08:28] "GET /api/ HTTP/1.1" 404 -
端口 5000 开放以允许安全组中的所有入站流量。我用几行代码尝试了一个香草 Flask 应用程序,它工作得很好。
app = Flask(__name__)
if __name__ == '__main__':
app.run(debug=True, port=8080, host='0.0.0.0')
这至少意味着 5000 是可以的。会是Blueprint
orSwagger
吗?
解决方案
将主机/端口设置SERVER_NAME
和更改为不同的东西app.run()
曾经是问题的根源。充其量,它的记录不足。
尝试更改settings.FLASK_SERVER_NAME
为0.0.0.0:5000
. 或者,如果您的应用程序想要使用 cookie,请尝试使用something.dev:5000
并将条目添加something.dev
到本地的技巧/etc/hosts
。
推荐阅读
- visual-studio - 在 Github Releases 上将 x86 和 x64 工件部署到 AppVeyor
- electron - 以前的窗口焦点/电子
- c# - 在c#中通过引用传递参数时的地址跟踪
- typescript - 从@ctrl/ngx-codemirror 库中,如何使用 typeScript 和 angular 5 获取 codeMirror 实例
- git - 如何在本地删除 Git 分支?
- sql-server - 将多个 ssis 包合并为一个包
- python - 如何在 Python 中修剪集合的大小
- jquery - Select2“全选”在容器内无法正常工作
- memcached - Google App Engine 柔性环境是否支持开箱即用的会话存储?
- php - Foreach 循环仅执行第一个值并返回,但返回所有值并回显