cgiでライブラリへのパスが必要になり環境変数を通さなければならなくなりました。
PATHとかその他いくつか。
調べるとhttpd.confにSetEnvやPassEnvディレクティブを追加すると出来るらしいのですがエラーになります。
ちなみにhttpd.conf上の場所などはいくつか変えてみたりしました。
以下のページのprintenv.cgiを見てみるとディレクティブ設定前後で変わっていないようです。
http://sonic64.com/2004-10-03.html
環境はRedhatLinuxでApacheはApache/2.0.52を使っています。
どのようにすればcgiで環境変数を参照できるようになるか教えてください。
RedhatでApache2.0って事なのでSuEXECが原因でしょう。
SuEXECの持つ機能の一つとして環境変数を変えても無効化する(既定のものに置き換わる)というものがあって
SetEnv等を設定してあってもCGIプログラムには渡らないようになっています。
suEXEC ���ݡ��� - Apache HTTP ������
対処としては
(1)SuEXECを止めてしまう。
(2)SuEXECの起動オプションで必要なPATHを設定してApacheをコンパイルから再構築。
(3)/usr/local/bin:/usr/bin:/binに必要なプログラムを移動する。
さすがに1は公開サーバーでは推奨できませんけど、LAN内の閉じた空間で使うのなら手っ取り早いかもしれません。
一番安全だと思うのは3ですが、どのようなプログラムを使おうとされているのかが不明なので、出来るのかどうか、これまた何とも言えそうにありません。
エラーになるというのは、CGI の話で Apache の話ではないですよね?
ドキュメントの例の通りに設定すれば、できるはずですが…。
http://httpd.apache.org/docs/2.0/mod/mod_env.html#setenv
SetEnv SPECIAL_PATH /foo/bin
サーバー設定ファイルに書いた場合は、サーバーを再起動しましたか?
RedhatでApache2.0って事なのでSuEXECが原因でしょう。
SuEXECの持つ機能の一つとして環境変数を変えても無効化する(既定のものに置き換わる)というものがあって
SetEnv等を設定してあってもCGIプログラムには渡らないようになっています。
suEXEC ���ݡ��� - Apache HTTP ������
対処としては
(1)SuEXECを止めてしまう。
(2)SuEXECの起動オプションで必要なPATHを設定してApacheをコンパイルから再構築。
(3)/usr/local/bin:/usr/bin:/binに必要なプログラムを移動する。
さすがに1は公開サーバーでは推奨できませんけど、LAN内の閉じた空間で使うのなら手っ取り早いかもしれません。
一番安全だと思うのは3ですが、どのようなプログラムを使おうとされているのかが不明なので、出来るのかどうか、これまた何とも言えそうにありません。
ライブラリへのパスだと、PATH環境変数ではなく、
LD_LIBRARY_PATH環境変数のSetEnvが必要になると思います。
以下のような記述をhttpd.confに書き加えて、
サーバの再起動をしてみたらどうでしょうか。
SetEnv LD_LIBRARY_PATH /usr/local/lib
(/usr/local/libは目的のライブラリがあるディレクトリ)
コメントに書いたとおりエラーは無視していただいていいです。
紛らわしくてすいません。
書いていただいた
SetEnv SPECIAL_PATH /foo/bin
も
PassEnv PATH
も書いてみたんですがprintenv.cgiに反映されません。
サーバはapachectl restartはしてみました。
マシン自体の再起動が必要なんでしょうか?