问题标签 [mod-perl]

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 投票
3 回答
1863 浏览

perl - 如何抑制 mod_perl 中的默认 apache 错误文档?

我正在开发一个 RESTful API,并编写了一个处理请求的 mod_perl2 处理程序。

我的处理程序通过设置$r->status($http_code)return $http_code;

一切都很好,除了一个小问题:当我的 http_code 不是 200(例如 404)时,apache 会在我自己生成的响应中附加一个默认的 HTML 错误文档。

例如:

给出:

如何摆脱这个 apache 生成的 HTML?

更新:我的错。我的 mod_perl2 处理程序返回的是 HTTP_* 代码,而不是 Apache2::Const::OK。

0 投票
1 回答
662 浏览

perl - mod_perl 并在子进程中继承 STDIN

我有这个旧的 Perl 脚本,它应该充当基于 HTTP 的客户端和非 HTTP Java 服务器之间的各种代理:客户端将一些数据发布到这个 Perl 脚本,然后脚本会调用 Java 服务器,获取响应并将其返回给客户端。

Perl 部分像这样调用服务器:

然后Java服务器会去:

问题是,当 Perl 脚本通过 CGI 调用时,这工作得很好,但如果 Perl 脚本由 mod_perl(实际上是 mod_perl2)处理,则根本不起作用。显然,Java 部分没有从 Perl 中获取 STDIN(serverData.available() 返回 0),并且 Perl 没有返回 STDOUT。后者可以通过执行 print `java...`(即反引号)而不是系统“java...”来解决,但我不知道如何处理 STDIN。

Perl 脚本本身能够读取 STDIN 中的 POST 数据。我还尝试生成一个测试 Perl 脚本而不是 Java 应用程序,但这也没有获得父脚本的 STDIN。

从描述来看,来自 Apache2::SubProcess 的 spawn_proc_prog 可以解决问题(即将 POST 数据作为 STDIN 传递给子进程并取回子进程的输出),但如果我运行任何东西,它似乎不起作用另一个 Perl 脚本。

有没有办法让子进程继承父脚本的STDIN?我可以在 Perl 脚本中读取流并将其内容作为命令行参数传递,但我认为这会受到命令行长度限制,有时可能会有很多数据(如图片),所以我真的很想弄清楚如何继承流。

0 投票
2 回答
1739 浏览

perl - 如何在 mod_perl 中限制 HTTP POST 请求的大小?

我正在处理一个接受文件上传的页面。理论上,我可以检测到他们发送给我的文件何时过大(通过查看他们响应的 Content-Length),并拒绝接受上传,返回 HTTP 413“Request Entity Too Large”错误。

但是,似乎仅仅这样做是不够的——至少,Firefox 仍会在显示我的错误页面之前继续发送文件的其余部分(这可能需要很长时间)。

HTTP 规范说我:“可以关闭连接以防止客户端继续请求。” 但是,执行“关闭 STDIN”、“关闭 STDIN,0”或其他一些变体似乎都不起作用——Firefox 仍然继续发送文件。

我怀疑,当我的 mod_perl 处理程序关闭连接时,它只是关闭了自身与 Apache 之间的连接;Apache 保持它与客户端之间的连接处于活动状态。有什么方法可以告诉 Apache 关闭连接吗?否则,这似乎是一个很好的 DoS 向量。

欢迎大家提出意见。

0 投票
1 回答
190 浏览

perl - 如何在 apache / mod_perl 页面渲染期间推迟处理?

我有一个 apache2 / mod_perl 网站。在一页上,我需要通过 SOAP 进行一些服务器/服务器通信。

呈现页面不需要此通信的结果(但需要用户输入才能触发此通信)。

SOAP 通信非常慢。

所以我想做的是为用户处理和打印页面,然后在幕后做所有的 SOAP 工作。

实现这一目标的最佳方法是什么?开始一些叉子?将作业写入文件并让 cronjob 拾取它?

谢谢

0 投票
2 回答
1473 浏览

apache2 - 为什么apache mod_perl 进程会变成僵尸?

有时 mod_perl apache 进程在“top”实用程序中被标记为“defunct”,即成为僵尸进程。这是正确的行为吗?我需要担心吗?

我们的 Perl 脚本非常简单,它不会产生任何子进程。僵尸进程很快就消失了。阿帕奇2,Ubuntu。

我们的 apache 配置在这里:apache_config.txt

这是顶部的快照。

这些是我使用的 CPAN 模块

服务器状态记录的 3 个不同的僵尸进程

0 投票
2 回答
168 浏览

perl - 当我在 mod_perl 中注册清理处理程序时,为什么浏览器会挂起?

$r->pool->cleanup_register(\&cleanup);用来在页面被处理并打印到客户端后运行子程序。我希望客户端能够看到完整的页面,并且 Apache 可以继续在后台进行一些需要几秒钟的处理。

但是客户端浏览器会挂起,直到 cleanup sub 返回。有没有办法让 apache在我的所有代码返回之前完成与客户端的连接?

我确信我以前做过这个,但我再也找不到了。

0 投票
4 回答
303 浏览

perl - 我可以在共享主机上使用 Perl 的 Apache2::ASP CPAN 模块吗?

我正在尝试在共享托管环境中使用来自 CPAN 的 Perl 模块(具体来说是AuthCookieDBI.pm )。

我尝试将文件复制到我尝试使用它的目录中,并且按照页面上的说明.pm更新了我的文件,但我的 Apache 日志显示:.htaccessAuthCookieDBI

这似乎是导致错误的行:

根据Apache:ASP FAQ这是因为mod_perl没有安装;我在共享主机上(所以不能做任何需要 root 权限的事情),所以我对此无能为力吗?

0 投票
3 回答
782 浏览

perl - 如何在 mod_perl 中跟踪 CPU 密集型请求?

在 Ubuntu 8.04 上使用 Apache 2.2 和 mod_perl 我在服务器上有几个应用程序。在预分叉模式下使用 Apache。通常事情运行良好,但偶尔我会看到一个 Apache 进程使用 100% 的 CPU。

服务器上有几个拥有自己的 VirtualHosts 的网站,并且有通过 Apache 运行的 SVN 服务器。

我如何追踪哪个应用程序以及该应用程序中的哪些调用产生了高负载?

0 投票
2 回答
776 浏览

apache - Apache mod_perl 处理程序/调度程序将控制权返回给 apache

是否有可能有一个 apache mod_perl 处理程序,它接收所有传入的请求并根据一组规则决定该请求是否是它想要采取的行动,如果不是,则将控制权返回给 apache,它将正常处理请求?

一个用例:

使用 DirectoryIndex 服务 index.html(或类似文件)和 perl 脚本等的默认处理程序的旧站点正在被赋予更新的 url 方案(django/catalyst-ish)。调度程序将有一组 url 映射到基于传入 url 调度的控制器。

然而,棘手的部分是让这个调度程序在与旧站点相同的虚拟主机上的相同命名空间中。想法是逐个重写站点,因为“全部更新”迁移没有机会使用新系统测试站点性能,而且由于站点的庞大规模,它也不可行。

许多问题之一是调度程序现在按预期接收所有 URL,但 DirectoryIndex 和静态内容(主要由不同的主机提供,但不是所有内容)没有正确提供。调度程序为不匹配的 url 返回一个 Apache::Const::DECLINED,但 Apache 不会像往常一样继续为请求提供服务,而是提供默认的错误页面。Apache 似乎没有尝试寻找 /index.html 等。

如何解决?您需要使用内部重定向吗?更改调度程序中的处理程序堆栈?使用一些聪明的指令?上述所有的?根本不可能?

欢迎所有建议!

0 投票
1 回答
1041 浏览

perl - 如何在 mod_perl2 下的 startup.pl 中学习 DOCUMENT_ROOT?

我想在startup.pl中学习DOCUMENT_ROOT,但我能做的最好的就是学习server_root:

这是非常没用的。我可以设置一个环境变量

但如果可能的话,我不喜欢额外的配置。

有没有办法通过其他方式获得 DOCUMENT_ROOT ?