一分钟部署nginx-公网IP访问内网

前言

服务器内网下有nacos cluster(3个节点),开放到公网并指定公司网络访问需要配置三次IP白名单,因此需要简化流程,通过nginx反向代理只配置1次IP白名单。
现在通过docker容器模拟环境,准备1台云服务器。
nacos cluster docker-compose.yaml端口配置如下:

version: "3.0"
# nginx使用到IP和端口,因此部分配置不在此赘述,nacos具体配置参考博主nacos章节
# image:nacos/nacos-server:v2.5.0
# volumes、restart、healthcheck : 略
# environment配置集群模式,采用mysql持久化,mysql配置、java_opts配置 : 略
services:nacos1:hostname: nacos1container_name: nacos1environment:- NACOS_SERVERS=172.20.0.2:8848 172.20.0.3:8848 172.20.0.4:8848- NACOS_SERVER_IP=172.20.0.2ports:- "8248:8848" # http- "9248:9848" # grpc- "7248:7848"- "9249:9849"networks:nacos_cluster_network:ipv4_address: 172.20.0.2nacos2:hostname: nacos2container_name: nacos2environment:- NACOS_SERVERS=172.20.0.2:8848 172.20.0.3:8848 172.20.0.4:8848- NACOS_SERVER_IP=172.20.0.3ports:- "8348:8848"- "9348:9848"- "7348:7848"- "9349:9849"networks:nacos_cluster_network:ipv4_address: 172.20.0.3nacos3:hostname: nacos3container_name: nacos3environment:- NACOS_SERVERS=172.20.0.2:8848 172.20.0.3:8848 172.20.0.4:8848- NACOS_SERVER_IP=172.20.0.4ports:- "8448:8848"- "9448:9848"- "7448:7848"- "9449:9849"networks:nacos_cluster_network:ipv4_address: 172.20.0.4networks:nacos_cluster_network:ipam:config:- subnet: 172.20.0.0/16

Nginx配置

docker-compose.yaml配置

services:nginx:image: nginx:latestcontainer_name: nginxrestart: alwaysports:- "8848:80" # 宿主机的8848端口,容器80端口volumes:- ./conf/nginx.conf:/etc/nginx/nginx.conf:ro- ./conf.d:/etc/nginx/conf.d:ro- ./html:/usr/share/nginx/html:ro- ./logs:/var/log/nginxnetworks:nginx_docker_network:ipv4_address: 172.16.0.30 networks:nginx_docker_network:external: truename: docker_network

nginx的./conf/nginx.conf配置,nginx的conf配置文件,除了{},其他需以;结尾,注释为 #本文只配置公网+内网信息,其他负载均衡、缓存、限流、黑/白名单、静态资源服务、动静分离、防盗链、跨域、高可用参考博主Nginx系列文章。

user  nginx;
worker_processes  1;error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;events {worker_connections 1024;
}http {include       /etc/nginx/mime.types;  # 引入配置文件default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"'; # 设置日志格式,main为格式名称,后面一串为具体access_log  /var/log/nginx/access.log  main; # 日志目录,引用上面设置的格式mainsendfile        on;keepalive_timeout  65;client_max_body_size 500m;include /etc/nginx/conf.d/*.conf; # 引入代理文件,需放在html 范围内
}

设置nacos反向代理配置,./conf.d/nacos_cluster.conf

upstream nacos_http {server 172.20.0.2:8848;server 172.20.0.3:8848; server 172.20.0.4:8848;
}  upstream nacos_grpc {server 172.20.0.2:9848 max_fails=3 fail_timeout=30s;server 172.20.0.3:9848 max_fails=3 fail_timeout=30s;server 172.20.0.4:9848 max_fails=3 fail_timeout=30s;
}server {listen 80; # 记得是容器的80端口,非宿主机的8848端口server_name 117.77.200.222;  # 公网IP或者域名,该服务器已经做过IP白名单,访问无效location /nacos/ {proxy_pass  http://nacos_http/nacos/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# Nacos需要的特殊配置proxy_set_header X-Forwarded-Proto $scheme;# 以下是为Nacos Web控制台和API添加的配置proxy_connect_timeout 30s;proxy_read_timeout 120s;proxy_send_timeout 120s;# 解决WebSocket问题(如果使用2.x版本)proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";}# gRPC服务代理location / {grpc_pass grpc://nacos_grpc;# gRPC相关配置grpc_connect_timeout 30s;grpc_read_timeout 120s;grpc_send_timeout 120s;# 必要的头信息proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}# 健康检查端点location /nacos/actuator/health {proxy_pass http://nacos_http/nacos/actuator/health;access_log off;}
}

验收

在这里插入图片描述
聪明的你也许看出来了:为啥访问的是8848端口,而不是80端口。访问流程分解

浏览器请求 http://117.77.200.222:8848/nacos/ (公网)↓
宿主机防火墙放行8848端口↓
Docker 将宿主机8848端口映射到Nginx容器的80端口↓
Nginx 监听容器内的80端口,收到请求↓
Nginx 根据配置将请求代理到 nacos_http (172.20.0.[2-4]:8848)↓
返回响应数据

参考资料

  1. 3分钟配置好nacos集群(docker compose)
  2. Nginx代理转发Nacos集群:基于Nacos2.0.3版本
  3. 使用nginx代理请求到内网

如遇问题,请留言博主

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/84661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C 语言分支与循环

目录 一. 分支结构:if 语句与 switch 语句 1. if 语句 2. switch 语句 二、关系操作符、条件操作符与逻辑操作符 1. 关系操作符 2. 条件操作符 3. 逻辑操作符 三、循环结构:while 循环、for 循环与 do - while 循环 1. while 循环 2. for 循…

【一文看懂Spring Boot2.x升级Spring Boot3.x】springboot2.x升级springboot3.x

springboot2.x升级springboot3.x 背景升级jdk版本为17以上springboot版本修改javax包更新mybatis-plus升级swagger升级springdocspringdoc配置背景 当前项目是springboot2.5.9版本的springboot+mybatis-plus项目,需要升级到springboot3.5.0项目。 升级jdk版本为17以上 Spri…

阳台光伏防逆流电表革新者:安科瑞ADL200N-CT/D16-WF

——为家庭能源管理提供高精度、智能化解决方案 一、阳台光伏爆发的背景 在全球能源转型与碳中和目标的驱动下,阳台光伏正以革命性姿态重塑家庭能源消费模式。从欧洲的“微型发电站”到中国的“万亿蓝海”,这一创新技术不仅撬动了能源市场的结构性变革…

美团完整面经

面试岗位 面试的岗位 - 2025春季校招 【转正实习】软件服务工程师-后端方向(成都 - 软硬件服务-SaaS事业部) 一面(业务初试 - 30min) 问题 自我介绍 Java基础 HashMap底层用的数据结构是什么?是线程安全的吗&…

pysnmp 操作流程和模块交互关系的可视化总结

1. SNMP GET 操作序列图 #mermaid-svg-KALvv8WkHJTsNCeu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-KALvv8WkHJTsNCeu .error-icon{fill:#552222;}#mermaid-svg-KALvv8WkHJTsNCeu .error-text{fill:#552222;str…

关于 /proc/net/tcp 与 /proc/$pid/net/tcp 的关系分析

关于 /proc/net/tcp 与 /proc/$pid/net/tcp 的关系分析 1. 基础概念 在 Linux 系统中,每个进程必定归属于一个且仅一个网络命名空间(Network Namespace)。这是 Linux 命名空间隔离机制的核心特性之一。 /proc/net/tcp 显示当前网络命名空间…

微信小程序 - 保存手机号等信息到通讯录

主要使用小程序 wx.addPhoneContact 这个api 一、界面 <view class"tab-item" bindtap"addToPhoneContacts">保存</view> 二、js 逻辑文件中 addToPhoneContacts() {wx.addPhoneContact({firstName: this.data.firstName, // 姓名mobilePh…

计算机视觉一些定义解析

1.GCT&#xff08;Gated Channel Transformation&#xff09; 定义 GCT&#xff08;Gated Channel Transformation&#xff09;是一种用于增强卷积神经网络特征提取能力的模块。它的核心思想是通过门控机制对特征图的通道进行动态调整&#xff0c;从而突出对任务更有帮助的特…

美团NoCode的Database 使用指南

系列文章目录 第一篇&#xff1a;美团NoCode设计网站的尝试经验分 第二篇&#xff1a;美团NoCode中的Dev Mode 使用指南 文章目录 系列文章目录Database 适用场景一、什么是 Database&#xff1f;二、准备流程1. 申请账号 三、使用流程1.申请资源的同时可搭建 NoCode 页面&…

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…

1.11 HTTP 文件上传的核心协议

HTTP 文件上传是 Web 开发中的常见需求&#xff0c;涉及到特殊的请求格式和处理机制。 一、HTTP 文件上传的核心协议 1. 两种主要方式 multipart/form-data&#xff08;主流&#xff09; 支持二进制文件和表单字段混合传输&#xff0c;由 Content-Type 头部标识。applicatio…

安装 Poppler(Windows)

下载 Poppler&#xff08;Windows&#xff09;&#xff1a;https://github.com/oschwartz10612/poppler-windows/releases/ 解压在自己目录下 配置系统环境变量&#xff1a;把 poppler-xx.x.x\bin 目录加入你的环境变量 PATH 中。 检查是否配置成功 pdfinfo

Java学习笔记之:初识nginx

Java学习笔记之&#xff1a;初识nginx PS&#xff1a;虽然总结的都很简单&#xff0c;但是作为初学者并且本人记忆力较差所以每次学习新知识点后习惯性记录下来&#xff0c;这样加深一遍记忆并且便于日后复习。 介绍&#xff1a; Nginx是一款轻量级的Web服务器/反向代理服务器…

Middleware

中间件的定义&#xff1a;中间件是位于操作系统和应用程序之间的软件层&#xff0c;用于解决分布式系统中通信、数据共享、资源管理等共性问题。消息队列属于通信中间件&#xff0c;用于在分布式系统中传递消息&#xff0c;实现应用解耦、异步通信和流量削峰。解耦系统&#xf…

Mac如何配置ZSH并使用Oh-my-zsh?让你的终端更加实用、美观

前言 现在&#xff0c;越来越多的人趋向使用ZSH取代(Linux)原本的Bash作为自己的终端Shell。的确&#xff0c;ZSH才是适用于现代的Shell&#xff1a; 更丰富的命令提示更鲜明的演示标记更强大的插件支持 什么是ZSH 回答什么是ZSH前&#xff0c;我们先解释什么是Bash&#x…

C++11新标准

重点 auto 类型推导范围 for 迭代初始化列表变参模板 新类型 C11新增了类型 long long 和 unsigned long long&#xff0c;以支持64位(或更宽)的整型;新增了类型 char16_t和 char32_t&#xff0c;以支持 16位和 32 位的字符表示;还新增了“原始”字符串。 常量 nullptr nu…

SpringAI Prompt提示词

基本概念 Prompts提示词 ❝ 提示词的是引导AI模型输出的输入&#xff0c;提示词的正确性直接影响模型输出的。 Message消息 Message 接口封装了 Prompt 文本内容、一组元数据属性以及称为 MessageType 的分类。Spring AI消息API&#xff1a; 其中最重要的就是角色&#xff1a; …

力扣刷题——二分查找

数组是存放在连续内存空间上的相同类型数据的集合数组下标都是从0开始的数组内存空间的地址是连续的正是因为数组在内存空间的地址是连续的&#xff0c;所以我们在删除或者增添元素的时候&#xff0c;就难免要移动其他元素的地址。 使用二分查找法返回的元素下标可能不是唯一的…

黑群晖NAS部署DeepSeek模型与内网穿透实现本地AI服务

文章目录 前言1.安装Container Manager2. 启动ssh功能3. ssh连接黑群晖4. 安装Ollama5. 安装deepseek模型6. 安装open-webui图形界面7. 安装内网穿透7.1 下载cpolar套件7.2 配置群辉虚拟机7.3 配置公网地址小结 7.4 配置固定公网地址 总结 前言 在追求自建网络存储方案的极客群…

Rust 学习笔记:处理任意数量的 future

Rust 学习笔记&#xff1a;处理任意数量的 future Rust 学习笔记&#xff1a;处理任意数量的 future竞争的 future将控制权交给运行时构建我们自己的异步抽象 Rust 学习笔记&#xff1a;处理任意数量的 future 当两个 future 切换到三个 future 时&#xff0c;我们也必须从使用…