如何配置 com.sun.net.httpserver 只接受来自本地主机的请求?

How to configure com.sun.net.httpserver to accept only requests from localhost?

我正在使用 com.sun.net.httpserver.HttpServer 来处理一些 http 请求。我的 http 服务器运行在映射服务器域名的 nginx 后面,并通过在某个端口将其用作代理 运行 将请求转发到我的服务器。如果他们访问服务器所在的端口 运行,我的 http 服务器将接受所有请求。我想要一种机制,以便服务器只接受来自应该可用的域的请求,这与我在 nginx 中使用的相同。我想如果我可以强制只能由本地主机访问 http 服务器,那将会有所帮助。

实现该目标的最佳方法是什么?

I guess it would help if I could force the http server to be accessable by localhost only.

A Java SE HttpServer 实例1 侦听对其绑定的 IP 地址的请求2.所以将它绑定到一个环回 IP 地址,如下所示:

InetAddress localHost = InetAddress.getLoopbackAddress();
InetSocketAddress sockAddr = new InetSocketAddress(localHost, 80);
HttpServer server = HttpServer.create(sockAddr, 0);

更一般地说,如果您只想接受来自一组给定 IP 地址的请求,一种方法是在您的处理程序中调用 HttpExchange::getRemoteAddress 并在远程地址不是您想要的时采取适当的措施。但请注意,远程地址将成为直接的上游 IP 地址。它可能是您的反向代理,或远程用户使用的某些正向代理。

但是如果你正在寻找可以接受所有请求但只响应针对特定域名的请求的东西(根据传统的 vhosts 文件)我认为你将不得不实施过滤你自己。 HttpServer 旨在成为一个简单的轻量级服务器...而不是一个功能齐全的 Web 容器。


1 - 这仅适用于 JDK 提供的 HTTPServer 类。对于其他人,YMMV。
2 - 除非您绑定到通配符地址 ...