![如何强制仅从主机名连接到特定端口?](https://linux22.com/image/680245/%E5%A6%82%E4%BD%95%E5%BC%BA%E5%88%B6%E4%BB%85%E4%BB%8E%E4%B8%BB%E6%9C%BA%E5%90%8D%E8%BF%9E%E6%8E%A5%E5%88%B0%E7%89%B9%E5%AE%9A%E7%AB%AF%E5%8F%A3%EF%BC%9F.png)
我在 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; }