在 Tomcat 下的 Servlet 中重新启动 Apache2.4 6
Restarting Apache2.4 Inside a Servlet Under Tomcat 6
当遇到错误 403 时,我有一个重定向到 Java Web 应用程序的代理。
此应用程序检查用户的凭据:如果用户获得授权,客户端 IP 地址将添加到授权 IP 地址列表中,并包含在 Apache2.4 的 httpd.conf.
因此,将使用以下方式重新启动代理:
synchronized (Runtime.getRuntime()) {
Runtime.getRuntime().exec("...apachectl -k restart").waitFor();
}
这是在 Windows 下使用代理在本地测试的,效果很好;但是当我开始研究 Linux (Ubuntu 14) 时,行为发生了变化,出现了 "The connection was reset" 或 "No data received"(分别是 Firefox,Chrome)之类的错误。
Proxy (Apache 2.4) 和 Web Server (Tomcat) 的进程之间是否存在关系?
事实证明,重新启动 会使代理在重新启动操作后立即重现完全相同的 "pending" 请求。
要考虑 httpd.conf 中的新值,我所要做的就是替换 restart 指令优雅.
synchronized (Runtime.getRuntime()) {
Runtime.getRuntime().exec("...apachectl -k graceful").waitFor();
}
这样,进程不会重新启动,但httpd.conf内的更改会生效,因此不会影响整个机制。
当遇到错误 403 时,我有一个重定向到 Java Web 应用程序的代理。
此应用程序检查用户的凭据:如果用户获得授权,客户端 IP 地址将添加到授权 IP 地址列表中,并包含在 Apache2.4 的 httpd.conf.
因此,将使用以下方式重新启动代理:
synchronized (Runtime.getRuntime()) {
Runtime.getRuntime().exec("...apachectl -k restart").waitFor();
}
这是在 Windows 下使用代理在本地测试的,效果很好;但是当我开始研究 Linux (Ubuntu 14) 时,行为发生了变化,出现了 "The connection was reset" 或 "No data received"(分别是 Firefox,Chrome)之类的错误。
Proxy (Apache 2.4) 和 Web Server (Tomcat) 的进程之间是否存在关系?
事实证明,重新启动 会使代理在重新启动操作后立即重现完全相同的 "pending" 请求。
要考虑 httpd.conf 中的新值,我所要做的就是替换 restart 指令优雅.
synchronized (Runtime.getRuntime()) {
Runtime.getRuntime().exec("...apachectl -k graceful").waitFor();
}
这样,进程不会重新启动,但httpd.conf内的更改会生效,因此不会影响整个机制。