2012-09-24 37 views
3

我正在研究一個簡單的Perl應用程序,它可以複製另一個Perl應用程序並構建所有必需的Apache配置文件。Apache2從CGI內部重新加載配置

我似乎無法弄清楚的是如何在運行中重新加載apache配置。我知道我可以進行系統調用並在那裏重新加載apache,但這意味着我必須獲得對此應用程序的root權限,這有點嚇人。

有沒有辦法讓apache從CGI容器中重新加載配置文件?

-------------------------附加信息------------------- -----------

我已經做了一些更多的研究,問題是Apache必須以提升特權運行以綁定到端口80.因此,一種解決方案將設置Apache運行另一個端口並通過iptables將該端口轉發到80。 (這可能是最後的手段,但非常混亂的解決方案)。

這是什麼讓我,Apache應該能夠維護其當前的端口綁定並重新檢查其配置文件,我所做的就是添加另一個腳本別名。

有沒有什麼辦法添加一個新的腳本別名與重新加載?

回答

0

對不起,問一個問題,然後不給另外一個人回答的機會,但我想出了一個解決方案,我希望這幫助別人。

我所要做的只是將配置保留在單獨的配置中,不可能以我需要的超出root權限或某些高級端口轉發的方式重新加載(這會使此應用程序的移植性比我想要的小)。

所以Apache似乎只能動態加載的是文件系統。

我所做的是使用了mod_rewrite重定向腳本的請求,並簡單地把它們在/ var /網絡/應用程序的名字/ copyname/cgi-bin目錄/

3

你也有選擇重新加載配置:

/etc/init.d/httpd reload 

apachectl -k graceful 

但不幸的是,那些需要root也。這與正常重啓的不同之處在於當前打開的連接不會中止。副作用是舊的日誌文件不會立即關閉。這意味着如果在日誌輪轉腳本中使用,可能需要大量的延遲才能確保在處理舊日誌文件之前關閉舊日誌文件。

而且,如果用的daemontools運行Apache你可以這樣做:

svc -h /service/apache 
+0

刷新只發送一個SIGHUP父apache的PID。它不必通過幫助程序腳本完成,但它可能應該。 – jordanm

+1

您可以將配置添加到sudoers,以允許您的非特權用戶在沒有密碼的情況下sudo http重新加載。 – RobEarl

+1

類似於「rob ALL = NOPASSWD:/etc/init.d/httpd reload」 – RobEarl