Nginx服务器代理Postgresql-16后端数据库

一、应用场景

公司网络划分为办公区服务器区两大网络域。依据企业网络安全规范,数据库服务器严禁直接被办公网终端访问。因此采用应用服务器前置代理架构,由前端应用服务器作为中间层转发请求,办公网开发人员仅通过应用服务间接调试访问后端数据库,既满足开发调试需求,又严格遵循网络隔离安全策略。

二、结构拓扑

三、环境准备

windows11+virtualbox(虚拟两台服务器)

角色 IP地址 类型 备注
Nginx前端应用服务器 192.168.140.8、172.16.10.10 rocky9.5 安装nginx、必须带 stream 模块
Postgresql后端数据库服务器 172.16.10.9 rocky 9.5 安装postgresql-16
办公终端 192.168.140.1 winodws11 安装DBeaver 26

四、实验过程

(一) Postgresql-16数据库服务器配置文件调整

PostgreSQL 16 安装后安全加固:默认禁止所有外部 IP 访问(仅本机可用),所以我们需要修改数据库配置,修改这postgresql.conf 和pg_hba.conf这两个配置文件。

配置文件 用途
postgresql.conf 数据库服务的全局核心配置,包含端口、监听地址、内存、日志等所有服务级参数
pg_hba.conf 控制哪些主机、用户、数据库可以连接到 PostgreSQL,以及使用什么认证方式(信任 / 密码 / MD5 等)

1、修改postgresql.conf 为如下内容

bash 复制代码
listen_addresses = '172.16.10.9' #数据库服务仅绑定并监听这一个内网 IP 地址

2、在pg_hba.conf文件末尾追加如下内容

bash 复制代码
host    all  all  172.16.10.10/32  scram-sha-256  #添加白名单,仅允许 172.16.10.10(nginx前端应用服务器)可以连接数据库

3、修改完后要重启服务,生效。

bash 复制代码
systemctl restart postgresql-16

(二)nginx前端应用服务器配置文件调整

在开启 SELinux 的环境中,Nginx 无法直接监听非标准端口(如 18081),这是因为 SELinux 对 HTTP 服务端口做了白名单限制。通过 semanage port 命令将自定义端口 18081 添加到 http_port_t 策略中,即可让 Nginx 获得监听权限,既保证系统安全,又满足自定义端口代理需求。我这里是实验环境,所以直接关闭了selinux。

1、修改/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=disabled

2、修改/etc/nginx/nginx.conf配置文件

bash 复制代码
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

# ================= 新增stream模块,TCP 代理 PostgreSQL(正确位置)=================

stream {
    upstream pgsql_backend {
        server 172.16.10.9:5432 max_fails=3 fail_timeout=30s;
    }

    server {
        listen 18081;
        proxy_pass pgsql_backend;
        proxy_connect_timeout 5s;
        proxy_timeout 300s;
    }
}
# ================================================================
#我这里注释掉了http模块,因为我这里用不到。
#http {
#    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                      '$status $body_bytes_sent "$http_referer" '
#                      '"$http_user_agent" "$http_x_forwarded_for"';
#
#    access_log  /var/log/nginx/access.log  main;
#
#    sendfile            on;
#    tcp_nopush          on;
#    tcp_nodelay         on;
#    keepalive_timeout   65;
#    types_hash_max_size 4096;
#
#    include             /etc/nginx/mime.types;
#    default_type        application/octet-stream;
#
#    include /etc/nginx/conf.d/*.conf;
#
#    server {
#        listen       80;
#        listen       [::]:80;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        include /etc/nginx/default.d/*.conf;
#
#        error_page 404 /404.html;
#        location = /404.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#        location = /50x.html {
#        }
#    }
#}

(三)使用DBeaver 工具连接nignx前端应用服务器


连接成功了,没问题。

相关推荐
玛丽莲茼蒿3 分钟前
Redis(六)—— Redis高级
数据库·redis·缓存
Wang's Blog1 小时前
PostgreSQL笔记22: WAL日志与崩溃恢复原理
数据库·笔记·postgresql
陈聪.1 小时前
企业级 NoSQL 数据库 Redis 核心知识整理
数据库·redis·nosql
翼龙云_cloud1 小时前
腾讯云国际代理商:CDB数据库自动备份和异地灾备配置 从快照到跨区域恢复
运维·数据库·云计算·腾讯云
小屁孩你滑稽掉了1 小时前
prisma操作数据库的方法使用教程(简洁版)
数据库·node.js·prisma·fastify
l1t2 小时前
利用DuckDB luajit插件和openblas库对表中数据做矩阵运算
数据库·线性代数·矩阵·duckdb
北城笑笑2 小时前
Server 18 ,Nginx + Vite 前端部署排错实战:从 `/api/gpt/chat` 404 到 9012 后端服务的完整定位过程
linux·运维·前端·nginx·ubuntu·vue
Elastic 中国社区官方博客2 小时前
Elasticsearch:什么是向量数据库?
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·ai
cspttty2 小时前
财务人员学数据分析考什么证
数据库
隔窗听雨眠3 小时前
MySQL索引机制深度解析:从B+树原理到高并发查询优化的完整指南
数据库·b树·mysql