如果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部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx

通过配置nginx访问服务器静态资源的过程

《通过配置nginx访问服务器静态资源的过程》文章介绍了图片存储路径设置、Nginx服务器配置及通过http://192.168.206.170:8007/a.png访问图片的方法,涵盖图片管理与服务... 目录1.图片存储路径2.nginx配置3.访问图片方式总结1.图片存储路径2.nginx配置

Nginx禁用TLSv1.0 1.1改为TLSv1.2 1.3的操作方法

《Nginx禁用TLSv1.01.1改为TLSv1.21.3的操作方法》使用MozillaSSL配置工具生成配置,修改nginx.conf的ssl_protocols和ssl_ciphers,通... 目录方法一:方法二:使用 MoziChina编程lla 提供的 在线生成SSL配置工具,根据自己的环境填充对应的

nginx配置错误日志的实现步骤

《nginx配置错误日志的实现步骤》配置nginx代理过程中,如果出现错误,需要看日志,可以把nginx日志配置出来,以便快速定位日志问题,下面就来介绍一下nginx配置错误日志的实现步骤,感兴趣的可... 目录前言nginx配置错误日志总结前言在配置nginx代理过程中,如果出现错误,需要看日志,可以把

Oracle迁移PostgreSQL隐式类型转换配置指南

《Oracle迁移PostgreSQL隐式类型转换配置指南》Oracle迁移PostgreSQL时因类型差异易引发错误,需通过显式/隐式类型转换、转换关系管理及冲突处理解决,并配合验证测试确保数据一致... 目录一、问题背景二、解决方案1. 显式类型转换2. 隐式转换配置三、维护操作1. 转换关系管理2.