Ubuntu

如何強制僅從主機名連接到特定埠?

  • April 6, 2016

我在 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 的任何埠都被拒絕?

取決於你如何配置 nginx。

一般來說,一種請求和另一種請求的區別在於,一次設置了 HTTPHost標頭,另一次可能沒有設置,或者包含 IP(不確定)。因此,您可以對其進行過濾。

可能以下方法也可以工作(無恥地複制自How can I block requests with the wrong Host header set?):

定義預設伺服器

如果您沒有明確定義預設伺服器,nginx 將隱式使用第一個找到的伺服器。所以,只需創建一個伺服器塊來阻止未知主機:

server {   
  listen 80 default_server;
  return 444;
}

引用自:https://serverfault.com/questions/768628