Nginx 配置反向代理 - part 3

继承上文:
Nginx location 配置 - Part 2

之前 介绍了 nginx 配置web服务器, 但是用nginx 多的情况下是作为反向代理。
本问就是介绍如何利用nginx 配置反向代理服务。

什么是 反向代理 和 正向代理

在这里插入图片描述
一张图很清楚地表达了

正向代理

所谓正向代理就是 代理 client的(网络请求发起方)
它有这些特点

  1. 角色类似家用路由器
  2. 与clients在同1个局域网
  3. 作用是为了让Lan内其他主机 能够访问外部网络
反向代理

所谓反向代理就是 代理 server的
它有这些特点

  1. 角色类似api gateway
  2. 与server在同1个局域网
  3. 作用是为了让Lan内其他主机 能够被外部网络访问, 而且防止被外部网络直接访问



两个例子和具体需求

第一个例子是代理tomcat 主页, 这个是最常用的

proxy hostproxy portproxy domaintomcat hosttomcat port
tf-vpc0-subnet0-main-server80jp-gcp-vms.cloudtf-vpc0-subnet1-vm18080

第二例子是代理could run的某个api

proxy hostproxy portproxy domainCloud run service name
tf-vpc0-subnet0-main-server8083jp-gcp-vms.cloudhelloservice-7hq3m4pdya-nw.a.run.app

注意cloud run的service name并不是真正背后的主机名, 其真正的host/ip (好像是ipv6)是对我们隐藏的, 也无法知道具体端口

第三个例子 是代理内网中的1个mysql 服务, 但是可惜nginx 只是 http 代理, 并不能处理mysql 的协议,只能用proxySQL等代替。没有第3个。。




代理tomcat 主页

这个相对简单

我们要在/etc/nginx/conf.d/ 下创建1个新的配置文件

upstream appserver {server tf-vpc0-subnet1-vm1:8080;
}server {listen 80;server_name jp-gcp-vms.cloud www.jp-gcp-vms.cloud;location / {proxy_pass http://appserver/;#loginaccess_log /var/log/nginx/proxytomcat.access.log;error_log /var/log/nginx/proxytomcat.error.log;}}

注意这里我们用upstream block 先定义了 tomcat 真正的服务器地址和host

然后在 server{} block 中并不需要想定义网站那样 提供1个 root 路径

直接用 proxy_pass 指向真正的后台服务地址就可以了。

测试效果
http://jp-gcp-vms.cloud/

由于代理用的是80端口, 浏览器也不再需要写端口地址了。
在这里插入图片描述

有个坑, 在配置文件中尽量避免写下划线_ 否则有可能出现下面的问题

在这里插入图片描述



代理cloud run service

同样地, 在/etc/nginx/conf.d/ 下再创建1个文件

# upstream helloservice {# server helloservice-7hq3m4pdya-nw.a.run.app; # not for cloudrun , upstream server could only point to the actual server host
# }server {listen 8083;server_name jp-gcp-vms.cloud www.jp-gcp-vms.cloud;#ssl_certificate /root/ssl/ssl_certificate.crt;#ssl_certificate_key /root/ssl/ssl_certificate.key;location /api/ {# proxy_pass https://helloservice/api/;  # not for cloudrun , upstream server could only point to the actual server hostproxy_pass https://helloservice-7hq3m4pdya-nw.a.run.app/api/; proxy_pass_header Authorization;# proxy_set_header Authorization "Bearer $ID_TOKEN";  # Ngnix do not support read env variables by default# We might need to use envsubst to add env-value in nginx.conf before nginx service start# , but it's not dynamic enough# proxy_set_header Authorization "Bearer $(gcloud auth print-identity-token)";  # do not support this as well.. might need lua plugin# loginaccess_log /var/log/nginx/helloservice.ssl.access.log;error_log /var/log/nginx/helloservice.ssl.error.log;}
}

有几个坑

  1. 由于cloud run serice name 并不是1个真正的host, 所以我们无法使用upstream block 预定义。
  2. 这里的例子只代理了 这个service /api/ 下的api
  3. Authorization 这个header 要显式 pass
  4. 本人还没找到 能在 nginx 生成 google Identity token的方法, 见注释

测试结果

gateman@DESKTOP-UIU9RFJ:~$ curl -k -H "Authorization: Bearer $(gcloud auth print-identity-token)" http://jp-gcp-vms.cloud:8083/api/hello
Hello, Jason!!!!
gateman@DESKTOP-UIU9RFJ:~$ 

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

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

相关文章

oracle11g数据导出和导入

利用数据泵导出导入数据 命令:EXPDP/IMPDP 第一:创建directory对象,可以在命令行,也可以在客户端上运行 CREATE DIRECTORY DUMP_DIR AS /home/dump 原因:导入导出工具只能将转储文件存放在DIRECTORY对象对应的os目…

世微 AP5219 平均电流型LED降压恒流驱动器 电动摩托汽车灯芯片

产品描述 特点 AP5219 是一款 PWM工作模式, 高效率、外 围简单、内置功率管,适用于5V~100V输入的高 精度降压 LED 恒流驱动芯片。输出功率可达 25W,电流 2.5A。 AP5219 可实现全亮/半亮功能切换,通过 MODE 切换:全亮…

手搓一个Notes Kill文件

大家好,才是真的好。 无论是资源使用,还是Notes客户机运行本身的卡顿,有时候都会造成事实上的程序无响应, 对于心急的人们,自然而然倾向于彻底结束Notes程序运行,然后重新开始,就像打游戏一样…

SambertHifigan模型训练训练出错-list index out of range

模型的地址是 SambertHifigan个性化语音合成-中文-预训练-16k 错误描述 如上图,在运行训练命令(train.py)的时候,会出现这个错误, 错误解决 上面这个错误并不是train.py的问题,是上一步骤 auto_label.py的…

刚上线三天,OpenAI GPT 商店的「AI 女友」就已泛滥丨 RTE 开发者日报 Vol.126

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE (Real Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

一个小技巧教你制作电子样册

据统计,使用电子样册的企业,转化率可提高高达30%。与传统纸质样册相比,电子样册的阅读率更高,互动性更强,更能吸引潜在客户的关注。此外,电子样册还可以随时更新和修改,保持品牌形象的新鲜感。 …

pod控制器

1、定义 又称工作负载,用于管理pod的中间层,确保pod资源符合预期的状态(副本数、容器的重启策略、镜像拉取策略、pod出现故障时的重启等) 2、控制器类型 replicaSet 指定pod副本的数量。三个组件:①pod的副本数②标…

mysql原理--redo日志2

1.redo日志文件 1.1.redo日志刷盘时机 我们前边说 mtr 运行过程中产生的一组 redo 日志在 mtr 结束时会被复制到 log buffer 中,可是这些日志总在内存里呆着也不是个办法,在一些情况下它们会被刷新到磁盘里,比如: (1). log buffer…

硬盘恢复软件如何恢复硬盘数据?分享使用方法

在数字时代,数据的重要性不言而喻。一旦硬盘发生数据丢失,在未备份数据的情况下,对于个人和企业来说可能造成巨大的损失。然而,随着技术的进步,硬盘恢复软件已经成为解决这一问题的有效工具。它能够有效处理一些不是物…

uniapp 图片保持宽高比,撑满屏幕宽度

image 标签添加 mode"widthFix" <image mode"widthFix" :src"detailData.coverImageURL" />image 标签添加样式 image {width: 100%;height: auto; }

在Excel中将一列分为多列的三种方法,总有一种适合你

在处理数据和电子表格时,可读性和结构非常重要。它使数据更容易浏览和使用。提高数据可读性的最佳方法之一是将数据分割成块,这样更容易访问正确的信息。 当从头开始输入数据时,可以确保我们对数据的结构更具可读性。但是,有时你需要使用其他人创建的数据。如果数据量很大…

如何通过内网穿透实现公网访问Portainer管理监控Docker容器

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风…

软件测试Leader避坑指南,让你少走弯路!

作为一名软件测试人&#xff0c;特别是测试Leader工作中难免会遇到一些坑。你是否经常会为此感到焦虑和苦恼&#xff1f; 测试Leader在团队中往往处于夹心饼干的角色。 对上要面对上级的施压、打压、批评、责骂和CPU、甩锅&#xff1b;对下要面对员工的摆烂&#xff0c;敷衍和…

如何用GPT/GPT4完成AI绘图和论文写作?

详情点击链接&#xff1a;如何用GPT/GPT4完成AI绘图和论文写作&#xff1f; 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#xff0c;AI画图&#xff0c;图像识别&#xff0c;文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Clau…

一些面试会问到的奇怪问题

1.v-for、v-if先后顺序。 官方不建议一起使用&#xff0c;但是有时候面试的时候会问到。 在vue2中是v-for先与v-if的。 源码js编译结果&#xff1a; _c()就是vm.$createElement()&#xff0c;意思是创建一个虚拟的element&#xff0c;就是返回值是VNode。 _l就是renderlis…

虹科技术|如何用TSN流识别技术破解航空电子网络的传输难题?

导读&#xff1a;随着航空航天技术的迅猛发展&#xff0c;航空电子网络面临着诸多挑战&#xff0c;如多网络并行传输、高带宽需求以及确保数据传输的确定性等。为应对这些挑战&#xff0c;航空电子网络急需一个通用的网络架构&#xff0c;满足布线简单、供应商多、组网成本相对…

网络文件共享服务

一.存储类型 直连式存储&#xff1a;Direct-Attached Storage&#xff0c;简称DAS 存储区域网络&#xff1a;Storage Area Network&#xff0c;简称SAN&#xff08;可以使用空间&#xff0c;管理也是你来管理&#xff09; 网络附加存储&#xff1a;Network-Attached Storage&…

(2023版)斯坦福CS231n学习笔记:DL与CV教程 (2) | 图像分类与损失函数

前言 &#x1f4da; 笔记专栏&#xff1a;斯坦福CS231N&#xff1a;面向视觉识别的卷积神经网络&#xff08;23&#xff09;&#x1f517; 课程链接&#xff1a;https://www.bilibili.com/video/BV1xV411R7i5&#x1f4bb; CS231n: 深度学习计算机视觉&#xff08;2017&#xf…

FairyGUI Day 1 导入FairyGUI

FairyGUI Unity3d引擎版本&#xff1a;Uinty3d 20233.2.3f1 1、从资产商店中将FairyGUI购入我的资产中&#xff0c;目前是免费的。 2、从我的资产中将FairyGUI导入到当前项目中。 3、我遇到的问题&#xff0c;我的Assets下有两个文件夹分别是Resources和Scenes&#xff0c;导…

开源对象存储服务器MinIO本地部署并结合内网穿透实现远程访问管理界面

文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器&#xff0c;可以在各种环境中运行&#xff0c;例如本地、Docker容器、Kubernetes集群等。它兼…