問題タブ [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.
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 ハンドラは、Apache2::Const::OK ではなく HTTP_* コードを返していました。
perl - mod_perl と子プロセスでの STDIN の継承
私は、HTTP ベースのクライアントと非 HTTP Java サーバーの間である種のプロキシとして機能するはずのこの古い Perl スクリプトを持っています。クライアントはこの Perl スクリプトにデータを POST し、スクリプトは Java サーバーを呼び出して、応答してクライアントに返します。
Perl 部分は、次のようにサーバーを呼び出します。
そして、Javaサーバーは次のようになります。
問題は、Perl スクリプトが CGI 経由で呼び出された場合は問題なく動作しますが、Perl スクリプトが mod_perl (実際には mod_perl2) によって処理される場合はまったく動作しません。どうやら Java 部分は Perl から STDIN を取得せず (serverData.available() は 0 を返します)、Perl は STDOUT を取得しません。後者は、システム "java..." の代わりに print `java...` (つまり、バッククォート) を実行することで解決できますが、STDIN についてはどうすればよいかわかりません。
Perl スクリプト自体は、POST されたデータを STDIN で読み取ることができます。また、Java アプリケーションの代わりにテスト Perl スクリプトを生成しようとしましたが、親スクリプトの STDIN も取得しません。
説明から判断すると、Apache2::SubProcess の spawn_proc_prog はトリックを実行できます (つまり、POST データを STDIN として子プロセスに渡し、子プロセスの出力を取得します)。別の Perl スクリプト。
子プロセスに親スクリプトの STDIN を継承させる方法はありますか? Perl スクリプトでストリームを読み取り、その内容をコマンド ライン パラメーターとして渡すことができますが、これはコマンド ラインの長さ制限の対象になると思います。そのため、ストリームを継承する方法を本当に理解したいと思います。
perl - mod_perlでHTTPPOSTリクエストのサイズを制限するにはどうすればよいですか?
ファイルのアップロードを受け入れるページで作業しています。理論的には、送信されたファイルが大きすぎる場合は(応答のContent-Lengthを確認することで)検出でき、アップロードの受け入れを拒否して、HTTP413の「RequestEntityTooLarge」エラーを返します。
ただし、それだけでは不十分なようです。少なくともFirefoxは、エラーページが表示される前に、ファイルの残りの部分を送信し続けます(これには長い時間がかかる可能性があります)。
HTTP仕様では、「クライアントがリクエストを続行できないように、接続を閉じることができます」と記載されています。ただし、「STDINを閉じる」、「STDINをシャットダウンする、0」、またはその変形のいずれかを実行しても、うまくいかないようです。Firefoxは引き続きファイルを送信します。
私のmod_perlハンドラーが接続を閉じるとき、それはそれ自体とApacheの間の接続を閉じているだけだと思います。Apacheは、Apacheとクライアント間の接続を維持します。Apacheに接続をシャットダウンするように指示する方法はありますか?そうでなければ、これは素晴らしいDoSベクトルのようです。
任意の提案を歓迎します。
perl - Apache / mod_perlページのレンダリング中に処理を延期するにはどうすればよいですか?
私はapache2/mod_perlWebサイトを持っています。1つのページで、SOAPを介してサーバー/サーバー通信を行う必要があります。
この通信の結果は、ページのレンダリングには必要ありません(ただし、この通信をトリガーするにはユーザー入力が必要です)。
SOAP通信は非常に遅いです。
ですから、私がやりたいのは、ユーザーのためにページを処理して印刷し、その後、すべてのSOAP処理をバックグラウンドで実行することです。
これを達成するための最良の方法は何ですか?フォークを始めますか?ジョブをファイルに書き込み、cronジョブにそれを取得させますか?
ありがとう
apache2 - apache mod_perl プロセスがゾンビになるのはなぜですか?
mod_perl apache プロセスが "top" ユーティリティで "defunct" とマークされることがあります。つまり、ゾンビ プロセスになります。それは正しい行動ですか?私はそれについて心配する必要がありますか?
私たちの Perl スクリプトは非常に単純で、子プロセスを生成しません。ゾンビ プロセスはすぐに消えます。Apache2、Ubuntu。
私たちの apache 設定はここにあります: apache_config.txt
これがトップのスナップショットです。
これらは私が使用するCPANモジュールです
server-status によってログに記録された 3 つの異なるゾンビ プロセス
perl - 共有ホスティングで Perl の Apache2::ASP CPAN モジュールを使用できますか?
共有ホスティング環境でCPAN の Perl モジュール (具体的にはAuthCookieDBI.pm ) を使用しようとしています。
.pm
ファイルを使用しようとしているディレクトリにコピーしようとしましたが.htaccess
、ページの指示に従ってファイルを更新しましたAuthCookieDBI
が、Apache ログには次のように表示されます。
これはエラーの原因となる行のようです:
Apache:ASP FAQによると、これは がmod_perl
インストールされていないために発生します。私は共有ホスティングを使用しています (そのため、root 権限が必要な操作はできません)。これについて私にできることはありますか?
perl - mod_perl で CPU 集中型のリクエストを追跡するにはどうすればよいですか?
Ubuntu 8.04 で Apache 2.2 と mod_perl を使用して、サーバー上にいくつかのアプリケーションを持っています。pre-forking モードでの Apache の使用。通常は問題なく動作していますが、たまに Apache プロセスの 1 つが CPU を 100% 使用しているのを見かけます。
サーバーには独自の VirtualHosts を持つ Web サイトがいくつかあり、Apache 経由で実行されている SVN サーバーがあります。
どのアプリケーションと、そのアプリケーションのどの呼び出しが高負荷を生成しているかを追跡するにはどうすればよいですか?
apache - Apachemod_perlハンドラー/ディスパッチャーが制御をapacheに返します
すべての着信リクエストを受信し、このリクエストが処理したいものであるかどうかを一連のルールに基づいて決定し、そうでない場合は、通常どおりリクエストを処理するapacheに制御を戻すapache mod_perlハンドラーを使用することは可能ですか?
ユースケース:
index.html(または同様のもの)を提供するためにDirectoryIndexを使用し、perlスクリプトなどにデフォルトのハンドラーを使用するレガシーサイトには、新しくなったurlスキーム(django / catalyst-ish)が与えられています。ディスパッチャーには、着信URLに基づいてディスパッチされるコントローラーにマップされた一連のURLがあります。
ただし、注意が必要なのは、このディスパッチャーを古いサイトと同じ仮想ホストの同じ名前空間内に配置することです。「すべて更新」の移行では、新しいシステムでサイトのパフォーマンスをテストする機会がなく、サイトのサイズが非常に大きいため実行できないため、サイトを1つずつ書き直すことを考えています。
多くの問題の1つは、ディスパッチャがすべてのURLを期待どおりに受信するようになりましたが、DirectoryIndexと静的コンテンツ(ほとんどが別のホストによって提供されますが、すべてではありません)が適切に提供されないことです。ディスパッチャは、一致しないURLに対してApache :: Const :: DECLINEDを返しますが、Apacheは通常どおりにリクエストを処理し続けず、代わりにデフォルトのエラーページを表示します。Apacheは/index.htmlなどを検索しようとしないようです。
これはどのように解決できますか?内部リダイレクトを使用する必要がありますか?ディスパッチャのハンドラスタックを変更しますか?いくつかの巧妙なディレクティブを使用しますか?上記のすべて?まったく不可能ですか?
すべての提案は大歓迎です!
perl - mod_perl2 の startup.pl で DOCUMENT_ROOT を学習するにはどうすればよいですか?
startup.pl で DOCUMENT_ROOT を学びたいのですが、私にできる最善の方法は、server_root を学ぶことです。
これはまったく役に立たない。環境変数を設定できます
しかし、可能であれば、余分な構成は好きではありません。
他の方法で DOCUMENT_ROOT を取得する方法はありますか?