如果PostgreSQL有两层nginx代理,会发生什么事?

2024-01-05 14:36

本文主要是介绍如果PostgreSQL有两层nginx代理,会发生什么事?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

湖蓝几何球体LinkedIn Banner.png
转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。


1. 前言

PostgreSQL默认只能本机连接,若要在别的客户端远程连接pgsql,则需要修改配置文件pg_hba.conf,添加IPv4白名单。

如果在某些场景下,pgsql前面有两层nginx做代理,IPv4白名单该怎么配置呢?pg数据库获取的clientIP分别又是什么呢?

image.png

2. 模拟实验环境规划

准备4台服务器和本地Windows电脑pgAdmin工具,分配如下:
image.png

3. 实验环境搭建

  1. 在10.0.0.66和10.0.0.102服务器分别搭建postgresql应用,搭建步骤可参考《PostgreSQL学习之部署与简单使用》

  2. 10.0.0.64和10.0.0.65服务器分别安装nginx。并修改nginx配置文件nginx.conf如下:
    10.0.0.64服务器修改nginx.conf,添加如下配置(注意:stream和http是同级的,即stream不要放在http{}中):

#代理pgsql数据库
stream {upstream pgsql {server 10.0.0.65:5432;}server {listen 5432;proxy_connect_timeout 30s;proxy_timeout 30s;proxy_pass pgsql;}

10.0.0.65服务器修改nginx.conf,添加如下配置(注意:stream和http是同级的,即stream不要放在http{}中):

#代理pgsql数据库
stream {upstream pgsql {server 10.0.0.66:5432;}server {listen 5432;proxy_connect_timeout 30s;proxy_timeout 30s;proxy_pass pgsql;}
  1. 本地Windows电脑安装pgAdmin工具。

4. 场景实验

实验分三个场景做测试:

  • 场景一:客户端只能通过两层nginx做代理转发,连接postgresql;
  • 场景二:客户端绕开nginx代理,直连pgsql数据库;
  • 场景三:客户端可走nginx代理,也可直连pg数据库;
    image.png

场景一:客户端只能通过nginx代理连接数据库

pg_hba.conf文件中IPv4白名单配置:

此种场景,白名单只配置任意一台nginx代理的IP,不配置客户端IP,重启pgsql:

host    all             all             10.0.0.65/24             md5
#或者:
#host    all             all             10.0.0.64/24             md5

测试结果:
在服务器客户端102和Windows客户端pgAdmin工具,均可通过nginx代理正常访问PG数据库。在配置任一nginxIP白名单情况下,无论是通过nginx-64或者nginx-65连接PG数据库均可。
此时PG数据库通过pgAdmin工具可以直观看到,只要是走nginx代理过来的连接,数据库接收到的clientIP均为第二层nginx的IP地址(也可以在postgresql数据库本身通过命令行 select * from pg_stat_activity; 查看)。
如下图,在client列中看到两个10.0.0.65的客户端连接,分别是Windows客户端通过pgAdmin和服务器客户端102通过命令行psql -h 10.0.0.64 -p5432连接进来的(最后一行IP为空白的记录是因为在pg数据库本身是登录状态)。
image.png

场景二:客户端绕开nginx代理,直连pgsql数据库

pg_hba.conf文件中IPv4白名单配置:

此种场景,则可只配置客户端IP,不配置2台nginx代理的IP,重启pgsql:

host    all             all             192.168.0.36/24             md5
host    all             all             10.0.0.102/24             md5

测试结果:

通过nginx代理已无法进入pg数据库。

客户端102和Windows客户端均绕开2台nginx代理服务器,直连pgsql。此时pgsql接收的客户端IP显示为真实的客户端IP:
image.png

场景三:客户端可走nginx代理,也可直连pg数据库

pg_hba.conf文件中IPv4白名单配置:

此种场景,可配置服务器IP网段+两台nginxIP,也可以放开所有IP访问权限,重启pgsql:

host    all             all             0.0.0.0/0               md5

测试结果:

服务器客户端102和Windows客户端pgAdmin能通过nginx代理正常连接pgsql,也能绕过nginx直连pgsql。

pg数据库获取的clientIP则为场景一和场景二的结合体:通过nginx代理访问的,clientIP为nginx-65的IP;直连的,clientIP为客户端真实IP:
image.png

实验结论

经过实验,结论如下图:
image.png

(全文完)

这篇关于如果PostgreSQL有两层nginx代理,会发生什么事?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/573197

相关文章

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

postgresql数据库基本操作及命令详解

《postgresql数据库基本操作及命令详解》本文介绍了PostgreSQL数据库的基础操作,包括连接、创建、查看数据库,表的增删改查、索引管理、备份恢复及退出命令,适用于数据库管理和开发实践,感兴... 目录1. 连接 PostgreSQL 数据库2. 创建数据库3. 查看当前数据库4. 查看所有数据库

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

PostgreSQL数据库密码被遗忘时的操作步骤

《PostgreSQL数据库密码被遗忘时的操作步骤》密码遗忘是常见的用户问题,因此提供一种安全的遗忘密码找回机制是十分必要的,:本文主要介绍PostgreSQL数据库密码被遗忘时的操作步骤的相关资... 目录前言一、背景知识二、Windows环境下的解决步骤1. 找到PostgreSQL安装目录2. 修改p

Nginx 重写与重定向配置方法

《Nginx重写与重定向配置方法》Nginx重写与重定向区别:重写修改路径(客户端无感知),重定向跳转新URL(客户端感知),try_files检查文件/目录存在性,return301直接返回永久重... 目录一.try_files指令二.return指令三.rewrite指令区分重写与重定向重写: 请求

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

PostgreSQL 默认隔离级别的设置

《PostgreSQL默认隔离级别的设置》PostgreSQL的默认事务隔离级别是读已提交,这是其事务处理系统的基础行为模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一 默认隔离级别概述1.1 默认设置1.2 各版本一致性二 读已提交的特性2.1 行为特征2.2

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务