sshine/nginx-nix
GitHub: sshine/nginx-nix
一个以教学为目的的 Nix flake 项目,演示如何通过 overlay 快速覆盖 NixOS 中 nginx 的版本,为安全应急响应提供低阻力的补丁方案模板。
Stars: 0 | Forks: 0
# nginx-nix
## 用法
### 在 NixOS 配置中应用 overlay
将此 flake 添加为输入,并将 `overlays.default` 应用于 nixpkgs。此 overlay 将 `nginxStable` 重定向至 1.30.1,`nginxMainline` 重定向至 1.31.0,以及 `nginx` 重定向至 1.30.1,因此任何已经使用 `pkgs.nginx` 或 `services.nginx` NixOS 模块的内容都会直接获取到修补后的构建版本,无需进行其他更改。
```
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
nginx-nix.url = "github:sshine/nginx-nix";
nginx-nix.inputs.nixpkgs.follows = "nixpkgs";
};
outputs =
{ nixpkgs, nginx-nix, ... }:
{
nixosConfigurations.my-host = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
# your existing configuration
./configuration.nix
# enable the overlay
{ nixpkgs.overlays = [ nginx-nix.overlays.default ]; }
# use the nginx packages as usual
(
{ pkgs, ... }:
{
services.nginx.enable = true;
environment.systemPackages = [ pkgs.nginx ];
}
)
];
};
};
}
```
## 动机
及时应对事件对于系统管理员(DevOps 工程师)至关重要。就 nginx 而言,它作为一款备受瞩目的软件,其修复补丁合并到 NixOS 主线的速度比大多数人注意到该版本发布的时间还要快。我个人注意到这一点是在 2026-05-13 18:42,当时[有人链接到了][hn-changelog][更新日志][ng-changelog],这是在 GitHub 发布之前。但我的应急响应过程是:
1. 访问[搜索 nixpkgs issue tracker 中关于 nginx 1.30/1.31 的内容][gh-nixpkgs]
2. 发现没有针对修复版本的 pull request
3. 意识到快进本地的 nixpkgs 副本需要等很久
4. 发了一条焦急的消息,问是否有人能比我更快完成这件事
5. 完全忽略了修复其实已经**推送到 master** 分支
6. 等了 2 天,开始更新 nixpkgs 并在等待期间制作了这个 flake
7. 才发现 nixpkgs 已经更新了,而这个 flake 是多余的
我希望我的响应过程应该是这样的:
1. 访问[搜索 nixpkgs issue tracker 中关于 nginx 1.30/1.31 的内容][gh-nixpkgs]
2. 发现没有针对修复版本的 pull request
3. 开始更新 nixpkgs 并在等待期间制作这个 flake
4. 发现 nixpkgs 已经更新了,这个 flake 是多余的
我的观点是:为 nixpkgs 贡献代码只花了 5 分钟,制作这个 flake 也只花了 5 分钟。做过一次之后,有了这个 flake 的模板,我可以将时间缩短到 2 分钟。把时间从 5 分钟缩短到 2 分钟很重要吗?完全不是。重要的是要知道阻力很低,这样我就更有动力去快速响应。
标签:Nginx, Nix, Nix Flakes, NixOS, Overlay, Web服务器, 安全响应, 库, 应急响应, 开源, 教育项目, 漏洞修复, 系统管理员, 系统运维, 系统配置, 网络安全培训, 软件打包