问题标签 [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.
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
但这也不起作用。
有人可以帮忙吗?
apache - 将新代码发布到现有 Mojolicious 应用程序时出现间歇性错误
我在使用现有的 Mojolicous 应用程序时遇到问题。我添加了一些新的路由、视图、控制器和模型,并且正在返回数据库结果以使用 Rose::DB::Object ORM 查看。
我今天使用在 Morbo 上运行良好的代码更新了生产版本。但是,在 apache2/plack/psgi mod_perl 配置中,新模型只返回大约 1 分之 5 的查询,有时 10 分之 1 的查询。
我已经消除了一些变量,比如我可以直接查询数据库并且得到我的结果没有问题。旧模型及其查询始终有效。
似乎只有这个新功能是间歇性的。我已将请求范围缩小到一台服务器并重新启动了 apache。但是,现在我不明白为什么问题仍然存在。
我认为这是某种 mod_perl 不稳定的行为,但不知道为什么 apache 重启不能解决它。
任何帮助或想法都会很棒。
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
命令的端口。;)
perl - 如何为具有多个并发连接的 PSGI 应用程序提供服务
如何为 PSGI 应用程序提供许多并发连接?我尝试过基于事件和预分叉的网络服务器,但并发连接的数量似乎受到工作进程数量的限制。我听说例如 Node.js 可以扩展到数千个并行连接,你能在 Perl 中实现类似的连接吗?
这是一个使连接无限打开的示例应用程序。关键不是要有无限的连接,而是要保持连接打开足够长的时间以达到连接限制:
perl - 通过正则表达式挂载 PSGI 应用程序 - 不同的路径 -> 一个应用程序
寻找一种方法,如何PSGI $app
对mount 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
...
apache - Apache/Starman - 如何使用单个虚拟主机实现许多不同的 webapps
我有很多基于框架的CGI
web 应用程序apache2
,它们具有复杂的驱动接口和相应的 perl 后端。jQueryUI
CGI::Application
对于用户来说,它看起来像这样:
- //localsrv.lan/some_report_xls
- //localsrv.lan/some_insert_db
- //localsrv.lan/some_perl_plsql_stuff 等...
现在我想打开那些应用程序psgi
,这很容易,并以某种方式运行它们Apache->ProxyPass/Starman
- 我应该为每个应用程序运行 Starman,并为所有应用程序使用大量端口吗?
- 我应该以某种方式使用映射 url
Plack::App::URLMap
以及如何使用? - 我是否应该从数百个应用程序中创建一个应用程序来使用 Starman 运行它
- 还有另一种方法吗?
perl - 谁对 http://0:port 有误?
Plack 套件通常使用http://0:port
. 例如以下
印刷
但是,LWP::UserAgent
(或一些更深层次的模块)不接受它,例如:
印刷:
但是
印刷
问题是:谁错了?
- 是否
http://0:port
有效,例如 LWP 是“错误的” - 或者它是无效的并且 PSGI 将它用作仅“随机有效”的快捷方式?
perl - 在 Plack 中发送无缓冲响应
我正在创建一个大型 CSV 响应的 Perl 模块的一部分。服务器在 Plack 上运行,我对它远非专家。
目前我正在使用这样的东西来发送响应:
但是,该query_data
函数不是一个快速的函数,并且会检索很多记录。在那里,我只是将每一行连接起来$body
,并且在处理完所有行之后,发送整个响应。
我不喜欢这个有两个明显的原因:首先,它需要大量的 RAM 直到$body
被销毁。其次,在该方法完成工作并实际发送响应之前,用户看不到响应活动$res->body($body)
。
我试图在文档中找到答案,但没有找到我需要的东西。
我也尝试调用$res->body($row_object->to_csv)
我的回调部分,但似乎最终只发送我最后一次调用$res->body
,覆盖所有以前的调用。
有没有办法发送一个 Plack 响应来刷新每一行的内容,所以用户在收集数据时开始实时接收内容,而不必先将所有数据累积到一个可验证的数据中?
提前感谢您的任何评论!
nginx - 如何使用 uWSGI 设置 Perl Dancer 环境(与 nginx 一起使用)
我正在尝试在生产环境中启动 Perl Dancer 应用程序。
我正在调用 uWSGI,如下所示:
当应用程序加载和运行时,它充满了错误,因为根本没有设置环境(甚至没有设置默认的开发环境)。
这些似乎不起作用:
仅供参考,这有效,使用 plackup 和 starman:
我已阅读此内容: http ://uwsgi-docs.readthedocs.org/en/latest/Options.html但似乎没有特定于 Dancer 的环境设置,例如 Python。
想法?提前谢谢!
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.
应用程序的骨架是:
是什么导致了这个问题?