私は頻繁に使用するさまざまな内部アプリケーションをスケジュールするためにローカルコンピュータでnginxを実行しています。 nginxを使用すると、自分のアプリケーションに簡単なローカルエイリアスを簡単に提供できます。
問題は、このアプリケーションが非常に機密性の高い情報を提供することです。いいえnginxが私のパブリックインターフェイスの1つを受け取るようにしてください。
私の構成ブロックは/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
現在、ngixリスニングポートを設定するNixOS設定オプションはありません。ただし、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を有効にしても、実際にファイアウォールのポートは開かれません。
初期テストでは、ファイアウォールポートを開き、リモートシステムからサービスにアクセスしました。これは、サービスに実際にアクセスできることを確認するための管理されたテストです。その後、ファイアウォールポートを閉じました。サービスには引き続きアクセスできますが、そのコンピュータのブラウザでのみ可能です。後でテストした結果、ポートを閉じるとすぐに他のブラウザがサービスにアクセスできなくなり、最終的に元のブラウザにアクセスできなくなったことがわかりました。