Firewall
如何僅在 localhost 上啟用 nixos 上的 nginx?
我在本地機器上執行 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"; };