美文网首页
远程异地调试高阶玩法

远程异地调试高阶玩法

作者: 爱学习的猫叔 | 来源:发表于2020-12-25 15:11 被阅读0次

    [TOC]

    背景

    工作地在武汉的A同学,需要远程部署一套后台服务或者前端服务亦或者APP在上海,而且部署环境在局域网(互联网无法访问),这个时候最常见的方式有3种

    1. 基础的代码在本地写完,然后出差去上海完成调试部署工作
    2. 基础的代码在本地写完,用远程工具(向日葵、ToDesk、TeamViewer)传包,看日志远程调试
    3. 直接去上海完成开发对接工作

    疫情原因,不到万不得已才会选择出差去客户现场调试安装部署,那有没有工具能将异地局域网的环境转发到互联网环境呢,这样的话不就跟本地调试效果一样了吗,今天它来了。

    异地组网方案

    熟悉后台的开发肯定没少接触Nginx,平时我们主要用它来做网络路由转发,今天就可以用它来做内网路由转发,为了方便操作步骤的描述,武汉的公网环境,以下简称主机A,上海的内网环境,以下简称主机B

    注:这里有个很重要的限制条件,主机B必须是双网环境,也即既能访问上海的内网环境,又能访问互联网的环境,主机A能通过互联网的远程工具访问到主机B

    操作步骤

    1. 主机B下载nginx程序并安装,安装完成后修改nginx.conf配置文件(在conf目录下),双击nginx.exe运行并查看nginx进程是否运行正常

      智慧社区-南湖image-20201225143259106.png
    注:nginx官网 http://nginx.org/en/download.html
    
    1. 主机A和主机B分别下载安装蒲公英程序,注册蒲公英账号,主机A和主机B同时登录刚刚注册的账号
    智慧社区-南湖image-20201225145408205.png
    智慧社区-南湖image-20201225143947815.png

    注:蒲公英官网 https://pgy.oray.com/download/

    可以看到主机A的内网IP是172.16.3.202,主机B的内网IP是172.16.2.126,如果生产环境需要访问以下url

    http://100.128.31.117:8080/consume/addInfo
    

    通过配置nignx.conf文件即可将100.128.31.117转发到172.16.2.126,在武汉的同学可以访问以下url就能访问到主机B的内网,完成了这两步操作,主机A就能在本地开心的调试(关键是不用出差了,哈哈。。。),再也不用经历加了一句log就要换包的痛苦了。

    http://172.16.2.126:8080/consume/addInfo
    

    nginx.conf配置文件配置方案

    #定义Nginx运行的用户和用户组
    #user  nobody;
    
    #nginx进程数,建议设置为等于CPU总核心数。
    worker_processes  1;
    
    #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
    error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #进程文件
    #pid    logs/nginx.pid;
    
    #工作模式与连接数上限
    events {
    #参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
    #   use epoll;
    #单个进程最大连接数(最大连接数=连接数*进程数)
        worker_connections  1024;
        accept_mutex on;
        multi_accept on;
    }
    
    #缓冲区
    #fastcgi_buffers 8 128k;
    
    #超时参数
    #send_timeout 60;
    
    #sudo nginx -c /Users/chendongmei/work/nginx/gm-nginx.conf
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
        index x.html;
        #client_header_buffer_size 512k;
        large_client_header_buffers 4 512k;
        server_names_hash_bucket_size 64;
        sendfile        on;
        
        keepalive_timeout  65;
        gzip  on;
        gzip_min_length  1k;
        gzip_buffers    4 8k;
        gzip_comp_level 3;  #0-9
        gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss;
    
    
        #log_format upstreamlog '[$time_local] $remote_addr - $remote_user - $server_name  to: $upstream_addr: $request upstream_response_time $upstream_response_time msec $msec request_time $request_time';
        log_format access '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent $request_body "$http_referer" "$http_user_agent" $http_x_forwarded_for';
    
        server {
            listen       8080;
            index index.html;
            autoindex on;
            ssi  on;
            limit_rate 2000k;
            client_max_body_size 2048m;
            
            location ^~ /{
            proxy_pass          http://100.128.31.117:8080/;
            proxy_redirect      default;
            proxy_http_version  1.1;
            proxy_set_header    Connection "";
            proxy_set_header    Host    $host:$server_port;
            proxy_set_header    X-Real-IP $remote_addr;
            proxy_set_header    X-Forwarded-Host $host;
            proxy_set_header    X-Forwarded-Server $host;
            proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
            }
        }
        
        server {
            listen       3306;
            index index.html;
            autoindex on;
            ssi  on;
            limit_rate 2000k;
            client_max_body_size 2048m;
            
            location ^~ /{
            proxy_pass          http://100.61.8.81:3306/;
            proxy_redirect      default;
            proxy_http_version  1.1;
            proxy_set_header    Connection "";
            proxy_set_header    Host    $host:$server_port;
            proxy_set_header    X-Real-IP $remote_addr;
            proxy_set_header    X-Forwarded-Host $host;
            proxy_set_header    X-Forwarded-Server $host;
            proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
            }
        }
     
        access_log  logs/access.log;
    
    }
    

    遇到的问题

    1、无法转发JDBC的请求,因此数据库无法通过此映射的方式访问

    2、无法转发音视频流,因此无法通过该方式异地播放音视频

    3、如果环境做了多次远程,该方式依旧不行(也即主机A访问到主机B后,还得通过主机B再访问另外一个内网主机C并将服务部署在主机C上,且C主机不具备互联网环境,这种就没法玩了)

    相关文章

      网友评论

          本文标题:远程异地调试高阶玩法

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