如何强制仅从主机名连接到特定端口?

如何强制仅从主机名连接到特定端口?

我在 nginx 反向代理后面的 Digital Ocean 服务器上运行了一些 dockerized 应用程序,确切地说是这个:https://github.com/jwilder/nginx-proxy。我已将其配置为 app1.domain.com 转到 app1,app2.domain.com 转到 app2,等等。但是,我注意到,如果用户执行 public_ip:port,他们仍然可以连接到我的应用程序,即使对于通过 nginx 配置为需要通过 http 身份验证登录的应用程序也是如此。有没有办法配置 nginx,以便只有主机名才会定向到应用程序,并且拒绝公共 IP 的任何端口?

答案1

取决于您如何配置 nginx。

通常,这两种请求之间的区别在于,一种请求Host设置了 HTTP 标头,另一种请求可能未设置,或者包含 IP(不确定)。因此,您可以根据这一点进行过滤。

下面的可能也可以(厚颜无耻地抄袭自如何阻止设置了错误 Host 标头的请求?):

定义默认服务器

如果您没有明确定义默认服务器,nginx 将隐式使用第一个找到的服务器。因此,只需创建一个服务器块来阻止未知主机:

server {   
  listen 80 default_server;
  return 444;
}

相关内容