如果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

相关文章

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

一文带你搞懂Nginx中的配置文件

《一文带你搞懂Nginx中的配置文件》Nginx(发音为“engine-x”)是一款高性能的Web服务器、反向代理服务器和负载均衡器,广泛应用于全球各类网站和应用中,下面就跟随小编一起来了解下如何... 目录摘要一、Nginx 配置文件结构概述二、全局配置(Global Configuration)1. w

若依部署Nginx和Tomcat全过程

《若依部署Nginx和Tomcat全过程》文章总结了两种部署方法:Nginx部署和Tomcat部署,Nginx部署包括打包、将dist文件拉到指定目录、配置nginx.conf等步骤,Tomcat部署... 目录Nginx部署后端部署Tomcat部署出现问题:点击刷新404总结Nginx部署第一步:打包

Nginx、Tomcat等项目部署问题以及解决流程

《Nginx、Tomcat等项目部署问题以及解决流程》本文总结了项目部署中常见的four类问题及其解决方法:Nginx未按预期显示结果、端口未开启、日志分析的重要性以及开发环境与生产环境运行结果不一致... 目录前言1. Nginx部署后未按预期显示结果1.1 查看Nginx的启动情况1.2 解决启动失败的

tomcat在nginx中的配置方式

《tomcat在nginx中的配置方式》文章介绍了如何在Linux系统上安装和配置Tomcat,并通过Nginx进行代理,首先,下载并解压Tomcat压缩包,然后启动Tomcat并查看日志,接着,配置... 目录一、下载安装tomcat二、启动tomcat三、配置nginx总结提示:文章写完后,目录可以自动

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

PostgreSQL如何用psql运行SQL文件

《PostgreSQL如何用psql运行SQL文件》文章介绍了两种运行预写好的SQL文件的方式:首先连接数据库后执行,或者直接通过psql命令执行,需要注意的是,文件路径在Linux系统中应使用斜杠/... 目录PostgreSQ编程L用psql运行SQL文件方式一方式二总结PostgreSQL用psql运

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

PostgreSQL核心功能特性与使用领域及场景分析

PostgreSQL有什么优点? 开源和免费 PostgreSQL是一个开源的数据库管理系统,可以免费使用和修改。这降低了企业的成本,并为开发者提供了一个活跃的社区和丰富的资源。 高度兼容 PostgreSQL支持多种操作系统(如Linux、Windows、macOS等)和编程语言(如C、C++、Java、Python、Ruby等),并提供了多种接口(如JDBC、ODBC、ADO.NET等