远程异地调试高阶玩法

2020-12-25  本文已影响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主机不具备互联网环境,这种就没法玩了)

上一篇下一篇

猜你喜欢

热点阅读