nginx、frp实现支持https的微信调试(内网穿透 + 动态二级域名)

在微信开发调试中对于一般的单向请求,直接本地开发就行了,但是微信有许多接口需要回调,因此在开发环境调试这些需要回调的接口就需要有一个公网环境。

  • 方案

    • 方案一:百度可以找到许多类似于natapp的商家,购买一个域名然后通过下载商家的客户端软件配置就行了
    • 方案一:通过手机连接电脑wifi,同时设置代理为局域网电脑ip,最后通过电脑上的抓包工具修改目标地址,参考:https://www.cnblogs.com/hz-blog/p/wechat-local-debug-domain.html
    • 方案三:通过nginx + frp完成类似于natapp的动态二级域名的内网穿透,也就是本文教程
  • 环境说明

    • 公网且备案域名的服务器,安装nginx、frp(服务端)。ip:182.139.94.65,域名:www.abc.com
    • 局域网应用服务器,安装frp(客户端)。ip:192.168.1.2
  • 配置

    • nginx(公网服务器)
      • nginx.conf

        http {
            ......
            # 内网穿透 + https:[error] 6#6: *1 no resolver defined to resolve test.abc.com
            resolver 8.8.8.8;
        }
        
      • default.conf

        # 参考nginx https配置
        server {
            listen  443 ssl;
            server_name www.abc.com;
            ssl_certificate cert/3352148.pem;
            ssl_certificate_key cert/3352148.key;
            ssl_session_timeout 5m;
            ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
            ssl_protocols   TLSv1 TLSv1.1 TLSv1.2;
            ssl_prefer_server_ciphers   on;   
            location / {
                root   /usr/share/nginx/html;
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   /usr/share/nginx/html;
            }
            # 重点
            location ~* /frp/(.*?)/(.*) {
                proxy_pass http://$1.abc.com:8080/$2;
            }
        }
        
    • frp
      • frps.ini(公网服务器)

        [common]
        bind_port = 7000
        vhost_http_port = 8080
        subdomain_host = abc.com
        
      • frpc.ini(应用服务器)

        [common]
        server_addr = 182.139.94.65
        server_port = 7000
        
        [web1]
        type = http
        local_ip = 192.168.1.2
        local_port = 8001
        subdomain = test
        
  • 使用说明
    配置完成后,访问https://182.139.94.65/frp/test/swagger-ui.html,会转发至公网服务器的8080端口http服务,即https://test.abc.com:8080/swagger-ui.html,由于frps配置,请求被转换为https://182.139.94.65:8080/swagger-ui.html,并同时转发至frp客户端,根据frpc的配置,被转发至http://192.168.1.2:8001/swagger-ui.html。
    如果需要增加客户端,只需要新增或删除frp客户端配置,即能实现动态二级域名的https服务器扩张与收缩

  • 结语
    其实针对本教程,还有更简单的方式,那就是购买阿里云泛域名证书,然后直接使用frp进行subdomain的配置方式通信,可是使用泛域名的SSL证书收费昂贵,因此在证书只有一份的情况下,将证书配置在nginx下,并且在nginx的https配置中增加location /frp {...}转发至frp的vhost_http_port端口,然后在客户端与服务端使用subdomain的配置方式通信

你可能感兴趣的:(nginx、frp实现支持https的微信调试(内网穿透 + 动态二级域名))