Nginx实现内网服务唯一端口外网映射

原文地址:https://www.cnblogs.com/relax-zw/p/9922144.html

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上,这里不做相关验证

此处略