3

Apache を介して CGI スクリプトを実行しようとすると、いくつか問題が発生します。このスクリプトは、ドメイン外で AJAX リクエストを作成できる OpenLayers の proxy.cgi と同じです。このスクリプトは、通常の apache 構成 (SSL なし) を使用してエラーなくスムーズに実行されますが、! SSL を有効にすると、動作がおかしくなり始めます。

最初に、SSL の apache 構成を示します。

NameVirtualHost *:443
<VirtualHost *:443>
    ServerName 172.22.1.37
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCertificateFile /etc/apache2/ca/apache-server.crt
    SSLCertificateKeyFile /etc/apache2/ca/apache-server.key
    SSLCertificateChainFile /etc/apache2/ca/proba.crt
    SSLCACertificateFile /etc/apache2/ca/proba.crt
    AddType application/x-x509-ca-cert .crt
    AddType application/x-pkcs7-crl    .crl
    Alias /mapviewer "/var/www/mapviewer/"
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    AddHandler cgi-script .cgi
    DocumentRoot /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride All 
        Options +ExecCGI -Multiviews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

したがって、SSL は正しくロードされます。他の Web アプリケーションを試してみたところ、それらは https でスムーズに動作するため、問題は proxy.cgi を使用するこのアプリケーションにあります。

奇妙なことに、Apacheを起動すると、最初は問題なく正しく動作しますが、しばらくすると(時間やリクエスト数に依存するかどうかはわかりませんが、テスト後は前者だと思います) JavaScript コードがこの proxy.cgi スクリプトを呼び出すと、リクエストはそこでハングアップし、最終的に「タイムアウト」のために中止されます。

https 経由で cgi スクリプトを実行するために、他のオプションを有効にする必要がありますか? 私が欠けているものはありますか?proxy.cgi コードを配置できますが、正しく動作することが証明されているため、何も関係がないと思います。ここでの問題は、SSL が有効になっていると実行されないことです。

読んでくれてありがとう!

4

2 に答える 2

3

まず第一に、Joseph Myers の提案により、解決策が提供されなかったとしても、解決に向けて私を助けてくれたことに感謝します。ゾンビプロセスについて彼が言ったことは理にかなっており、詳しく見てみると、Apache の起動時に mod_cgid をロードする代わりに、代わりに mod_cgi をロードしていることに気付きました。mod_cgid が (httpd のドキュメントを見た後で) わかっているので、違いは非常に顕著です。

子プロセスをフォークして CGI スクリプトを実行する外部デーモンを作成します。

また、cgiではなくデフォルトのようです。自分がそれを変更したことを覚えていませんが、今では機能しています。

tl;dr、mod_cgi を使用しないでください! 代わりに mod_cgid を使用してください!

于 2013-03-25T09:10:35.380 に答える