使用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 ...
随机推荐
- C# WebApi 全局配置模型验证和自定义错误处理。config Filters Add ModelStateValidationFilter/CustomExceptionFilter
public static void Start() { logger.Debug("Startup WebAPI..."); SwaggerConfig.Register(); ...
- biancheng-Python机器学习算法
http://c.biancheng.net/ml_alg/ Python机器学习 就当下而言,Python 无疑是机器学习领域最火的编程语言,这得益于 Python 对科学计算的强大支持.因此,本套 ...
- canal源码分析简介-3
5.0 store模块 2018-10-08 23:14:58 8,328 7 1 store模块简介 store模块用于binlog事件的存储 ,目前开源的版本中仅实现了Memory内存模式.官 ...
- WAIC 2024,好city啊!
7月4日,"以共商促共享•以善治促善智"为主题的2024世界人工智能大会暨人工智能全球治理高/级别会议(简称"WAIC 2024")在上海举办.天翼云携智算创新 ...
- Q:su命令无法切换用户问题,密码正确可登录
一.文件权限问题 查看文件权限: ll -a /bin/su /usr/bin/passwd 正确的结果为: 错误的结果为: suid和普通x执行权限 s:当普通用户使用su的时候,采用的是owner ...
- IDEA Spring Boot项目,排查解决maven包冲突
一.Idea安装插件 下载方式1:插件名称:maven helper 打开Idea设置,搜索安装该插件 下载方式2:https://plugins.jetbrains.com/plugin/7179- ...
- AtCoder [ABC351E] Jump Distance Sum 题解 [ 绿 ] [ 数学 ]
原题 场上差点就想出来了,就差一个旋转坐标轴了. 初步分析 首先来看如何判断两个点能不能走到,这可以看成下面的一张网格图,相同颜色的格子相互连通. 因此根据瞪眼法,可以把这些格子分为 $ (x_i + ...
- led色块是什么,bin指值是什么
色块其实就是色温的区域范围. LED的色温按标准是分段的, 既然是分段,就有一个最大值和最小值,在色坐标系中是一个,X和Y的坐标对应的也就有一个最大值和最小值,这样一个色温段就是以小块的区域,即所谓的 ...
- 另类方式实现.Net下的多语言
前言 关于.Net下的多语言方案已经有很多成熟的方案,例如:# Avalonia 国际化之路:Resx 资源文件的深度应用与探索,或者# Avalonia使用XML文件实现国际化,基本都围绕官方的Sa ...
- 从零构建你的第一个RESTful API:HTTP协议与API设计超图解指南 🌐
title: 从零构建你的第一个RESTful API:HTTP协议与API设计超图解指南 date: 2025/2/26 updated: 2025/2/26 author: cmdragon ex ...