高速CGIを介していくつかのスクリプトを実行しているApacheサーバーを実行しようとしていますが、実際に動作させる方法を一生にわかりません。私の問題は特に「エラー500:ヘッダーの前のスクリプト出力の終わり」です。
私はこれについてたくさん読んで、私が見つけることができるすべてのアドバイスに従いましたが、まだ幸運ではありませんでした。私はIOTimeoutとBusyTimeoutと他のすべての種類のFcgidタイムアウトに関する情報を持っていますが、これらは何もしません、私の問題はそれとは関係がないと思います。
新しいLinuxインストールから始めて、次のようにしました。
- インストール
apache
してくださいmod_fcgid
。 /var/www/test
空のファイルとスクリプトを含む新しい空のWebサイトを作成しました。所有者とグループがhttpに変更されたことを確認するために、それに応じて権限を設定しました。$ ls -l /var/www drwxrwxr-x 1 http http 122 Nov 8 16:08 test/ $ ls -l /var/www/test -rw-rw-r-- 1 http http 0 Nov 8 15:29 file01.txt -rw-rw-r-- 1 http http 0 Nov 8 15:29 file02.txt -rw-rw-r-- 1 http http 0 Nov 8 15:29 file03.txt -rwxr-xr-x 1 http http 107 Nov 8 16:08 run.fcgi* $ cat /var/www/test/run.fcgi #!/usr/bin/perl use strict; use warnings; print "Content-type: text/html\n\n"; print "Hello world.\n";
私はこれを次に添付しました
/etc/httpd/conf/httpd.conf
:LoadModule fcgid_module modules/mod_fcgid.so <IfModule fcgid_module> AddHandler fcgid-script .fcgi </IfModule> <VirtualHost *:80> DocumentRoot /var/www/test <Directory /var/www/test> Options +Indexes +ExecCGI Require all granted </Directory> </VirtualHost>
これで、端末でスクリプトを完全に実行できます。次に、に移動すると、期待http://localhost
どおりにディレクトリファイルのリストが表示されますが、スクリプトを開くと上記のエラー500が表示されます。 Apacheのエラーログには次のものが表示されます(不要な部分は切り捨てられます)。
Content-type: text/html
Hello world.
(...) Connection reset by peer (...) mod_fcgid: error reading data from FastCGI server, referer: (...)
(...) End of script output before headers: run.fcgi, referer: (...)
スクリプト出力がエラーログに記録されるのはなぜですか?権限と所有権に関連していると思いますが、どうすればよいかわかりません。これにより、すべてを設定したようです。実行するために私は何ができるか知っていますか?
私はこれらすべてを64ビットArch Linuxシステムで実行しようとしています。
みんなありがとうございます!
答え1
Apache設定はFastCGIを設定するさまざまな方法の1つです。この特定の設定は、すべてのデプロイおよびApache設定スタイルでは機能しない可能性があります。この構成はあなたに適しています。
500エラーは、Apacheがスクリプトが実行中であると考え、コードがログにあるため、Apacheがファイルを見つけたことを示します。しかし、FastCGIは仕える人CGIではなくApacheとの追加通信が必要です。スクリプト。 FastCGIコードはApacheからの要求を待つ必要があります。で、perl
このCGI::Fast
モジュールはこの追加のレイヤーを処理します。
- 質問に元のApache設定を使用してください。
- 次のモジュールがあることを確認してください
perl
。CGI::Fast
FastCGIサーバースクリプトを次のように変更します。
#!/usr/bin/perl use strict; use warnings; use CGI::Fast; while (my $q = CGI::Fast->new) { print "Content-type: text/html\n\n"; print "Hello world.\n"; }
このコードは FastCGI サーバーを構成します。CGI::Fast->new
要求と環境を待機して受信し、FastCGIサーバーの役割を簡単に実行できるようにランタイム環境をapache
設定します。perl
この環境には、CGIコードに必要な重要な情報が含まれています。
引用:
- https://httpd.apache.org/mod_fcgid/
perldoc CGI::Fast
perldoc CGI
答え2
php-cgiコマンドを使用してフルジョブを実行するには、FCGIラッパーが必要な場合があります。仮想ホストに以下を指定します。
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch AddHandler fcgid-script .php AddHandler fcgid-script .php5 FCGIWrapper /home/.../fcgi-bin/php5.fcgi .php FCGIWrapper /home/.../fcgi-bin/php5.fcgi .php5
その後、スクリプトを準備します。/home/.../fcgi-bin/php5.fcgi
#!/bin/bash PHPRC=$PWD/../etc/php5 export PHPRC umask 022 export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS=99999 export PHP_FCGI_MAX_REQUESTS SCRIPT_FILENAME=$PATH_TRANSLATED export SCRIPT_FILENAME exec /usr/bin/php5-cgi