人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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で環境変数を参照できるようになるか教えてください。

●質問者: matttsu
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:2.0 Apache CGI httpd エラー
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● しおり
●10ポイント

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

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

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

SetEnv SPECIAL_PATH /foo/bin

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

◎質問者からの返答

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

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

書いていただいた

SetEnv SPECIAL_PATH /foo/bin

PassEnv PATH

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

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

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


2 ● kn1967
●80ポイント ベストアンサー

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


3 ● ココサブ
●10ポイント

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

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

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

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


SetEnv LD_LIBRARY_PATH /usr/local/lib

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ