使用Nginx反向代理本地服务(无固定公网IP通过端口映射公开的服务)的坑
使用Nginx反向代理本地服务(无固定公网IP通过端口映射公开的服务)的坑
前言:之前公司的服务器都是云服务器,性能比较差,而我们有一些内部使用的系统和极少数外部用户使用的系统,对资源有一定的要求,也不要求多少个的9的可靠性,于是我们买了一台服务器,将这类服务放在了本地。这一部分服务有时候也需要外网访问,非专线宽带80端口和443端口都不能使用,于是通过云服务器上的Nginx反向代理这部分服务,在这个过程中,踩了一些坑,这里记录下来
网络结构
在这个网络中,因为用公网IP,虽然不是固定的,还是可以通过使用其他端口的方式访问,但是用户在使用时就需要使用带端口号的地址,这样看起来不是很正规(主要是个人洁癖),于是设计成了这样的一个网络结构,可能有部分同学会觉得这样很浪费云服务器的带宽,这一点我也考虑过,我们的服务大部分是前后端分离项目,前端用了CDN,后端使用直接映射的域名和端口,不走代理,只有部分前后端不分离项目会耗带宽一点,但是大部分访问都是内网访问,已经通过内部的DNS直接解析到了本地地址,不会从云上绕一圈,因此带宽也是可以接受的
配置文件(有问题版)
server {
listen 80;
server_name a.domain.com c.domain.com c.domain.com;
location / {
proxy_pass http://local.domain.com:6666;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
这是一个常规的反向代理,因为以前一直这么用的,按照正常来说应该不会出问题,刚配上的时候,确实是可以的,然后到了下午,突然就无法访问了,查看Nginx错误日志
10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
最开始以为是配置的问题,经过仔细检查,发现配置确实没有错误,于是选择nginx -s reload重新加载,重新加载后服务又正常了,一时间不知道发生了什么,后来一阵搜索,发现是当使用域名作为反向代理时,Nginx会缓存域名解析后的IP地址,直到重启Nginx服务或重新加载配置文件,反向代理的域名使用DDNS服务将解析IP地址始终保持为对应的公网IP地址,但是毕竟是动态公网,每隔一段时间公网地址会刷新,刷新后Nginx还是反向代理的以前的IP地址,也就造成了服务无法访问
在搜索的问题的过程中,也找到了问题的解决办法,就是让域名解析后的地址不一直缓存,而是每隔一段时间刷新,Nginx的官方解决方案是resolver,下面是网上的关于resolver的
看完之后,对配置文件做了如下修改,反向代理到本地服务器就正常了
配置文件(修复版)
server {
listen 80;
server_name a.domain.com c.domain.com c.domain.com;
resolver 119.29.29.29 valid=30s;
set $loaclserver http://local.domain.com:6666;
location / {
proxy_pass $loaclserver;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
看了上面提到的大佬关于resolver的用法的文章,对配置文件做了一些修改,将代理的地址设为了变量,设置了解析域名的DNS服务器,解析值30秒过期,然后代理访问本地的服务就正常了
这中间有个小插曲,一度让我觉得这个方法没有作用,因为最开始我设置的DNS是114.114.114.114,这个DNS可能是国内公共DNS知名度最高的一个了,但是这个DNS好像没有刷新我的域名解析,在更改了解析值十多分钟后还是解析为原来的解析值,后来换了DNSPod的公共DNS,表示很好用
使用Nginx反向代理本地服务(无固定公网IP通过端口映射公开的服务)的坑的更多相关文章
- nginx反向代理本地 单台wed -使用ip+端口代理
环境: 本地外网ip:123.58.251.166 .配置index.html网页 [root@host---- conf.d]# cat /web/sing/index.html <h1> ...
- 在centos7.6上部署前后端分离项目Nginx反向代理vue.js2.6+Tornado5.1.1,使用supervisor统一管理服务
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_102 这一次使用vue.js+tornado的组合来部署前后端分离的web项目,vue.js不用说了,前端当红炸子鸡,泛用性非常广 ...
- Nginx反向代理+Tomcat+Springmvc获取用户访问ip
Nginx+Tomcat+Springmvc获取用户访问ip 1.Nginx反向代理 修改Nginx配置文件 location / { ***********之前代码*******; proxy_se ...
- nginx反向代理本地 两台web负载均衡 使用域名代理
环境: 本地外网ip:123.58.251.166 .配置index.html网页 [root@host---- conf.d]# cat /web/sing/index.html <h1> ...
- nginx反向代理本地 两台web负载均衡 使用ip+端口代理
环境: 本地外网ip:123.58.251.166 .配置index.html网页 [root@host---- conf.d]# cat /web/sing/index.html <h1> ...
- nginx反向代理本地 单台wed -使用域名代理
环境: 本地外网ip:123.58.251.166 .配置index.html网页 [root@host---- conf.d]# cat /web/sing/index.html <h1> ...
- NGINX反向代理,后端服务器获取真实IP
一般使用中间件做一个反向代理后,后端的web服务器是无法获取到真实的IP地址. 但是生产上,这又是不允许的,那么怎么解决? 1.在NGINX反向代理服务器上进行修改 2.修改后端web服务器配置文件 ...
- Nginx 反向代理时获取用户的真实 IP
在平时我们开发后端程序的过程中,应该多多少少都会碰到记录客户端 IP 的场景,例如我之前写过的 APP 用户的一个审计功能,就需要获取用户的 IP 地址:还有广告系统里面,也是需要获取用户的 IP 地 ...
- nginx反向代理后端web服务器记录客户端ip地址
nginx在做反向代理的时候,后端的nginx web服务器log中记录的地址都是反向代理服务器的地址,无法查看客户端访问的真实ip. 在反向代理服务器的nginx.conf配置文件中进行配置. lo ...
- Nginx 反向代理(http转htpps,并支持80端口继续提交post请求)
项目是一个web server + 多个client的形式,client由用户安装在自己的电脑上 由http升级为https后,我们通过在Nginx做了80端口重定向443的配置,使用户通过访问htt ...
随机推荐
- HashMap知识点
1.基本数据结构 1. JDK1.7 数组 + 链表 2. JDK1.8 数组 + (链表 | 红黑树) 2.树化与退化 1.树化意义 1.红黑树用来避免Dos攻击,防止链表过长时性能下降,树化应该是 ...
- w3cschool-Zookeeper 教程
参考https://www.w3cschool.cn/zookeeper/ Zookeeper 概述 ZooKeeper 是一种分布式协调服务,用于管理大型主机.在分布式环境中协调和管理服务是一个复杂 ...
- SpringSecurity详解
认证+授权代码实现 Spring Security是 一种基于 Spring AOP 和 Servlet 过滤器的安全框架.它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和 ...
- 推荐几个不错的 Linux 服务器管理工具
前言 选择一款好的 Linux 服务器管理工具能够极大地提高运维效率,保障业务连续性.今天大姚给大家分享3款不错的 Linux 服务器管理工具,希望可以帮助到有需要的同学. 1Panel 1Panel ...
- 转换流:InputStreamReader、OutputStreamWriter
1.转换流涉及到的类:属于字符流InputStreamReader:将一个字节的输入流转换为字符的输入流解码:字节.字节数组 --->字符数组.字符串 OutputStreamWriter:将一 ...
- 通过串口通信 对TCP传输层以下的理解
这可能是近期暂时最后一篇c嵌入式的文章了 基础的串口使用 参照网上的stm32教程套路引入标准库,初始化芯片手册上对应串口引脚 ,初始化stm32串口功能,然后有数据了就自然在寄存器上,就这样,你的波 ...
- 最大流的 Dinic 算法和 ISAP 算法
上期回顾:https://www.cnblogs.com/ofnoname/p/18678895 之前我们已经介绍了最大流问题的基本定义.最大流最小割定理.增广路径与残量网络的构建方法,以及如何利用这 ...
- NSSM:简化Windows服务配置,提升系统维护效率
NSSM:简化Windows服务配置,提升系统维护效率 在Windows系统环境中,服务的配置与管理是一项复杂而重要的任务.传统的服务管理方式往往涉及繁琐的步骤,不仅效率低下,还容易出错.然而,随着N ...
- 【忍者算法】从扫雷游戏到矩阵操作:探索矩阵置零问题|LeetCode 73 矩阵置零
从扫雷游戏到矩阵操作:探索矩阵置零问题 生活中的算法 想象你在玩扫雷游戏,当你点到一个地雷时,不仅这个格子会被标记,与它同行同列的格子也都会受到影响.或者想象一个办公室的座位表,如果某个位置发现了感染 ...
- Hetao P1031 萌萌题 题解 [ 蓝 ] [ 线性 dp ]
萌萌题:一道结合了观察性质的线性 dp. 观察 我们先考虑极端情况:所有数相同,所有数降序排列两种情况. 对于所有数相同的情况,我们发现,最终可以合并出来的区间,最多只有 \(n \log n\) 个 ...