【问题标题】:Why does gunicorn in vagrant need nginx为什么流浪者中的gunicorn需要nginx
【发布时间】:2017-01-06 05:05:12
【问题描述】:

开始一个新项目,并决定尝试使用 Flask 和 Flask-RESTful 将 python 作为我的后端休息服务。我把盒子里的所有东西都弄好了。我可以用 Gunicorn 启动应用程序并在本地卷曲它。

当我尝试从浏览器或 ARC(用于测试休息服务的 chrome 应用程序)或另一个在网络上运行 mvc 客户端的 vagrant box 连接时,连接被拒绝。

我找到了一种方法,我理解 nginx 作为 python 休息服务器上的反向代理,但我不明白需要什么。这似乎是 Gunicorn 的工作还是我错过了什么?

我的流浪文件是这样设置的

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
    config.vm.define "rest" do |rest|
        rest.vm.box = "gbarbieru/xenial"
        #rest.vm.network "forwarded_port", guest: 8000, host: 8000
    end
    config.vm.define "mvc" do |mvc|
        mvc.vm.box = "gbarbieru/xenial"
    end

    # Disable automatic box update checking.
    # config.vm.box_check_update = false

    # Forward ports
    # config.vm.network "forwarded_port", guest: 8000, host: 8000

    # host-only access to the machine using a specific IP.
    # config.vm.network "private_network", ip: "192.168.33.10"

    # Public network which makes the machine appear as another 
    # physical device on your network.
    config.vm.network "public_network"

    # Share an additional folder to the guest VM.
    # config.vm.synced_folder "../data", "/vagrant_data"
end

Flask 应用实际上就是来自 http://flask-restful-cn.readthedocs.io/en/0.3.5/quickstart.html 的示例。

MVC 客户端尚未启动,我只是尝试从中卷曲。

现在在我的本地我有 192.168.1.12 作为其余部分和 192.168.1.13 作为 mvc,并且可以 ping 所有方式来宾/主机主机/来宾和来宾/来宾

【问题讨论】:

    标签: python nginx flask vagrant gunicorn


    【解决方案1】:

    假设您从链接 http://flask-restful-cn.readthedocs.io/en/0.3.5/quickstart.html 中获取简约示例,您应该在 app.run 调用中进行以下更改:app.run(host= '0.0.0.0', debug=True)

    from flask import Flask
    from flask_restful import Resource, Api
    
    app = Flask(__name__)
    api = Api(app)
    
    class HelloWorld(Resource):
        def get(self):
            return {'hello': 'world'}
    
    api.add_resource(HelloWorld, '/')
    
    if __name__ == '__main__':
        app.run(host= '0.0.0.0', debug=True)
    

    这将确保服务器绑定到所有网络接口,并且不仅可以从本地主机服务器访问,而且在 vagrant 的情况下也可以从您的主机访问

    第二个选项是强制服务器在特定主机上运行,​​如 Externally Visible Server 一章下的http://flask.pocoo.org/docs/0.12/quickstart/#a-minimal-application 所述

    如果你运行服务器,你会注意到服务器只是 可以从您自己的计算机访问,而不是从网络中的任何其他计算机访问。 这是默认设置,因为在调试模式下, 应用程序可以在您的计算机上执行任意 Python 代码。

    如果您禁用了调试器或信任网络上的用户, 您只需添加即可使服务器公开可用 --host=0.0.0.0 到命令行:

    flask run --host=0.0.0.0

    这告诉您的操作系统监听 所有公共 IP。

    【讨论】:

    • 谢谢,实际上我在发布这篇文章后不久就偶然发现了 Guincorn。只是好奇 0.0.0.0 或运行反向代理是否有优势>
    • 0.0.0.0 上运行的主要优势主要是您不需要设置反向代理;所以在开发模式下,当我需要开发功能并快速设置时,我会使用最简单的设置,如果我可以避免设置额外的基础设施,那就更好了
    • 最后一点要澄清。那么,什么时候开始生产,最好使用反向代理?
    • 这取决于但通常你会设置一个网络服务器或代理来处理 http 请求并在必要时转发到烧瓶
    • 这不就是 Gunicorn 吗?我习惯了 Apache 并且能够访问虚拟机的地址,所以请原谅任何无知。
    猜你喜欢
    • 2016-12-07
    • 2018-11-04
    • 2013-01-11
    • 1970-01-01
    • 2021-09-12
    • 2012-11-03
    • 2015-12-24
    • 2022-01-26
    • 2014-07-04
    相关资源
    最近更新 更多