Apacheのcgiへの環境変数の設定について教えてください。

cgiでライブラリへのパスが必要になり環境変数を通さなければならなくなりました。
PATHとかその他いくつか。
調べるとhttpd.confにSetEnvやPassEnvディレクティブを追加すると出来るらしいのですがエラーになります。
ちなみにhttpd.conf上の場所などはいくつか変えてみたりしました。
以下のページのprintenv.cgiを見てみるとディレクティブ設定前後で変わっていないようです。
http://sonic64.com/2004-10-03.html
環境はRedhatLinuxでApacheはApache/2.0.52を使っています。
どのようにすればcgiで環境変数を参照できるようになるか教えてください。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/07/18 09:21:55
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kn1967 No.2

回答回数2915ベストアンサー獲得回数301

ポイント80pt

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ですが、どのようなプログラムを使おうとされているのかが不明なので、出来るのかどうか、これまた何とも言えそうにありません。

その他の回答2件)

id:Bookmarker No.1

回答回数191ベストアンサー獲得回数34

ポイント10pt

エラーになるというのは、CGI の話で Apache の話ではないですよね?

ドキュメントの例の通りに設定すれば、できるはずですが…。

http://httpd.apache.org/docs/2.0/mod/mod_env.html#setenv

SetEnv SPECIAL_PATH /foo/bin

サーバー設定ファイルに書いた場合は、サーバーを再起動しましたか?

id:matttsu

コメントに書いたとおりエラーは無視していただいていいです。

紛らわしくてすいません。

書いていただいた

SetEnv SPECIAL_PATH /foo/bin

PassEnv PATH

も書いてみたんですがprintenv.cgiに反映されません。

サーバはapachectl restartはしてみました。

マシン自体の再起動が必要なんでしょうか?

2007/07/17 22:43:14
id:kn1967 No.2

回答回数2915ベストアンサー獲得回数301ここでベストアンサー

ポイント80pt

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ですが、どのようなプログラムを使おうとされているのかが不明なので、出来るのかどうか、これまた何とも言えそうにありません。

id:YasuyukiMiura No.3

回答回数33ベストアンサー獲得回数7

ポイント10pt

ライブラリへのパスだと、PATH環境変数ではなく、

LD_LIBRARY_PATH環境変数のSetEnvが必要になると思います。

以下のような記述をhttpd.confに書き加えて、

サーバの再起動をしてみたらどうでしょうか。


SetEnv LD_LIBRARY_PATH /usr/local/lib

(/usr/local/libは目的のライブラリがあるディレクトリ)

  • id:ttamo
    「エラーになります」のエラーの内容とか、実際の httpd.conf を見せると、より早く解決すると思いますよ。
  • id:matttsu
    全て書くと長くなって要点が長くなると思ったので。
    odbcなどのエラーなので直接はパスがどうのとかではないのです。
    この際エラーの方は無視してprintenv.cgiに何故PATHが反映されないかをわかれば教えていただければと思います。
  • id:Bookmarker
    > マシン自体の再起動が必要なんでしょうか?

    不要です。Apache の再起動だけで良いです。

    > サーバはapachectl restartはしてみました。

    ここで、エラーメッセージは出てませんか?
  • id:matttsu
    でてないですね…。
    書く位置もあまり関係なさそうなディレクティブなんですが…。
    一応、普通のとことDirectoryの中とかいろいろ試したんですが。
  • id:matttsu
    まさしくkn1967さんの言うとおりでした。
    回答いただいた内容を検討してみます。
    他の方々も含めありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません