通过 nginx 实现内网穿透
小程序开发的时候, https 是绕不过的一道环节,除了微信提供的 ssl 服务器架设方案,还有花生壳内网穿透服务、自行在内网架设 DNS 服务器等进行解决。本文所要讲解的,是通过外网 nginx 服务器反向代理来实现内网穿透。
前置条件:
1.路由器需支持端口转发。
2.需有公网 IP ,固定不固定无所谓。
3.在公有云上架设 nginx (本文使用阿里云 ECS 通过 linux 搭建 nginx),通过反向代理实现内网穿透。
在路由器上设置端口转发
这里以 TP-LINK:TL-R473G 为例。
TP-LINK的端口转发在【高级功能】–【虚拟服务器】选项卡下,具体如下:
注意事项
-
在使用端口转发的时候,尽量不要用 XXX0(如 8000,8080 端口)端口,有不小概率会有冲突(如路由器内部保留端口可能会跟实际设定的端口有冲突)。改为使用 8001,8081 这样子。
-
TL-R473G 默认占用了 8080 端口 作为认证服务端口(且自行修改后依然无效,目前猜测是固件问题导致,时间问题,就自我先规避该端口了)
-
确保防火墙(路由器,服务器)已经允许设定的端口,可以通过手机( 4G 网络下),直接根据 “ IP:端口 ” 的形式来测试是否对外暴露成功。
- 不要在同一局域网内进行测试,不少路由器和光猫回源有问题,尤其是电信的光猫,让师傅上门过几次,都表示无解,无法设定,硬件上做限制了。
配置:
在 linux 服务器上新建一个内网穿透配置文件,专门用于设定公司内部网络的穿透配置。
以下配置文件为简易配置,对于有其他具体需求的,请自行增加 nginx 相关设定参数。
http 80端口映射
配置文件:
1 | upstream pre_xxx_api { |
-
wq保存退出–>nginx -t -->nginx -s reload–>查看结果
https 443 端口映射
关于 SSL证书 ,我这边是直接在阿里云购买的域名,可以直接在控制台申请免费的 SSL证书 以及自动关联设定 SSL解析 。(但阿里提供的免费证书,在 chrome 上不会显示绿色安全标—赛门铁克的锅,介意的可以直接到腾讯云上申请免费证书),这里非本文重点,仅略说明。
准备工作:
将申请的 SSL证书 文件,如 pem/crt 以及 key 上传到 linux 服务器上(注意相关目录和文件给好权限,测试用直接给 777 即可)
域名解析,将相关域名解析到 nginx 所在服务器的ip上。
配置文件:
1 | upstream pre_ssl_api { |
-
wq保存退出–>nginx -t -->nginx -s reload–>查看结果