Firewall

如何僅在 localhost 上啟用 nixos 上的 nginx?

  • May 9, 2017

我在本地機器上執行 nginx 來分派給我經常使用的各種內部應用程序。nginx 讓我可以輕鬆地為應用程序提供簡單的本地別名。

問題是應用程序提供了非常敏感的資訊,所以我不想讓 nginx 監聽我的任何公共介面。

我的配置塊/etc/nixos/configuration.nix如下所示:

 networking.firewall = {
   enable = true;
   # allowedTCPPorts = [ 8081 ];
 };

 services.nginx = {
   enable = true;
   recommendedProxySettings = true;
   recommendedTlsSettings = true;
   virtualHosts."localhost" = {
     locations."/wiki".proxyPass = "http://localhost:8000";
     locations."/weblog".proxyPass = "http://localhost:3001";
   };
 };

那麼,問題就變成了,我怎樣才能防火牆埠 80?

因此,事實證明,雖然 nginx 會監聽所有介面,但啟用 nginx 實際上並沒有打開防火牆上的埠。

在我最初的測試中,我打開了防火牆埠,然後從遠端機器訪問了該服務。這是我的控制測試,以驗證該服務是否真正可訪問。然後我關閉了防火牆埠。該服務仍然可以訪問,但只能訪問該電腦上的瀏覽器。未來的測試表明,一旦我關閉了埠,其他瀏覽器就無法訪問該服務,並且原來的瀏覽器最終也失去了訪問權限。

目前,沒有設置 ngix 監聽埠的 NixOS 配置選項。但是您可以使用該選項將部分 ngix 配置逐字添加到configuration.nix 。appendHttpConfig像這樣的東西:

 services.nginx = {
   enable = true;
   recommendedProxySettings = true;
   recommendedTlsSettings = true;
   virtualHosts."localhost" = {
     locations."/wiki".proxyPass = "http://localhost:8000";
     locations."/weblog".proxyPass = "http://localhost:3001";
   };

   appendHttpConfig = "listen 127.0.0.1:80";
 };

引用自:https://unix.stackexchange.com/questions/363254