nginx 不原生支持 postgresql,所谓“postgres 模块”仅指已停止维护的第三方 ngx_postgres,功能有限且不兼容新版环境;推荐使用 openresty+lua-resty-postgres 或 nginx 反向代理应用服务器处理数据库交互。

Linux 下 Nginx 本身不内置 PostgreSQL 支持,也无法直接通过“安装 Postgres 模块”来让 Nginx 连接 PostgreSQL。Nginx 是一个 Web 服务器/反向代理,不是应用服务器,它不原生执行数据库查询。所谓“Nginx 的 Postgres 模块”,通常指的是 nginx-http-postgres-module(第三方模块),它允许 Nginx 在配置中发起简单的 PostgreSQL 查询(如 SELECT),常用于鉴权、限速、动态 upstream 等场景,但功能有限、维护较弱,且仅支持较老的 Nginx 版本(如 1.4–1.12)。
确认你是否真的需要这个模块
多数用户误以为这是“让 Nginx 直连 PG 做业务逻辑”,其实:
- 该模块仅支持简单 SQL(无参数化查询,易 SQL 注入);
- 不支持 INSERT/UPDATE/DELETE(部分旧版分支有实验性支持);
- 已多年未更新,与现代 Nginx(≥1.14)、OpenSSL、PostgreSQL(≥12)兼容性差;
- 生产环境极少使用,更推荐用 Lua(via lua-resty-postgres)或上游应用(如 Python/Go)处理数据库交互。
若仍需编译 nginx-http-postgres-module(仅限测试或遗留系统)
以 Ubuntu/Debian 或 CentOS 7+ 为例,步骤如下:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 安装依赖:postgresql-server-dev-all(Ubuntu)或 postgresql-devel(CentOS),以及 build-essential / gcc make zlib1g-dev libpcre3-dev libssl-dev;
- 下载匹配的 Nginx 源码(如 nginx-1.12.2.tar.gz),解压;
- 克隆模块(注意分支):git clone https://github.com/FRiCKLE/ngx_postgres.git(主仓库已归档,建议用镜像或 commit 锁定);
- 进入 Nginx 源码目录,执行 configure(关键参数):
./configure --add-module=/path/to/ngx_postgres --with-http_ssl_module --with-cc-opt="-I/usr/include/postgresql"; - 运行 make && sudo make install;
- 在 nginx.conf 中配置示例(需先建好 PG 数据库和表):
postgres_server 127.0.0.1:5432 dbname=test user=nginx password=xxx;<br>location /auth {<br> postgres_pass sql_query "SELECT 'ok' WHERE $arg_user = 'admin'";<br> postgres_rewrite no_rows 403;<br>}
更现代、安全的替代方案
推荐以下组合,兼顾灵活性与可维护性:
- Nginx + OpenResty + lua-resty-postgres:OpenResty 内置 Lua,可写完整逻辑,支持连接池、预编译语句、错误处理;
- Nginx 反向代理 + FastAPI/Flask/Django(Python)或 Gin(Go):业务逻辑交由专业 Web 框架,Nginx 专注路由、TLS、静态资源;
- Nginx Plus(商业版):支持更丰富的 upstream 动态发现(含基于 DB 的 resolver),但非开源。
不复杂但容易忽略:Nginx 的定位是“边缘网关”,不是“数据库中间件”。选对分层,比硬塞模块更重要。










