问题标签 [psgi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
2160 浏览

nginx - nginx 重定向和基本身份验证问题

我有一个服务(Plack),它在http://myhost.com:5000上侦听 我想用基本身份验证密码保护对它的访问

当我在 nginx conf 文件中设置服务器指令时,我与 Plack 发生冲突(无法绑定到 0.0.0.0:5000,因为它被 Plack 使用,反之亦然)。所以这让我无处可去。

然后我在 conf 文件中启用了 Basic Auth,其中的 location 指令为:

当 nginx "/" 被命中时,它会将其重定向到端口 5000 并询问用户名/密码。但是我的应用程序依赖于包含端口(http://myhost.com:5000/)的 url 来查找资源,并且端口从请求中被剥离,所以它最终是http://myhost.com我在所有资源/css/images/javascripts 等上都得到了 404。尝试了各种指令,如 port_redirection 等。

我尝试使用以下方式重写 URL:

它得到了想要的结果(http://myhost.com:5000)并且找到了所有资源,但基本身份验证永远不会启动,所以我从来没有收到询问用户名/密码的提示

作为最后一次尝试,它尝试使用直接保护 url

但这也不起作用。

有人可以帮忙吗?

0 投票
1 回答
42 浏览

apache - 将新代码发布到现有 Mojolicious 应用程序时出现间歇性错误

我在使用现有的 Mojolicous 应用程序时遇到问题。我添加了一些新的路由、视图、控制器和模型,并且正在返回数据库结果以使用 Rose::DB::Object ORM 查看。

我今天使用在 Morbo 上运行良好的代码更新了生产版本。但是,在 apache2/plack/psgi mod_perl 配置中,新模型只返回大约 1 分之 5 的查询,有时 10 分之 1 的查询。

我已经消除了一些变量,比如我可以直接查询数据库并且得到我的结果没有问题。旧模型及其查询始终有效。

似乎只有这个新功能是间歇性的。我已将请求范围缩小到一台服务器并重新启动了 apache。但是,现在我不明白为什么问题仍然存在。

我认为这是某种 mod_perl 不稳定的行为,但不知道为什么 apache 重启不能解决它。

任何帮助或想法都会很棒。

0 投票
2 回答
181 浏览

perl - 如何在 app.psgi 中获取有关自身的信息?

拥有任何基于 PSGI 的应用程序,例如以下app.psgi代码段

如何发现有关运行服务器的一些信息?例如,当运行app.psgi为:

将设置并打印$port- 6000。

在里面$app很容易,因为我可以访问$env. 但我想在调用$port 之前$app得到,例如上面的例子在每个请求时打印端口 - 但我想在开始运行$port之前得到一次。$app

编辑

是的,我必须知道例如服务器可以侦听更多端口,并且在请求到达某些端口时定义了确切的端口。

我想获得监听端口。

但是根据评论和回答,这里可能没有针对不同服务器实现(Starman、Twiggy)的任何统一 API 来获取监听端口。

问题背后的真正原因是我想向 Bonjour (Zeroconf) 宣传这些应用程序。(我还不知道如何(还),但有必要知道应用程序正在侦听哪个端口。)

现在我也意识到,将命令本身包装到一些代码中会更容易plackup,例如runserver.pl- 并且会知道我将用来运行plackup命令的端口。;)

0 投票
2 回答
296 浏览

perl - 如何为具有多个并发连接的 PSGI 应用程序提供服务

如何为 PSGI 应用程序提供许多并发连接?我尝试过基于事件和预分叉的网络服务器,但并发连接的数量似乎受到工作进程数量的限制。我听说例如 Node.js 可以扩展到数千个并行连接,你能在 Perl 中实现类似的连接吗?

这是一个使连接无限打开的示例应用程序。关键不是要有无限的连接,而是要保持连接打开足够长的时间以达到连接限制:

0 投票
1 回答
162 浏览

perl - 通过正则表达式挂载 PSGI 应用程序 - 不同的路径 -> 一个应用程序

寻找一种方法,如何PSGI $appmount prefix. 如何mount在这样的场景中?例如,假设我在我的app.psgi

例如,请求匹配

  • /some/path- 希望被处理$someapp(这没关系)
  • /[A-Z]\w+/\w+\.(xxx|yyy|zzz)$- 希望被处理$otherapp
  • 任何其他请求都希望由$defaultapp(也可以)处理

这可能是“很容易” - 但我通过Plack::Builder阅读并没有给出答案。(手册和示例中的每个mount都是strict /path基于...)

编辑:如果这是不可能的,mount是否有可能以某种干净(阅读而不是骇人听闻)的方式解决上述要求?我不需要更改PATH_INFO, 也不需要SCRIPT_NAME(正如 URLMap 所做的那样) - 只需要$otherapp为匹配的请求运行给定的 , 。

编辑2

要更清楚。和$someapp$otherapp已经存在的应用程序。特别是这$otherapp是一个复杂的应用程序,它以自己的方式处理每个请求 - 但请求“属于”的$otherapp内容可以通过正则表达式来描述。

我不能使用,mount /fixed/prefix因为它$otherapp会在运行时创建不同的 url,例如基于它可以创建的用户活动/Abc/xyz.eee和/或/Zzz/uuu.ddd等。因此我不能$otherapp为例如添加前缀:

现在,想要将这个老式的“导入”$otherapp到一个新的基于 PSGI 的服务器上,而且,$defaultapp它将$someapp$otherapp. 这听起来很复杂,但实际上并非如此 - 只需要$otherapp基于请求正则表达式运行,例如 Apache 的SetHandler somehandler *.ext...

0 投票
0 回答
212 浏览

apache - Apache/Starman - 如何使用单个虚拟主机实现许多不同的 webapps

我有很多基于框架的CGIweb 应用程序apache2,它们具有复杂的驱动接口和相应的 perl 后端。jQueryUICGI::Application

对于用户来说,它看起来像这样:

  1. //localsrv.lan/some_report_xls
  2. //localsrv.lan/some_insert_db
  3. //localsrv.lan/some_perl_plsql_stuff 等...

现在我想打开那些应用程序psgi,这很容易,并以某种方式运行它们Apache->ProxyPass/Starman

  • 我应该为每个应用程序运行 Starman,并为所有应用程序使用大量端口吗?
  • 我应该以某种方式使用映射 urlPlack::App::URLMap以及如何使用?
  • 我是否应该从数百个应用程序中创建一个应用程序来使用 Starman 运行它
  • 还有另一种方法吗?
0 投票
2 回答
395 浏览

perl - 谁对 http://0:port 有误?

Plack 套件通常使用http://0:port. 例如以下

印刷

但是,LWP::UserAgent(或一些更深层次的模块)不接受它,例如:

印刷:

但是

印刷

问题是:谁错了?

  • 是否http://0:port有效,例如 LWP 是“错误的”
  • 或者它是无效的并且 PSGI 将它用作仅“随机有效”的快捷方式?
0 投票
3 回答
559 浏览

perl - 在 Plack 中发送无缓冲响应

我正在创建一个大型 CSV 响应的 Perl 模块的一部分。服务器在 Plack 上运行,我对它远非专家。

目前我正在使用这样的东西来发送响应:

但是,该query_data函数不是一个快速的函数,并且会检索很多记录。在那里,我只是将每一行连接起来$body,并且在处理完所有行之后,发送整个响应。

我不喜欢这个有两个明显的原因:首先,它需要大量的 RAM 直到$body被销毁。其次,在该方法完成工作并实际发送响应之前,用户看不到响应活动$res->body($body)

我试图在文档中找到答案,但没有找到我需要的东西。

我也尝试调用$res->body($row_object->to_csv)我的回调部分,但似乎最终只发送我最后一次调用$res->body,覆盖所有以前的调用。

有没有办法发送一个 Plack 响应来刷新每一行的内容,所以用户在收集数据时开始实时接收内容,而不必先将所有数据累积到一个可验证的数据中?

提前感谢您的任何评论!

0 投票
1 回答
388 浏览

nginx - 如何使用 uWSGI 设置 Perl Dancer 环境(与 nginx 一起使用)

我正在尝试在生产环境中启动 Perl Dancer 应用程序。

我正在调用 uWSGI,如下所示:

当应用程序加载和运行时,它充满了错误,因为根本没有设置环境(甚至没有设置默认的开发环境)。

这些似乎不起作用:

仅供参考,这有效,使用 plackup 和 starman:

我已阅读此内容: http ://uwsgi-docs.readthedocs.org/en/latest/Options.html但似乎没有特定于 Dancer 的环境设置,例如 Python。

想法?提前谢谢!

0 投票
1 回答
155 浏览

handler - 为什么“HTML::Mason::PSGIHandler”不能与“Plack::Middleware::Debug::Parameters”一起使用?

一切都很好,直到您发布值并获得:

[uwsgi-perl error] Bad Content-Length: maybe client disconnect? (45 bytes remaining) at /home/user/perl5/lib/perl5/Plack/Middleware/Debug/Parameters.pm line 20.

应用程序的骨架是:

是什么导致了这个问题?