nginx实现内网服务唯一端口外网映射
2.1 内网服务唯一端口外网映射
(一) 组网图
(二) 简要说明:
如标题所示,该功能可以实现内网环境下所有服务端口通过nginx的正向代理通过唯一端口映射至外网环境;且当本地服务设置特定域名后,外网可直接使用内网服务自定义的域名加映射端口进行访问。
如下图:
实现功能:外网访问各个服务自定义的域名+统一的映射端口进行访问。
可解决问题:
(一) 映射端口量实现无限量
有效解决内网路由端口数量不足的情况,由于常规的路由器对外可支持的映射端口为20个,当需求量超出时,只有手动更换对应的映射端口;但是有了nginx,我们只需要在配置文件中加入需要映射的服务信息即可实现对外映射的需要,且路由无需做任何改变。
(二) 安全系数增加
a) 由于内网映射的服务自定义了访问域名,在不知道相应服务域名的前提了,公共环境是无法访问对应的内网服务的。
b) 由于公网中对外仅提供了唯一的映射端口,即使访问者知道你的公网IP及端口,由于nignx可以自定义设置默认访问页面,对于访问者来说,内网的所有服务均处于相对安全状态下。
(三) nginx配置:
#user nobody;
worker_processes 1; #开启niginx工作进程,一般几个CUP核心写几个
error_log /usr/local/nginx/logs/error.log; #启动日志存放路径设置
events {
worker_connections 1024; #一个进程能同时处理1024个请求
}
http {
#开启gzip压缩
gzip on;
#设置允许压缩的页面最小字节(从header头的Content-Length中获取) 建议大于1k
gzip_min_length 1k;
#以16k为单位,按照原始数据大小以16k为单位的4倍申请内存
gzip_buffers 4 16k;
#识别http协议的版本,早起浏览器可能不支持gzip自解压,用户会看到乱码
gzip_http_version 1.1;
#等级1-9 最小的压缩最快 但是消耗cpu
gzip_comp_level 4;
#匹配压缩类型
gzip_types text/plain text/css test/javascript application/json application/javascript application/x-javascript application/xml;
#设置需要压缩的数据格式
gzip_vary on; #启用应答头"Vary: Accept-Encoding"
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 访问日志配置
access_log /usr/local/nginx/access.log;
upstream mytomcat123{
server 192.168.1.119:15588;
}
upstream isatomcat{
server 192.168.1.119:15587;
}
upstream isatomcat60{
server 192.168.1.60:15587;
}
#设定虚拟主机配置1
server {
listen 88;
server_name mytomcat123;
#同一端口外网映射后,使用不同ip访问不同的内网服务
charset utf-8;
access_log logs/host.access.log;
error_log logs/host.error.log;
location / {
proxy_pass http://mytomcat123;
root html;
index index.html index.htm;
}
}
#设定虚拟主机配置2
server {
listen 88;
server_name isatomcat;
#同一端口外网映射后,使用不同ip访问不同的内网服务
charset utf-8;
access_log logs/host.access.log;
error_log logs/host.error.log;
location / {
proxy_pass http://isatomcat;
root html;
index index.html index.htm;
}
}
#设定虚拟主机配置3
server {
listen 88;
server_name isatomcat60;
#同一端口外网映射后,使用不同ip访问不同的内网服务
charset utf-8;
access_log logs/host.access.log;
error_log logs/host.error.log;
location / {
proxy_pass http://isatomcat60;
root html;
index index.html index.htm;
}
}
}
测试配置文件备份:
注意红色标记,这里配置了3个内网服务,
192.168.1.60:15587(服务别名为: tomcat60)
192.168.1.119:15587(服务别名为:tomcat)
192.168.1.119:15588(服务别名为:mytomcat123)
同时监听的端口是88,我这里将其映射至外网,外网访问端口为10388
(四) 本地配置域名解析便于外网访问
目的:快速定位解析访问域名
注意:由于目前公司内部使用的是免费的域名解析工具,会出现域名解析异常导致的访问失败的情况(老问题),在不影响工作的情况建议直接使用外网IP的方法来规避此类问题。
a) Windows配置访问验证
访问C:\Windows\System32\drivers\etc 下打开hosts文件 加入
relaxsystem027.gnway.cc isatomcat isatomcat60 mytomcat123
Windows下尝试访问:
如下图所示
我们可以看到3台服务已经可以使用外网映射的公共端口通过自定义的域名进行访问了。莫名的感觉到很强,有没有。
注意:使用公网域名加映射端口访问时,默认跳转到的是nginx配置的第一个虚拟服务路径;这里就实现了访问安全策略。
b) Linux配置访问验证
访问编辑/etc/hosts
Linux下访问
考虑到访问客户端应用场景应该都是使用windows上,这里不做相关验证
此处略
nginx实现内网服务唯一端口外网映射的更多相关文章
- [已解决]通过多层nginx,tomcat服务无法获取外网真实IP
问题描述: 使用腾讯的御天验证码,提示IP非法IP,内网的tomcat,经过2层nginx代理,服务获取的IP地址为内网ip地址,由于腾讯云的御天验证码对单一IP的频繁访问有拦截的,认定为非法IP(刷 ...
- (转)内网网站发布到外网-nat123动态公网IP动态域名解析
环境描述: 路由器分配的是动态公网IP,且有路由器登录管理权限,网站服务器部署在路由器内部网络.如何将内网网站发布到外网大众访问? 解决方案: 内网使用nat123动态域名解析,将域名实时固定解析到路 ...
- 实现外网远程桌面内网的电脑和外网访问内网的FTP
基于之前两篇文章搭建了ngrok实现了内网穿透,用过了http和https的协议完成了外网访问内网的网站,这一篇教大家用tcp协议实现外网远程桌面内网的电脑和外网访问内网的FTP. 一.外网远程桌面 ...
- Linux CentOS7 开启80,443端口外网访问权限
一.查看系统防火墙状态(如果返回 running 代表防火墙启动正常) firewall-cmd --state 二.开启端口外网访问 1.添加端口 返回 success 代表成功(--permane ...
- Linux CentOS7 开通端口外网端口访问权限
一.查看系统防火墙状态(如果返回 running 代表防火墙启动正常)firewall-cmd --state二.开启端口外网访问1.添加端口 返回 success 代表成功(--permanent永 ...
- 【转】CentOS5.6下配置rsync内网同步数据到外网
[转]CentOS5.6下配置rsync内网同步数据到外网 本文转自:http://www.linuxidc.com/Linux/2012-06/64070.htm 一.需求 卫士那边有一个需求,就是 ...
- mysql 开放端口 外网访问
mysql 开放端口 外网访问 作者: moyixi 时间: April 24, 2018 分类: 默认分类,数据库,mysql 前提: 如果是云服务器,请先把安全组件相应的开发 查看服务器的端口33 ...
- sockets+proxychains代理,使内网服务器可以访问外网
Socks5+proxychains做正向代理 1. 应用场景: 有一台能上外网的机子,内网机子都不能连外网,需求是内网机子程序需要访问外网,做正向代理. 2. 软件 ...
- Docker 容器内无法通过 HTTP 访问外网
现象 内/外网 IP 和 域名 可以 ping 通 容器内无法访问宿主机所在内网及外网的 Web 服务(404) 通过 curl 查看返回头信息感觉是所有 Web 请求被中转到一个固定的 Nginx ...
随机推荐
- NetworkManager网络通讯_问题汇总(四)
此篇来填坑,有些坑是unet自身问题,而大部分则是理解不准确造成的(或者unity定义太复杂) 问题一: isLocalPlayer 值一直是false 出现场景:NetworkLobbyPlayer ...
- Android Studio配置Socks5代理后Gradle运行不正常
第一次在Mac上运行Android Studio,遇到了一系列问题,其中一个代理问题搞得我是不知所措,在此记录. 如果你遇到了如下图的问题,那么恭喜你你可能已经找到了解决方案也就是本文: 一般,我们为 ...
- Just For Test
Just For Test
- Caused by: java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required [ IDEA mybatis项目报错 ]
今天笔者用Springboot框架整合Mybatis做一个小小的项目: 代码写完,在运行项目时,IDEA给我报了3处错误: org.springframework.beans.factory.Unsa ...
- VSCode实现文献管理
1 常用文献管理软件 常用的文献管理软件有mendely,zotero,endnote和Papers(需要付费),具体对比参考链接1.1.1.2 笔者只用过Mendely,当时综合考虑挑了Endnot ...
- Weed:线段树
观察复杂度,是log级别以下回答询问的. O(1)?逗我kx呢? 自然而然地想到线段树. 学长讲的原题啊考场上还不会打. 线段树上的每个节点都表示一个操作区间. 线段树上维护的权值有3个:这个子区间一 ...
- Java自动化测试框架-10 - TestNG之测试结果篇
1.-测试结果 1.1-成功,失败和断言 测试被认为是成功的,如果它不引发任何异常完成,还是它扔的预期异常(请参阅文档expectedExceptions属性上找到的@Test注释). 您的测试方法通 ...
- 建议收藏备用:.net core使用QRCoder生成普通二维码和带Logo的二维码详细使用教程,源码已更新至开源模板
随着互联网越来越生活化,二维码的使用越来越普遍,不论是扫码支付还是扫码关注引流,似乎我们总是离不开二维码,那么很多需要推广的文章或社区想要自己的二维码,那么你是不是需要在网站直接提供给用户呢?很多开发 ...
- es ik 分词 5.x后,设置默认分词
1.使用模板方式,设置默认分词 注: 设置模板,需要重新导入数据,才生效 通过模板设置全局默认分词器 curl -XDELETE http://localhost:9200/_template/rtf ...
- 前端Vue中常用rules校验规则
前提 在 vue开发中,难免遇到各种表单校验,这里整理了网络上和自己平时高频率用到的一些校验方法.如果错误欢迎指出,后期不断补充更新. 1.是否合法IP地址 export function valid ...