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