nginx - nginx/starman/dancer Web堆栈的解释

标签 nginx dancer plack starman

我已经进行了一段时间的Web编程,并且对LAMP堆栈非常熟悉。我已经决定尝试使用nginx / starman / dancer堆栈,但对于如何从高层次理解所有部分之间的相互联系,我有些困惑。设置堆栈似乎不像设置LAMP堆栈那样简单,但这可能是因为我不太了解各个部分之间的关​​系。

我知道nginx扮演的角色-轻量级的Web服务器/代理-但我对starman与pgsi,plack和舞者的关系感到困惑。

对于这些部分之间如何相互关联以及为什么每个部分对于获得堆栈设置是必要的(或不必要的),我将进行高层细分。谢谢!

最佳答案

我花了最后一天阅读有关各种组件的信息,我认为我有足够的理解力来回答自己的问题。我大部分的答案都可以在网上的不同地方找到,但希望将所有内容放在一个地方会有所值(value):

  • Nginx:要理解的栈的第一个也是最显而易见的部分是nginx。 Nginx是一种轻量级的Web服务器,可以替代无处不在的Apache Web服务器。 Nginx也可以充当代理服务器。它的使用迅速增长,目前在所有网络域中都支持10%。 Nginx的一个关键优势是它是异步的并且是事件驱动的,而不是创建进程线程来处理每个连接。从理论上讲,这意味着nginx能够处理大量连接而无需使用大量系统资源。
  • PSGI:PSGI是一种协议(protocol)(以将其与协议(protocol)的特定实现(例如Plack)区分开来。据我所知,创建PSGI的主要动机是,首次创建Apache时,没有原生支持使用Perl编写的脚本处理请求。使用mod_cgi将此功能附加到Apache。要测试Perl应用程序,您必须运行整个Web服务器,因为该应用程序在Web服务器中运行。相比之下,PSGI提供了一个协议(protocol),网络服务器可以使用该协议(protocol)与以例如Perl。这样做的好处之一是,独立于Web服务器测试Perl服务器要容易得多。另一个好处是,一旦构建了应用程序服务器,就可以很容易地切换到兼容PSGI的其他Web服务器进行测试,以提供最佳性能。
  • Plack:这是PSGI协议(protocol)的一种特殊实现,它提供了与PSGI兼容的Web服务器和Perl应用程序服务器之间的粘合。 Plack相当于Perl的Ruby's Rack。
  • Starman:基于Perl的Web服务器,与PSGI协议(protocol)兼容。我有一个困惑,就是为什么我想同时使用Starman和Nginx,但值得庆幸的是,这个问题是Stackoverflow上的answered quite well。本质上是,让nginx提供静态文件而不需要perl进程来执行该操作可能会更好,同时还允许perl应用程序服务器在更高的端口上运行。
  • Dancer:Perl的Web应用程序框架。相当于Ruby on Rails的一种。或更准确地说,相当于Sinatra for Ruby(不同之处在于Sinatra是一个极简主义的框架,而Ruby on Rails是一个更全面的Web框架)。作为处理PHP且以前从未真正使用过Web框架的人,我对此与服务堆栈之间的关系感到有些困惑。 Web框架的重点是抽象出Web应用程序中经常执行的常见任务,例如将数据库查询转换为Web应用程序中的对象/数据结构。
  • 安装(在ubuntu上):

  • 须藤apt-get install nginx
    sudo apt-get install build-essential curl
    sudo cpan App::cpanminus
    须藤cpanm Starman
    sudo cpanm Task::Plack
    须藤apt-get install libdancer-perl
  • 使其运行:

  • 光盘
    舞者-mywebapp
    sudo plackup -s Starman -p 5001 -E部署--workers = 10 -a mywebapp / bin / app.pl

    现在,您将拥有一个在端口5001上运行Dancer应用程序的starman服务器。要使nginx向服务器发送流量,您必须修改/etc/nginx/nginx.conf并将类似如下的规则添加到http部分:

    服务器{
    server_name永久投资.com
    听80;

    位置/ css / {
    别名/ home / ubuntu / mywebapp / public / css /;
    到期30天;
    access_log关闭;
    }

    位置 / {
    proxy_pass http:// localhost:5001;
    proxy_set_header X-Real-IP $ remote_addr;
    }

    }

    第一个位置规则指定nginx应该通过从/ home / ubuntu / mywebapp / public / css /获取静态内容来处理/ css目录中的静态内容。第二条位置规则说,到端口80上的Web服务器的流量应发送到Starman服务器进行处理。现在我们只需要启动nginx:

    sudo服务nginx启动

    关于nginx - nginx/starman/dancer Web堆栈的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12127566/

    相关文章:

    docker - 在 docker 中使用 nginx 时出现禁止错误

    perl - 如何将特定消息放入 perl Dancer 服务器的 "response body"

    Perl - Facebook 图形 API

    perl - 如何编写一个在 HTTP 响应发送到客户端后运行的 Plack 中间件?

    perl - 我如何在后台运行 Plack::Runner?

    nginx - Github webhook 的 Jenkins 自动构建不起作用

    php - AWS Redis 与 Nginx 和 PHP + 多连接

    nginx - 来自不同域的 Nginx 后面的 Grafana 在面板上返回 "Origin not allowed"

    perl - Dancer2::Plugin::Redis中 'retry'和 'every'配置参数的意义是什么

    node.js - 用于小型应用程序的 Perl Dancer 或 Node.js