nginx内网转外网(nginx转发内网到外网)
大家好!今天让创意岭的小编来大家介绍下关于nginx内网转外网的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。
ChatGPT国内免费在线使用,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等
只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端
本文目录:
一、Ribbon实现前端负载均衡(本地路由导向)-加在消费者端
1配置消费者路径能支持通用访问
如用 provider-user 替换 localhost:7900
2配置要让这个application.name进行解析,到Eureka换成对应地址
ribbon和nginx比较
1)nginx(外网转内网,没有进行业务加工)基于C语言,快速,性能高达5w/s
redis 5w/s,RibbitMQ (进行了业务加工)1.2w.s,ApacheActiveMQ 0.6w/s
kafuka 20w/s~50w/s大数据用(可以丢失数据,大数据取的是近似值)
Zuul2.0 200w/s
负载均衡、反向代理、代理后端服务器。隐藏真实地址,防火墙设置真实地址不能外网直接访问
2)Ribbon负载均衡,前端,客户端开始导向(转向)
二、nginx只用一个公网端口转发多个内网服务
一个常见的问题,生产环境的一台有公网ip的服务器,为了安全起见,运维只给开一个端口,于是考虑用nginx根据url的前缀路径来转发到不同服务。例如:
以springboot工程为例,我们自己的web服务一般都会通过设置
来给该服务的所有url设置一个统一的前缀路径 /xxxxxx 。这时候nginx就可以将所有带有前缀 /xxxxxx 的请求转发到该服务。这是一个很简单的事。
问题是有很多第三方服务,例如kafka manager,他是没有这样的前缀的,假设kafka安装在 192.168.0.182 机器上,kafka manager的访问地址就是 http://192.168.0.182:3000 ,我们当然可以在首次访问时通过地址 http://192.168.0.182:3000/kafka 让nginx根据 /kafka 识别到这是kafka manager服务并转发到 http://192.168.0.182:3000 ,但是我们打开kafka manager页面上的链接时是不会有我们自己添加的 /kafka 前缀的,上面的方法失效。
我们都知道http服务是无状态的,就像上面所说即使访问了kafka manager的主页,点击主页上按钮发起的请求也无法被识别为kafka manager请求。但是web服务绝大多是都是需要有状态的,主要有session/cookie、token两种方式来解决这个问题。也可以用来解决上面的问题。
在nginx中配置:
这时候又有一个问题,使用同样的ip:port来访问这些服务,在浏览器看来所有的服务都是一个域的,他们的cookie就会是同一个cookie,这时候nginx没办法根据cookie的不同转发到不同的服务。
我们想到了给每个服务配置一个域名(没有那么多公网域名可用,就在本地hosts文件配置了),产生跨域的效果,让不同的服务有独立的cookie。
从来都是解决跨域问题,从没想过有一天要主动跨域
如果配置了域名,完全可以让nginx根据域名来做识别转发,为什么要用cookie呢?如果你都是配置了公网域名,那确实可以这么干,但是我们是改的hosts文件,保不齐谁的域名就写错了,或者因为只是本地hosts文件的修改根本就没必要统一域名,这时候根据域名做转发就不行了。
kafka manager的访问是不需要认证的,暴露在公网上、面向所有人是一件可怕的事,我们是设置了VPN和访问白名单。
三、10. Nginx实现反向代理
反向代理: reverse proxy, 指的是代理外网用户的请求到内部的指定的服务器, 并将数据返回给用户的一种方式, 这是用的比较多的一种方式
Nginx除了可以为企业提供高性能的web服务之外, 另外还可以将Nginx本身不具备的请求通过某种预定义的协议转发至其他服务器处理, 不同的协议就是Nginx服务器与其他服务器进行通信的一种规范, 主要在不同的场景使用以下模块实现不同的功能
生成环境部署架构:
访问逻辑图:
Nginx反向代理http服务:
1. proxy_pass
2. proxy_hide_header field
修改前, 响应报文头部会携带ETag信息
修改后ETag信息被隐藏
3. proxy_pass_header field
4. proxy_pass_request_body
5. proxy_pass_request_headers
6. proxy_set_header
由于proxy_set_header只是修改了请求报文的头部信息, 添加了自定义的字段, 因此, 还需要在后端服务器修改日志定义格式, 才能方便将客户端ip记录到日志信息中
注意1:通过set_proxy_header自定义变量只是给请求报文添加了一个自定义的字段, 其字段值是人为根据系统内置变量设定的
注意2: 这种方法, 在多级代理的情况下, 并不能将客户端ip, 逐层的传给后端服务器, 而是需要利用$proxy_add_x_forwarded_for变量实现
注意3: 如果一定要使用proxy_set_header去传递客户端ip和每一层代理的ip地址, 那么需要在每一层nginx代理都开启proxy_set_header, 并且设置不同的自定义变量去引用nginx自带变量$remote_addr, 这样每一级nginx都会记录上一级, 也就包括客户端的ip地址, 同时, 在后端服务器的日志格式中, 要添加多个nginx自定义的变量, 这样也可以把客户端ip和中间经过的代理的ip全部传递给后端的服务器
proxy_add_x_forwarded_for实现多级代理ip地址透传示例: 需要在每一级代理都开启
实验环境:
7. 有关反向代理时间的几个参数
8. proxy_ignore_client_abort
9. hash表大小的设置
客户端 ----- http协议 ------- nginx(代理服务器,10.0.0.86) ----- http --- apache (10.0.0.85)
客户端, 通过访问nginx上定义的虚拟主机中的server_name域名, 通过内部定义的location匹配规则, 被转发到10.0.0.85服务器
代理服务器与后端服务器连接出现问题可能发生的报错:
如果后端服务器想把图片资源放到固定的目录下, 也可以自定义, 比如存到/var/www/html/static, 那么nginx的location就要修改为如下:
缓存功能相关参数:
实验环境:
proxy_pass 可以让Nginx将客户端请求转发至后端单台服务器, 但是无法转发至特定的一组服务器, 而且不能对后端服务器提供相应的服务器状态监测.
Nginx可以基于 ngx_http_upstream_module 模块提供服务器分组转发, 权重分配, 状态监测, 使用不同的调度算法等高级功能
关于ip_forward
注意: 本实验过程要先关闭缓存
访问固定的URI会被调度到相同的服务器
四、通过 Nginx 的正向代理审计监控内网用户的外网访问记录
一个位于客户端和目标服务器之间的 Nginx 正向代理服务器, 客户端向 Nginx 正向代理发送一个请求并指定目标服务器,然后代理向目标服务器转交请求并将获得的内容返回给客户端及本地代理服务器缓存
适用场景:
正向代理又细分为 http、https 流量的 透明代理 和 非透明代理
如何代理加密的 HTTPS 流量是正向代理需要解决的主要问题, 当前主要的两种方式:
1、透明代理, 利用本机 hosts 或 DNS 解析待访问的目标域名到代理服务器 Ip
2、非透明代理, 需在客户终端设置代理服务器信息
1、HTTP CONNECT 隧道 方式(非透明代理)
2、NGINX Stream 方式(HTTPS 流量的透明正向代理)
以上就是关于nginx内网转外网相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。
推荐阅读: