localtunnel

简介

localtunnel可以将内网服务器暴露到外网服务器(将我们本地电脑的项目暴露到互联网供用户访问)

客户端

下载 npm i -g localtunnel

如果我们本地运行的项目在8080端口,我们通过以下命令可以将本地的8080端口暴露到互联网上面

1
2
3
lt --port 8080
会提示你:
your url is: https://grumpy-donkey-2.localtunnel.me

地址栏输入 https://grumpy-donkey-2.localtunnel.me就可以访问我们本地的8080端口项目了

注意: lt默认使用的域名是国外的服务器,经常性的不稳定,而且响应速度也不是很理想,我们可以把源码拉到我们自己的服务器,部署lt服务

注意第一次访问需要提交密码,密码获取:https://loca.lt/mytunnelpassword

服务器端

  • 下载安装

    1
    2
    3
    git clone git://github.com/defunctzombie/localtunnel-server.git
    cd localtunnel-server
    npm install
  • 启动lt server

    1
    2
    3
    4
    5
    $ node -r esm bin/server --port 5000 //让程序在前台运行,终端如果关闭的话,程序也就退出了
    $ nohup node -r esm bin/server --port 5000 &//让lt 服务以守护进程的形式运行
    $ lsof -i :5000 //发现已经在后台运行了
    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    node 32689 root 12u IPv4 3254700 0t0 TCP *:commplex-main (LISTEN)

客户端使用自己的服务器

  • 客户端使用(假设还是将本地的8080端口暴露到官网)

    1
    2
    3
    lt --host http://youself_domain.com:5000 --port 8080
    会提示你:
    your url is: http://horrible-robin-16.youself_domain.com:5000
  • 通过访问http://horrible-robin-16.youself_domain.com:5000就可以访问本地的8080端口服务了,但是我们发现二级域是一个随机字符串,没事启动的时候都会变化的,有的时候我们不希望变化,比如做微信开发的时候

  • 通过指定

    1
    --subdomain

    来指定固定的二级域名

    1
    2
    3
    lt --host http://youself_domain.com:5000 --port 8080 --subdomain localtunnel
    会提示你:
    your url is: http://localtunnel.youself_domain.com:5000
  • 通过访问固定域名就可以访问本地的固定的ip服务了 http://localtunnel.youself_domain.com:5000

服务器nginx反向代理

  • 像微信后台填写开发者服务器地址的时候,是不能带有端口号的,但是我们上面的服务在服务器端启动的时候又不能指定成80端口号(默认是80端口号,所以我们启动的时候需要指定非80端口号),之所以不能指定非80端口号是因为我们服务器的一般都会安装nginx,而nginx启动默认应该是80端口号,所以不能冲突
  • 所以我们要想我们启动的lt 服务是通过域名并且是80端口号访问的话就需要通过nginx 做反向代理,配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
server_name youself_domain.com localtunnel.youself_domain.com;

root /usr/local/www;
error_log /usr/local/nginx/logs/error.log;

location / {

proxy_pass http://127.0.0.1:5000;

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto http;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;

proxy_redirect off;
}
}
  • 现在我们就可以直接通过80端口访问我们的服务器lt服务了

    1
    2
    3
    lt --host http://youself_domain.com --port 8080  --subdomain localtunnel
    会提示你:
    your url is: http://localtunnel.youself_domain.com
  • 地址栏输入http://localtunnel.youself_domain.com就可以访问我们本地的80端口服务了, 并且也可以把该地址填入微信开发者后台用来访问我们本地的服务了,并且在本地进行调试