一分鐘部署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
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84661.shtml
英文地址,請注明出處:http://en.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;我們也必須從使用…