起因

有的时候打算用一下公司电脑的资源,不过公司的电脑肯定是没有外网ip的,所以要做流量转发,把公司电脑某个端口的流量转发到一台有外网ip服务器的端口上面。

这里需要一台有外网ip的服务器,然后通过访问”外网ip:port”的方式,就可以访问到公司电脑上部署的http服务。我这块需要的http服务是ipython notebook,可以十分方便的编写python代码。

启动ipython notebook

这里先启动ipython notebook。

1
ipython notebook --ip=0.0.0.0

流量转发

接下来,我们需要做流量转发,首先保证ssh免登陆已经弄好。

免登陆可以通过ssh-copy-id来进行配置。

1
ssh-copy-id user@hostname

然后,通过以下命令,我们可以把内网的8888端口的流量,转发到服务器的7777端口。

1
nohup ssh -gR 7777:hostname:8888 user@hostname "vmstat 30" &

也就是访问hostname的7777端口就相当于访问公司电脑的8888端口了。

nginx代理配置

按理说,到上面的配置已经结束了。但是我发现并不行。这里通过尝试,我发现在服务器的内部可以通过w3m命令(w3m是linux上的一款无界面的浏览器,可以通过apt-get安装)访问到7777端口。所以我估计是7777端口只绑定到了服务器的内网中,并没有放到公网。

我现在通过nginx反向代理到本地的7777端口,才能访问ipython notebook。

经过搜集资料,我找到了ipython notebook的nginx配置如下:

1
2
3
4
5
6
7
8
9
10
server {
listen 6666;
location / {
proxy_pass http://127.0.0.1:7777/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Origin "";
}
}

到这里,重启nginx,发现访问http://hostname:6666就可以了。