美文网首页程序员技术栈springboot高级
通过 nginx 简易实现内网穿透

通过 nginx 简易实现内网穿透

作者: Nondeterminacy | 来源:发表于2019-05-09 11:43 被阅读20次

    原文链接:https://blog.zhuliang.ltd/nginx/nginx-nat/

    转载请注明出处。

    当开始进行小程序开发的时候,https是绕不过的一道环节,除了微信提供的ssl 服务器架设方案,还有花生壳内网穿透服务,自行在内网架设DNS服务器等方案。而本文所要讲解的,是通过外网nginx服务器反向代理来实现内网穿透。

    前置条件:

    1.路由器需支持端口转发。

    2.需有公网IP,固定不固定无所谓。

    3.在公有云上架设nginx(本文使用阿里云ECS通过linux搭建nginx),通过反向代理实现内网穿透。

    在路由器上设置端口转发

    这里以TP-LINK:TL-R473G为例。

    TP-LINK的端口转发在【高级功能】--【虚拟服务器】选项卡下,具体如下:

    image

    注意事项

    1. 在使用端口转发的时候,尽量不要用XXX0(如8000,8080端口)端口,有不小概率会有冲突(如路由器内部保留端口可能会跟实际设定的端口有冲突)。改为使用8001,8081这样子。
    2. TL-R473G默认占用了8080端口作为认证服务端口(且自行修改后依然无效,目前猜测是固件问题导致,时间问题,就自我先规避该端口了)
    3. 确保防火墙(路由器,服务器)已经允许设定的端口,可以通过手机(4G网络下),直接根据“IP:端口”的形式来测试是否对外暴露成功。
      • 不要在同一局域网内进行测试,不少路由器和光猫回源有问题,尤其是电信的光猫,让师傅上门过几次,都表示无解,无法设定,硬件上做限制了。

    配置:

    在linux服务器上新建一个内网穿透配置文件,专门用于设定公司内部网络的穿透配置。

    以下配置文件为简易配置,对于有其他具体需求的,请自行增加nginx相关设定参数。

    http 80端口映射

    配置文件:

    upstream pre_xxx_api {
            server 111.222.333.444:8081; #设定具体的公司公网ip跟对应端口转发的端口号
    }
    
    server {
            listen 80;
            server_name pre-xxx-api.XXYY.com;
            location / {
                    index index.html index.htm;
                    proxy_pass http://pre_xxx_api/;
            }
    }
    
    • wq保存退出-->nginx -t -->nginx -s reload-->查看结果

    https 443端口映射

    关于SSL证书,我这边是直接在阿里云购买的域名,可以直接在控制台申请免费的SSL证书以及自动关联设定SSL解析。(但阿里提供的免费证书,在chrome上不会显示绿色安全标---赛门铁克的锅,介意的可以直接到腾讯云上申请免费证书),这里非本文重点,仅略说明。

    准备工作:

    1. 将申请的SSL证书文件,如pem/crt以及key上传到linux服务器上(注意相关目录和文件给好权限,测试用直接给777即可)

    2. 域名解析,将相关域名解析到 nginx所在服务器的ip上。

    配置文件:

    upstream pre_ssl_api {
            server 111.222.333.444:8081;
    }
    
    server {
            listen 443 ssl; # 这里很重要,网上资料复制粘贴太严重了,在设定https的时候,listen端口的时候,务必在443后面加上"ssl",否则chrome会报"ERR_SSL_PROTOCOL_ERROR"的错误
            server_name pre-ssl-api.XXYY.com;
            ssl_certificate      /usr/local/etc/nginx/ssl-key/XXX.pem;
            ssl_certificate_key  /usr/local/etc/nginx/ssl-key/YYY.key;
            ssl_session_timeout 5m;
            ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
            ssl_prefer_server_ciphers on;
    
            location / {
                    index index.html index.htm;
                    proxy_pass http://pre_ssl_api/;
            }
    }
    
    • wq保存退出-->nginx -t -->nginx -s reload-->查看结果

    相关文章

      网友评论

        本文标题:通过 nginx 简易实现内网穿透

        本文链接:https://www.haomeiwen.com/subject/mffwoqtx.html