如何在 nixos 上仅针对本地主机启用 nginx?

如何在 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端口呢?

答案1

目前,没有 NixOS 配置选项来设置 ngix 监听端口。但是你可以逐字添加部分 ngix 配置配置.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";
  };

答案2

因此,事实证明,虽然 nginx 会监听所有接口,但启用 nginx 并不会真正打开防火墙上的端口。

在我最初的测试中,我打开了防火墙端口,然后从远程计算机访问该服务。这是我的控制测试,旨在验证该服务是否真正可访问。然后我关闭了防火墙端口。该服务仍然可以访问,但仅限于该计算机上的浏览器。以后的测试表明,只要我关闭端口,其他浏览器就无法访问该服务,而原来的浏览器最终也无法访问。

相关内容