我有使用mpm模块运行Solaris的Apache,它在端口8080上侦听。每隔一段时间,有人会在同一主机上启动一个Tomcat实例。 具有将所有stream量导向Tomcat的作用。 一旦Tomcatclosures,stream量恢复到Apache。 我希望Apache专门绑定此套接字,以便其他进程得到一个错误。 这可能吗?
请注意,这是一个开箱,所以不可能限制谁login,或者运行什么程序。 是的,这是可能的,并且很容易改变Tomcat端口。 问题是这是默认的 tomcat端口。 所以开发者解开Tomcat,启动它,然后我注意到我得到了Tomcat 404错误,而不是Apache内容。 这导致我跟踪开发者,并告诉他们改变他们的默认端口。 理想情况下,Tomcat只会失败。
当Java绑定一个端口时,它将以独占模式绑定它,而另一个进程不能在同一个端口上侦听。 Apache似乎以共享模式绑定端口。 我不认为这将是必需的mpm模块,但它似乎是默认的。 我正在寻找一个编译器选项或configuration选项,将以独占模式绑定端口。
听众并不只是绑定到一个端口,而是绑定到一个地址和一个端口。 可能是apache绑定到0.0.0.0:8080(有时写成*:8080),而tomcat绑定到特定接口上的8080端口。 在这种情况下,两个绑定可以共存,并且特定于接口的绑定优先于通配符绑定。 这可能是发生在你身上的事情。
最简单的解决办法是让apache做一个特定于接口的绑定,而不是做一个通配符绑定(或除此之外)。
简而言之,在你的apacheconfiguration中寻找Listen线。 如果您看到如下一行:
Listen 8080
要么
Listen 0.0.0.0:8080
添加另一行:
Listen 1.2.3.4:8080
1.2.3.4是主机的IP地址。
您可以通过运行以下命令将端口8080转换为特权端口:
ndd -set /dev/tcp tcp_extra_priv_ports_add 8080
这将要求任何想要使用端口8080都拥有net_privaddr权限(您可以将其分配给您的smf(5)服务启动方法或分配给您自己的rbac(5)configuration文件rbac(5) 。
请注意 , ndd命令不会在重新启动后持续存在,因此您需要创build自己的smf(5)服务或使用旧版rc脚本。
你可以打开这个端口来听一些小的应用程序。 Apache启动脚本将杀死该应用程序,并正常启动:))
通常,当Tomcat实例启动或重新启动时,它也将重新启动Apache,这将导致Apache失去先前绑定的任何端口,如果Tomcat首先获取它们。 在这种情况下,您需要编辑tomcat.conf文件以侦听Apache不会使用的端口。 这可能意味着你需要改变你的Apacheconfiguration,所以它会再次正确地使用Tomcat。