3

別の Perl アプリをコピーし、必要なすべての Apache 構成ファイルをビルドする単純な Perl アプリに取り組んでいます。

私が理解できないように見えるのは、その場でApache構成をリロードする方法です。システム コールを実行してそこで apache をリロードできることはわかっていますが、それは、このアプリへのルート アクセスを取得する必要があることを意味し、それは少し怖いことです。

CGIコンテナ内から構成ファイルをリロードするようにApacheに依頼する方法はありますか?

- - - - - - - - - - - - -追加情報 - - - - - - - - - - - - -------

さらに調査を行ったところ、ポート 80 にバインドするには、Apache を昇格した権限で実行する必要があるという問題がありました。したがって、解決策の 1 つは、Apache を別のポートで実行するように設定し、そのポートを iptables 経由で 80 に転送することです。(これは最後の手段かもしれませんが、非常に厄介な解決策です)。

ここに私が得たものがあります.Apacheは現在のポートバインディングを維持し、構成ファイルを再チェックできるはずです.私がしているのは、別のスクリプトエイリアスを追加することだけです.

リロードせずに新しいスクリプト エイリアスを追加する方法はありますか?

4

2 に答える 2

3

構成をリロードするオプションもあります。

/etc/init.d/httpd reload

また

 apachectl -k graceful

しかし残念ながら、それらrootも必要です。これは、現在開いている接続が中止されないという点で、通常の再起動とは異なります。副作用として、古いログ ファイルがすぐに閉じられないことがあります。これは、ログ ローテーション スクリプトで使用した場合、古いログ ファイルを処理する前に確実に閉じるためにかなりの遅延が必要になる場合があることを意味します。

また、daemontools を使用して Apache を実行している場合は、次の方法でこれを行うことができます。

svc -h /service/apache
于 2012-09-24T05:46:16.193 に答える
0

質問して申し訳ありませんが、他の人に答える機会を与えませんが、解決策を見つけたので、他の人に役立つことを願っています.

私がしなければならなかったのは、構成をそのままにしておくことでした。ルート権限や派手なポート転送なしでは、必要な方法でリロードすることはできません (これにより、このアプリケーションの移植性が思ったより低くなります)。

したがって、Apache が動的にロードしているように見えるのはファイル システムだけです。

私が行ったことは、mod_rewrite を使用してスクリプト リクエストをリダイレクトし、単純に /var/www/appname/copyname/cgi-bin/ に配置することです。

于 2012-09-25T01:39:15.907 に答える