nginx在云平台服务几个典型代理场景中的应用案例

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,1000CU*H 3个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 在云平台服务中有多种场景需要使用到反向代理,常见的应用场景包括:内网专有云平台访问公网资源、公有云平台访问客户内网IDC机房资源、云产品通过代理访问多个不同的资源等等。笔者总结几种场景配置nginx的7层反向代理、4层反向代理,巧妙实现应用需求。

一、4层/7层nginx 代理的区别

nginx可以实现4层和7层代理,分别对应的是 stream模块 和 http模块。

1.1 4层nginx代理--stream模块

nginx的stream模块一般用于tcp/udp数据流的代理和负载均衡,可以通过stream模块代理转发tcp/udp消息。4层nginx的tcp/udp 代理在云平台服务场景中,最常见的应用案例是代理数据库连接(比如mysql、oracle等数据库):

(1)专有云平台与互联网隔离,需要4层nginx代理实现云平台产品(比如ECS、DataWorks、DataPhin、DTS等)可以连接到互联网的数据库。

(2)反过来,公有云平台与客户内网IDC机房隔离,需要4层nginx代理实现云平台产品(比如ECS、DataWorks、DataPhin、DTS等)可以连接到客户内网IDC机房部署的数据库。

本质上,4层nginx代理在对网络包进行代理目标IP和端口的更换,而不需要关心7层http代理的域名逻辑。

1.2 7层nginx代理--http模块

nginx的http模块一般用于http/https7层业务的代理。7层nginx代理在云平台服务场景中,最常见的应用案例是代理业务系统。与4层代理类似,也分为专有云平台访问互联网业务系统、公有云平台访问客户内网IDC机房的业务系统。与4层代理不同的是,7层代理不仅仅需要对网络包进行代理目标ID和端口的更换,还需要关心域名后缀和参数。通常采用location机制实现域名后缀和参数的识别,进而将反向代理请求转发到不同的目标域名。

二、4层nginx 代理的典型应用场景

2.1 专有云平台访问互联网数据库

在大型企业网络架构,专有云往往与互联网完全隔离。大型企业往往只有DMZ区域才能与互联网通信,而且还需要在出口防火墙进行进口、出口的限制。

本文以阿里云DataWorks产品举例,其他云产品连接互联网数据库的方案基本相同。下图是笔者在某个专有云企业客户的实现方案:

1.png

方案的本质:

利用企业DMZ区(可以通过出口防火墙连接到互联网)服务器搭建nginx,然后将专有云DataWorks连接互联网数据库的请求进行4层IP/TCP反向代理,实现专有云内网产品连接互联网数据库。

Nginx的具体配置:

假设目标数据库是mysql数据库(123.234.165.100:3306),部署nginx的服务器是10.123.250.221,配置监听3306端口。

nginx.conf配置文件的stream模块配置如下:

user  nginx;
worker_processes  2;  ##根据服务器的cpu核数确定worker_rlimit_nofile 2048;    ##根据链接并发度确定events {
    worker_connections  2048;     ##根据链接并发度确定}
stream {
    server {
            listen 3306so_keepalive=on;    ## 监听port2端口,并且开启keepalive连接。            proxy_pass 123.234.165.100:3306;  ## 所有请求IP2:port2的4层网络包都转发到IP1:port1       }
}
## http {## http 7层代理和stream 4层代理是平行关系,可以同时配置实现4层/7层代理。## }

 

2.2 公有云平台访问企业内网IDC数据库

在某些零售、新零售、新金融、游戏、电商等企业,往往不需要部署专有云,公有云完善的产品体系、简便的运维体系,更适合这类企业。这类企业在内网IDC机房(往往租借运营商的IDC)还部署了内网业务系统。

企业在公有云采购了云产品,比如Maxcompute+DataWorks搭建了大数据系统。需要定时采集内网IDC业务系统的数据库,进行离线、准实时、实时数据分析。虽然企业可以通过拉专线将企业内网IDC与公有云VPC网络打通,但是无法直接将企业内网IDC与公有云厂商经典网络打通(除了ECS、rds等少数产品在公有云VPC网络,大部分云产品都在公有云厂商经典网络,包括大数据类产品)。

本文以公有云DataWorks拉取客户内网IDC数据库数据场景为例,对于这类需求,采用以下nginx反向代理方案:

2.png

 

方案本质是利用三个原理:

(1)阿里云公有云的经典网络(比如DataWorks产品所在的网络)与VPC网络(ECS虚拟机所在的网络)之间采用tunnal机制,已经打通。因此,DataWorks可以访问ECS。

(2)阿里云VPC可以与客户内网IDC采用专线打通。阿里云专线产品、vpn网关这两个产品提供了网络打通的功能。

(3)将DataWorks连接的目标数据库IP/port指向ECS IP/port,然后ECS部署的nginx可以将数据库连接反向代理到IDC机房。

Nginx的具体配置:

假设目标数据库是oracle数据库(192.168.250.199:1521),部署nginx的服务器是10.123.250.221,配置监听1521端口。

nginx.conf配置文件的stream模块配置如下:

user  nginx;
worker_processes  2;  ##根据服务器的cpu核数确定worker_rlimit_nofile 2048;    ##根据链接并发度确定events {
    worker_connections  2048;     ##根据链接并发度确定}
stream {
    server {
            listen 1521so_keepalive=on;    ## 监听port2端口,并且开启keepalive连接。            proxy_pass 192.168.250.199:1521;    ## 所有请求IP2:port2的4层网络包都转发到IP1:port1            proxy_timeout 72h;
       }
}
## http {## http 7层代理和stream 4层代理是平行关系,可以同时配置实现4层/7层代理。## }

 

三、7层nginx 代理的典型应用场景

Nginx 7层http代理的典型场景:内网专有云需要访问互联网资源。笔者在客户现场,遇到两个需求:

(1)阿里云专有云无法连通互联网,导致ECS虚拟机无法使用yum源部署程序。即使可以在内网搭建yum源,但是由于客户现场使用的操作系统版本特别多(centos、龙蜥操作系统、alios等,而且7.x\8.x等版本众多),依靠搭建内网yum源太麻烦。并且,内网yum源无法与公网yum源实时更新。

(2)专有云需要升级,需要从阿里官网下载安装包。安装包特别大(若干TB),手工使用硬盘下载然后传到阿里云内网太麻烦。

(3)专有云ECS部署了业务系统(比如OA系统),需要访问业主部门在互联网的官网系统。

针对这些需求,可以使用正向代理软件。但是客户不答应使用正向代理,担心正向代理放大了互联网访问目标范围。希望使用反向代理,针对每一个需求单独配置明确的代理规则,并开启访问日志进行访问审计。

以下是笔者设计的方案:

3.png

 

方案的本质:

利用企业DMZ区域(可以通过出口防火墙连接到互联网)服务器搭建nginx,然后根据访问的目标域名后缀规则,nginx配置不同的location匹配条件,进而代理转发到不同的目标域名。当然,为了实现nginx代理7层目标域名,需要在源端ECS服务器配置本地hosts,使得访问的目标域名被dns解析到DMZ区部署nginx的服务器IP。

假设:
1、DMZ区域服务器的IP地址是 10.123.251.240

2、目标访问域名有三个,分别是:

(1) 阿里云官网yum源:http://mirrors.aliyun.com/anolis*******

(2) 阿里云专有云升级包下载源:http://private-cloud-package.oss-xxxxxxx.com/release*******

(3) 客户官网地址:http://www.xxxx.com.cn/xxxx/index.html

备注:为了实现nginx的7层http代理,在源头ECS服务器必须将目标域名在/etc/hosts文件配置本地dns域名IP解析。也就是将上述的三个域名:mirrors.aliyun.com、private-cloud-package.oss-xxxxxxx.com、www.xxxx.com.cn在ECS的/etc/hosts文件解析成DMZ区的nginx部署服务器IP。这样才能使得源端ECS将目标域名访问请求包发送到nginx,让DMZ区服务器部署的nginx将请求代理转发到外网目标域名。

配置nginx7层代理,通常采用location机制实现域名后缀和参数的识别,进而将反向代理请求转发到不同的目标域名。location非常强大,可以实现以下几种优先级的匹配规则:

1、=:精确匹配

2、^~:最佳匹配

3、~ :正则表达式要区分大小写

4、~* :正则表达式不区分大小写

5、/ 开头:通用匹配

优先级:(location =精确匹配) > (location 完整路径匹配) > (location ^~ 最佳匹配路径) > (location ~,~* 正则匹配) > (location 部分起始路径) > (/)

 

Nginx的具体配置:

user nginx;
worker_processes auto;    ## 根据服务器的cpu核数确定error_log /var/log/nginx/error.log;  ## 审计error日志目录。需要根据你部署的nginx日志目录配置pid /run/nginx.pid;   ## 需要根据你部署的nginx日志目录配置include /usr/share/nginx/modules/*.conf;   ## 需要根据你部署的nginx日志目录配置events {
    worker_connections 2048;  ## 根据并发量配置,一般为1024的倍数}
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;   ## 审计error日志目录。需要根据你部署的nginx日志目录配置## keepalive_timeout   65;   ## keepalive的超时时间,建议不配置,采用默认的超时时间    include             /etc/nginx/mime.types;   ## 需要根据你部署的nginx日志目录配置## default_type        application/octet-stream;      server {
        listen       80;   ## 自己决定nginx监听的端口        server_name  10.123.251.240;   ## server_name 配置DMZ区服务器的IP地址        location  ^~/release {    ## location 最佳匹配 /release,用于代理转发到专有云下载地址            proxy_pass http://private-cloud-package.oss-xxxxxxx.com;
        }        
        location  /anolis {  ## location 通用匹配 /anolis,用于代理转发到龙蜥操作系统的yum源            proxy_pass http://mirrors.aliyun.com;
        }
        location  =/xxxx/index.html {  ## location 精确匹配 /xxxx/index.html,用于代理转发到客户官网            proxy_pass http://www.xxxx.com.cn;
        }
## 配置其他location规则,用于匹配域名后缀,进而proxy_pass转发到相应的目标域名    }
}

location由于强大的匹配规则,可以在同一个nginx  server配置成百上千的转发规则,实现成百上千的外部域名代理需求。笔者曾经使用1个nginx  server配置了五百多个外部域名转发,满足整个企业的外部域名访问需求,并且针对nginx日志开发了审计程序,对每一个内网业务访问外网域名的访问记录实现了安全审计功能。

四、后记

Nginx 代理功能非常强大,可以实现多种场景下的简单/复杂代理需求的4层TCP/UDP和7层http代理。感兴趣的读者,建议后续在工作中遇到代理转发需求,都考虑使用nginx实现代理转发需求。

相关实践学习
基于Hologres轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
相关文章
|
8月前
|
网络协议 应用服务中间件 网络安全
Nginx,正向代理
本文介绍了Nginx作为HTTPS正向代理的两种方案:HTTP CONNECT隧道(7层)和NGINX stream(4层)。HTTP CONNECT隧道需要客户端手动配置代理,通过CONNECT请求建立隧道;而NGINX stream则更适合透明代理,利用SNI字段实现流量转发。文章详细讲解了两者的原理、环境搭建、使用场景及常见问题,并提供了配置示例和最佳实践建议。内容转载自阿里云开发者社区@怀知的文章,推荐读者参阅原文获取更多信息。感谢您的阅读!
1074 80
Nginx,正向代理
|
3月前
|
数据采集 人工智能 算法
建筑矿山设备工厂如何应用MyEMS开源能源云平台
建筑矿山设备工厂是一家全球领先的采矿和基础设施技术公司,1993年在南京设立首家中国工厂,专注于研发与生产露天凿岩设备、地下采矿设备等。2014年将中国区总部迁至南京,进一步深化本土化战略。MyEMS开源能源管理系统基于ISO 50001标准,提供电、水、气等多能源介质的采集、分析与优化功能,助力工厂实现能耗透明化、碳排放管理及能效提升。项目成果显著,通过AI驱动的能效模型和预测性维护,实现年度电费节省超50万元,碳排放强度下降12%。未来计划进一步整合微电网与智能化技术,推动绿色智能制造转型。
58 0
|
11月前
|
自然语言处理 大数据 应用服务中间件
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
213 5
|
6月前
|
Ubuntu 应用服务中间件 网络安全
Nginx伪流媒体服务器搭建详细说明以及案例
Nginx伪流媒体服务器搭建步骤如下:1. 安装Nginx,根据系统选择命令;2. 编辑配置文件(/etc/nginx/nginx.conf),添加mp4相关设置;3. 创建视频目录/usr/share/nginx/html/videos并上传视频;4. 重启Nginx应用更改;5. 通过浏览器访问视频,如http://your_server_ip/videos/example.mp4。注意启用mp4模块,确保视频格式支持伪流媒体播放。
214 7
|
6月前
|
负载均衡 算法 应用服务中间件
Nginx长连接负载均衡详细说明以及案例
本文详细介绍了Nginx长连接负载均衡的配置与原理。长连接(Keepalive)允许客户端和服务器保持连接,减少建立和关闭连接的开销。Nginx支持多种负载均衡算法,如轮询、IP哈希等。通过在Nginx配置文件中使用`upstream`模块和`keepalive`指令,可以实现长连接负载均衡,从而提高系统的性能和响应速度。示例配置展示了如何设置后端服务器组、长连接数及HTTP/1.1协议,确保连接复用,降低延迟。
404 5
|
7月前
|
存储 缓存 应用服务中间件
Nginx 响应头 Vary 的介绍与应用
`Vary` 头部字段在Web开发中扮演着重要角色,通过合理使用 `Vary`,可以优化缓存策略,提升Web应用的性能和响应速度。本文介绍了 `Vary` 头部字段的基本概念、作用、常见使用场景及其在Nginx中的配置方法。通过这些内容,希望读者能够更好地理解和应用 `Vary` 头部字段,提高Web应用的缓存效率和用户体验。
218 10
|
11月前
|
监控 应用服务中间件 测试技术
确保正则表达式在 Nginx 代理中的准确性和稳定性
【10月更文挑战第19天】总之,正则表达式在 Nginx 代理中具有重要作用,但要确保其准确性和稳定性需要付出一定的努力和关注。通过以上方法的综合运用,我们可以提高正则表达式配置的可靠性,为用户提供更好的服务体验。
|
11月前
|
应用服务中间件 API nginx
使用正则表达式实现 Nginx 代理
【10月更文挑战第19天】在不断发展的互联网技术中,掌握正则表达式在 Nginx 代理中的应用是非常重要的。不断探索和实践,将有助于我们在实际工作中更好地运用这一技术,提升项目的质量和效率。
|
11月前
|
缓存 负载均衡 应用服务中间件
Nginx 实现一个端口代理多个前后端服务
【10月更文挑战第19天】Nginx 的强大功能不仅限于此,它还可以与其他技术和工具相结合,为我们的应用提供更强大的支持和保障。在不断发展的互联网时代,掌握 Nginx 的使用技巧将为我们的工作和生活带来更多的便利和效益。
|
9月前
|
缓存 Java 应用服务中间件
nginx的正向代理和反向代理以及tomcat
Nginx的正向代理和反向代理功能在不同的场景中具有重要作用,正向代理主要用于客户端访问控制和匿名浏览,而反向代理则用于负载均衡和高可用性服务。Tomcat作为Java Web应用服务器,与Nginx结合使用,可以显著提升Web应用的性能和稳定性。通过合理配置Nginx和Tomcat,可以构建高效、稳定和可扩展的Web服务架构。
340 11