- 开发工具
- 前端
【免费下载链接】nginxconfig.io
⚙️ NGINX config generator on steroids 💉
nginxconfig.io 是一个开源的 NGINX 配置生成工具,用户只需在 Web 界面中按需勾选 HTTPS、PHP、反向代理、性能优化等选项,即可一键生成可直接用于生产环境的完整 NGINX 配置(含 Dockerfile / docker-compose.yaml 扩展)。本文将以本仓库的 README.md 为主线,结合 配置生成核心源码 与各类 conf 模板实现,系统讲解该工具的功能矩阵、生成流程、配置结构,以及如何在本机拉取源码进行二次开发,帮助你彻底掌握并复用这套"可编程的 NGINX 配置管线"。
一、为什么需要"生成器":NGINX 的能力与配置成本
NGINX 远不止是一个 Web 服务器。正如 README 所强调的,它之所以被广泛采用,主要基于以下特性:
- 低内存占用:事件驱动模型下,单进程可服务海量连接;
- 高并发:异步、非阻塞的 I/O 架构;
- 异步事件驱动架构:这是 NGINX 高性能的根基;
- 负载均衡:内置 upstream 分组与多种调度策略;
- 反向代理:可作为 HTTP/TCP/UDP 代理网关;
- 带缓存的 FastCGI 支持(PHP):为 PHP-FPM 提供 fastcgi 缓存通道;
- 惊人的静态文件处理速度:
sendfile、tcp_nopush等指令的合理组合; - 支持 SNI 的 TLS/SSL:同 IP 多证书共享。
特性众多,对应的配置指令自然也十分繁杂。README 给出的建议是:要么直接钻研官方 NGINX 文档,要么使用本工具——通过交互式界面实时观察"输入(勾选/填写的选项)如何影响输出(生成的配置)",为你的具体使用场景生成最合适的配置,同时仍可并行查阅官方文档。这正是 nginxconfig.io 的核心价值:把文档知识固化成可执行的生成逻辑。
二、功能全景:一次勾选,覆盖生产环境九成需求
README 中列出的功能清单,正是生成器内部domains + global两级配置模型的对外映射。完整功能包括:
| 功能类别 | 说明 | 对应生成模块 |
|---|---|---|
| HTTPS / HTTP/2 / HTTP/3 | 自动生成listen 443 ssl http2(可选 http3、reuseport) | website.conf.js |
| IPv6 | 自动追加[::]:80/443监听块 | 同上 |
| Certbot / Let's Encrypt | 自动生成证书路径与ssl_trusted_certificate,并生成 HTTP 301 跳转 | letsencrypt.conf.js |
| HSTS | 输出Strict-Transport-Security(可含 includeSubDomains / preload) | security.conf.js |
| 安全响应头 | X-XSS-Protection、nosniff、Referrer-Policy、CSP、Permissions-Policy | 同上 |
| SSL Profiles | 按 Mozilla/OWASP 建议输出ssl_protocols、ssl_ciphers、ssl_prefer_server_ciphers | nginx.conf.js 调用 ssl_profiles.js |
| OCSP 解析器 | 可选 Cloudflare / Google / OpenDNS / Quad9 / Verisign 的 DNS,输出resolver ... valid=60s | 同上 |
| 缓存 / gzip / brotli | 静态资源expires策略、gzip/brotli 压缩与 MIME 类型表 | general.conf.js |
| Fallback 路由 | try_files回退到 index.html / index.php | website.conf.js |
| 反向代理 | proxy_pass与 WebSocket 升级、Forwarded 头透传 | proxy.conf.js |
| www / non-www 重定向 | 301 跳转 server 块自动生成 | website.conf.js |
| CDN 子域 | 生成cdn.example.com静态资源专用 server(含 CORS 与 30d 缓存) | 同上 |
| PHP | TCP / Unix socket 双通道,支持 WordPress / Drupal / Magento / Joomla 专属规则 | php_fastcgi.conf.js 及 wordpress.conf.js 等 |
| Node.js / Python | Node.js 走反向代理;Python 走 uWSGI,支持 Django media/static 别名 | python_uwsgi.conf.js |
| Docker 扩展 | 一键产出Dockerfile与docker-compose.yaml | docker.js、dockerCompose.yaml.js |
2.1 生成文件清单:一个入口,多文件输出
从 生成器总入口 可以看到,一次生成会按配置产出以下文件:
nginx.conf:主配置,始终生成(对应 nginx.conf.js);Dockerfile/docker-compose.yaml:仅当开启 Docker 扩展时生成;- 模块化结构(默认推荐):为每个域名生成
sites-available/<domain>.conf,并在nginxconfig.io/目录下按需生成letsencrypt.conf、security.conf、general.conf、php_fastcgi.conf、python_uwsgi.conf、proxy.conf、drupal.conf、magento.conf、joomla.conf以及<domain>.wordpress.conf; - 单文件结构(关闭模块化):所有 server 块直接内联进
nginx.conf; nginxconfig.txt:记录当前配置的可分享链接(见下文 3.4)。
这种设计意味着生成结果不是一段"死配置",而是一套带目录结构与注释的工程化产物,可直接include到 NGINX 主配置中。
三、从界面到 conf 的源码级流水线
3.1 应用挂载:Vue 3 + vue-i18n
前端入口 mount.js 采用 Vue 3createApp挂载App组件,并通过getI18n()异步加载国际化语言包后再渲染——仓库 i18n 目录 内置了 en、de、zh-cn、zh-tw、ja、fr、es、ru、pl、fa、pt-br 等多语言模板,每个语言包都包含 domain_sections、global_sections、setup_sections 等与界面分区一一对应的翻译键。
3.2 数据模型:domains × global
生成逻辑的入参是(domains, global)两个对象:
- global:全局级配置,涵盖 nginx 进程、安全、日志、性能、HTTPS、工具、Docker 等分组;
- domains:每个域名的 server 级配置,涵盖 server 基础信息、路由、PHP、Python、反向代理、restrict(请求方法限制)、onion(洋葱服务)、logging 等分组。
每个配置项在界面侧都有对应表单控件,最终通过*.computed字段(如global.security.serverTokens.computed)驱动生成器分支逻辑——从源码看,几乎所有if (xxx.computed)判断都对应界面上的一个开关,这正是"输入影响输出"的直接体现。
3.3 渲染器:to_conf与 KV 结构
各 conf 生成器返回的是KV 数组/嵌套对象(允许同 key 重复出现,如多个listen、add_header),随后交由 to_conf.js 递归渲染为带缩进、注释与分号的最终 NGINX 配置文本。该渲染器还负责:
- 以最长 key 对齐指令后的空格(
longestKey); - 对
{块递归缩进 4 空格; - 通过正则清理多余空行、统一注释前后空行、合并空块。
因此,新增一个配置项 = 在界面加控件 + 在对应 conf 生成器加 KV + 复用渲染器,扩展成本极低。
3.4 分享链接:nginxconfig.txt的秘密
生成器最后调用 share_query.js,将domains与global经exportData序列化后,用qs.stringify(..., { allowDots: true })生成形如?xxx.yyy=zzz的查询串(超过 1000 字符时改用#锚点),写入nginxconfig.txt。复制该链接即可完整复现整套配置,这为排障、团队协作与回归测试提供了极大的便利。
四、关键配置模板深度拆解
4.1 主配置 nginx.conf:性能与安全基线
nginx.conf.js 生成的nginx.conf包含:
- 进程与事件:
worker_processes、worker_rlimit_nofile 65535、events { multi_accept on; worker_connections 65535; }; - HTTP 基线:
charset utf-8、sendfile on、tcp_nopush on、tcp_nodelay on、client_max_body_size(以 M 为单位拼接); - 按需关闭指纹:未开启 server_tokens 时输出
server_tokens off,未开启 log_not_found 时输出log_not_found off; - 日志:默认
access_log off,error_log 路径与级别可配;开启 Cloudflare 集成时,动态拼接log_format cloudflare '...',可选追加$http_cf_ray、$http_cf_connecting_ip、$http_x_forwarded_for、$http_cf_ipcountry等字段; - 限流:开启
limit_req时输出limit_req_zone $binary_remote_addr zone=login:10m rate=10r/m与limit_req_log_level warn; - SSL 全局段:任一域名开启 HTTPS 后输出
ssl_session_timeout 1d、ssl_session_cache shared:SSL:10m、ssl_session_tickets off、ssl_stapling on、ssl_stapling_verify on,并按所选 SSL Profile 输出协议/加密套件,以及按需的ssl_dhparam路径;OCSP 解析器按所选 DNS 服务商拼接resolver 1.1.1.1 1.0.0.1 ... valid=60s; - 反向代理预置:开启反向代理时,自动生成
map $http_upgrade $connection_upgrade、$proxy_forwarded_elem、$proxy_add_forwarded三张 map,支撑 WebSocket 升级与 RFC 7239 Forwarded 头透传。
4.2 站点配置 website.conf:一个域名一套完整 server
website.conf.js 是单域名的核心组装器,负责:
- listen 组合:根据 HTTPS 开关、HTTP/2、HTTP/3、IPv6、
reuseport(用ipPortPairs去重避免同端口重复启用)生成listen 443 ssl http2 reuseport等; - server_name 与 root:支持 www 子域、
$base变量与 documentRoot 拼接;PHP/Django 场景下set $base以支持 open_basedir 等路径运算; - HSTS 去重:当所有域名 HSTS 设置一致时提升到公共 security.conf(见
commonHsts工具),避免重复头; - 请求方法限制:按 restrict 分组输出
if ($request_method !~ ^(GET|POST|...)$) { return '405'; }; - PHP 处理:生成
location ~ \.php$(可选 legacy 路由[^/]\.php(/|$)),支持 fastcgi_pass 走 Unix socket 或 TCP、可选 backup 服务器(自动生成upstream块); - CDN 子域:生成
cdn.<domain>server,仅放行 assets/fonts/svg/images/audio/video/docs 等扩展名(来源 types_extensions.js),追加Access-Control-Allow-Origin "*"与Cache-Control "public"、expires 30d,其余路径deny all; - 重定向编排:自动生成 subdomains redirect、non-www/www 归一化、HTTP→HTTPS 301 等多个 server 块,且全部复用同一
ipPortPairs去重。
4.3 PHP FastCGI:安全与兼容并重
php_fastcgi.conf.js 生成的 location 内指令包括:
- 旧式路由时启用
fastcgi_split_path_info与PATH_INFO; try_files $fastcgi_script_name =404杜绝任意 PHP 执行;include fastcgi_params、fastcgi_index index.php、fastcgi_buffers 8 16k、fastcgi_buffer_size 32k;- 参数加固:
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name与PHP_ADMIN_VALUE "open_basedir=$base/:/usr/lib/php/:/tmp/",从配置层面限制 PHP 可访问目录。
4.4 安全与性能:security.conf / general.conf
- security.conf.js:输出安全头四件套(X-XSS-Protection、X-Content-Type-Options、Referrer-Policy、可选 CSP / Permissions-Policy)、屏蔽
.开头文件(放行/.well-known)、可选security.txt301 重定向; - general.conf.js:favicon/robots 404 静默、可选 HTML 禁用缓存、按 assets/media/svg/fonts 分别或合并设置
expires、gzip/brotli 压缩(gzip_comp_level 6,类型表取自gzipTypes)。
4.5 Docker 扩展:两行 Dockerfile 即开即用
开启 Docker 扩展后:
- docker.js 输出
FROM nginx:latest\nCOPY . /etc/nginx/——生成的所有配置复制进镜像即完成部署; - dockerCompose.yaml.js 输出 version 3.3 的
docker-compose.yaml,services 下以当前目录为 build context 构建 nginx 服务。
五、本地开发:克隆、安装、运行与构建
README 提供了完整的本地开发流程,结合 package.json 的 scripts 可进一步理解每一步的作用:
# 1. 克隆仓库 git clone https://github.com/digitalocean/nginxconfig.io.git # 2. 安装 NPM 依赖(按 package-lock.json 精确还原) npm ci # 3. 启动开发服务器(含文件监听,自动热更新) npm run dev启动后打开http://localhost:8080即可看到生成器界面。npm run dev实际会先执行build:template(do-vue 模板编译 + build/template.js 生成 i18n 语言索引)与build:prism(语法高亮捆绑),再通过vue-cli-service serve src/nginxconfig/mount.js提供开发服务。
其余常用命令:
# 4. 代码质量检查:prettier 格式化 + eslint + stylelint + i18n 语言包校验 + jest 单测 npm test # 5. 生产构建(输出到 dist 目录) npm run buildnpm run build依次执行build:clean(清空 dist)、build:template、build:prism、build:static(拷贝 src/static 静态资源)与build:tool(vue-cli 构建主入口)。仓库要求 Node.js 20.9.0(见 package.jsonengines字段),项目采用 ES Modules("type": "module")。功能正确性由 test 目录 中的 jest 测试保障,其中testBrowserLanguage.js覆盖浏览器语言识别逻辑。
六、技术栈与周边生态
README 明确列出的三大构建依赖:
- Vue.js:模板处理与应用生成(当前仓库为 Vue 3 + vue-i18n);
- Bulma:基础样式,由 do-bulma 定制(见 package.json 依赖);
- Prism:Bash 与 NGINX 配置语法高亮,渲染输出面板中的代码块。
此外,README 的 Resources 小节整理了官方推荐的学习材料(Mozilla SSL 配置生成器、OWASP TLS 密码套件速查表、h5bp/server-configs-nginx、HSTS Preload 列表、worker_connections 取值讨论等),这些资料也是生成器内置 SSL Profile 与性能参数的重要参考来源。
七、参与贡献与许可证
README 给出的贡献流程为标准 GitHub 工作流:Fork → 新建特性分支 → 提交变更 → 推送分支 → 提交 Pull Request。由于项目本身高度模块化(新增功能 = 新增界面控件 + 新增 conf 生成器),非常适合以"小步 PR"的方式参与。
项目由 DigitalOcean 维护,README 记录了两位核心作者:当前重写与维护者 Matt (IPv4) Cowley,以及原版作者 Bálint Szekeres(仓库 LICENSE 显示版权归 DigitalOcean,采用MIT 许可证),这意味着你可以放心地在自己的项目、团队与商业产品中复用这份生成器源码与产出配置。
八、总结:把"配置经验"变成"可复现资产"
nginxconfig.io 的核心方法论可以概括为三点:模板化(KV 配置树 + 统一渲染器)、模块化(多文件输出 + include 组织)、可分享(查询串复现整套配置)。阅读本仓库时,建议按generators/index.js → conf/nginx.conf.js → conf/website.conf.js → to_conf.js的路径通读源码,即可完整理解"界面选项如何一步步变成服务器上的nginx.conf"。无论是想快速生成生产配置,还是想借鉴其"配置即代码"的工程结构,这份仓库都能直接给出可落地的答案。
- 开发工具
- 前端
【免费下载链接】nginxconfig.io
⚙️ NGINX config generator on steroids 💉
相关推荐
Snowpack 配置完全指南:从 snowpack.config.js 到源码级原理
Snowpack 配置完全指南:从 snowpack.config.js 到源码级原理 本文是 Snowpack 配置体系( snowpack.config.j
前端开发工具前端构建Doctrine ORM 查询过滤器(SQLFilter)完全指南:从配置注册到源码级工作原理
Doctrine ORM 查询过滤器(SQLFilter)完全指南:从配置注册到源码级工作原理 导读 Doctrine ORM 提供了一套内置的过滤器(Filt
数据库ORM后端Salt 文件服务器 roots 后端完全指南:从 file_roots 配置到源码级工作原理
Salt 文件服务器 roots 后端完全指南:从 file_roots 配置到源码级工作原理 导读 本文聚焦 Salt 文件服务器(File Server)中
运维配置管理后端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考