従来のPerlコードとApache2.
-
21-12-2019 - |
質問
私は、Perlコードのトンの先史時代のWebサイトを維持しなければなりません。新しいサーバーに移動したら、ファジィを得た:
同じクライアントからの複数の要求がページ上で実行されている(GDで画像を生成する)場合、それらのスクリプトは各変数を上書きし、奇妙な結果をもたらします。
クイック回避策として、ApacheでMaxRequestSperChild= 1を設定します。
要求を分離する方法はありますか?私を助けることができるmod_perlまたはapacheパラメータ?
Apache:
Server version: Apache/2.2.15 (Unix)
Server built: Apr 3 2014 23:56:16
Server's Module Magic Number: 20051115:25
Server loaded: APR 1.3.9, APR-Util 1.3.9
Compiled using: APR 1.3.9, APR-Util 1.3.9
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
.
Perl -V
This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi
.
これの解決策は大幅に感謝されます:)
編集:MOD_PERLで物事を修正するための適切な方法が見つかりませんでしたが、次の回避策が機能します。
- mod_perl を無効にします
- mod_cgi を有効にします
- AddHandler CGIスクリプト.pl
- suexec を無効にします
Suexecが有効になったときに「スクリプトヘッダの早期終了」を与えたので、最後のものが必要でした。
解決
いいえ、「要求を区切る」ためにできることは何もありません。単一のPerlインタプリタプロセスで実行されているすべてのスクリプトは、同じ環境を共有し、その環境が永続的なmod_perlの下にあります。 ModPerl::Registry
を設定するには、(まだ独自のサブルーチンにまだ折り返していない場合)で実行して、名前空間の問題の一部を排除してくださいが、スクリプトが永続的なもので書かれていない場合(*) 'REはまだそれらを少なくともある程度修正する必要があります。
href="http://perl.apache.org/docs/2.0/user/intro/start_fast.html#registry_scripts" rel="nofollow"> http://perl.apache.org/docs/ 2.0 / user / intro / start_fast.html#registry_scripts
スクリプトが、それを使用してすべてのモジュールで共有されているグローバル状態を持つSOAP :: Liteなどの特定のモジュールを使用しているときにトラブルを実行することもできますが、それは多くのRarerの問題です。
いいえ、残念ながら、スクリプトが変更せずにスクリプトがうまく機能するようにするためにできることは何もありません。いくつかは大丈夫かもしれません、他の人はそうではありません。あなたはおそらく別のmod_perlサーバー以外に通常のApache CGIサーバーを設定し、それらを徐々に移行する必要があります。通常のCGIサーバーでパフォーマンスが得られませんが、問題はありません。
(*)これは多くのMOONからメモリからのもので、グローバル変数の設定を避けなければならず、常にmy
を使用して変数を宣言し、要求インタラクションのためにCGIモジュール(またはmod_perl API)を使用してください。それ。