以前用ngrok,后来ngrok被封了,之后用过国内的第三方ngrok服务,不太稳定,遂改用vps端口转发,沿用至今。
本文简单介绍下设置方法。
准备条件
- vps一台
-
备案域名(二级域名)也可以
设置方法
域名解析和设置
-
在微信公众号后台设置好url,需用备案域名、80端口
-
解析域名,指向vps的ip
配置nginx上的监听:
server {
listen 80;
server_name mp.suanbing.com;
location / {
proxy_pass http://127.0.0.1:18001;
proxy_set_header X-Real-IP $remote_addr;
}
}
重新加载nginx后,所有对http://mp.suanbing.com 的请求将转到该服务器上的18001端口。
本地端口映射
在本地开发机器上开一个到服务器的转发通道。
ssh root@mp.suanbing.com -R 18001:127.0.0.1:8000
启动本地端口监听
在本地开发机器上自动一个端口为8000的web服务。
问题处理
ssh连接有时意外中断,重新连接时总是提示无法在本地监听端口:
Warning: remote port forwarding failed for listen port 18001
经检查,发现ssh连接端口还在监听:
# lsof -i tcp:18001
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 23497 root 8u IPv4 536866 0t0 TCP localhost:18001 (LISTEN)
sshd 23497 root 10u IPv4 537985 0t0 TCP localhost:18001->localhost:35228 (CLOSE_WAIT)
sshd 23497 root 13u IPv4 538151 0t0 TCP localhost:18001->localhost:35229 (CLOSE_WAIT)
sshd 23497 root 14u IPv4 538159 0t0 TCP localhost:18001->localhost:35230 (CLOSE_WAIT)
sshd 23497 root 15u IPv4 539373 0t0 TCP localhost:18001->localhost:35231 (CLOSE_WAIT)
# netstat -tlnp |grep 18001
tcp 0 0 127.0.0.1:18001 0.0.0.0:* LISTEN 23497/sshd: root@pt
因此,还需要重启sshd服务,关闭之前的端口连接:
service sshd restart
或者用who命令查出ssh的连接进程,将其kill 掉:
[root@suanbing ~]# who
root pts/0 2016-11-11 16:53
root pts/1 2016-11-11 16:58
root pts/2 2016-11-11 17:01
root pts/3 2016-11-11 17:23
[root@suanbing ~]#
[root@suanbing ~]#
[root@suanbing ~]# man fuser
[root@suanbing ~]# fuser -k /dev/pts/0
/dev/pts/0: 24898
[root@suanbing ~]# fuser -k /dev/pts/1
/dev/pts/1: 24934
[root@suanbing ~]# fuser -k /dev/pts/2
/dev/pts/2: 25040
[root@suanbing ~]# fuser -k /dev/pts/3
/dev/pts/3: 25190