使用 Nginx + SSH 实现内网穿透

nginx

一、前言

什么是内网穿透?

内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。简而言之,就是公网可以直接访问我们本地电脑上的服务。

为什么需要内网穿透?

很多时候,我们需要公网可以直接访问本地电脑上的服务。对于开发人员来说,最常见的一种情况就是微信开发。微信的开发模式配置、登录授权回调、支付通知等功能都需要有公网可以直接访问的地址。对于初次对接的开发人员来说,需要大量的调试工作,如果通过上传代码的方式进行开发,不但浪费时间还不方便调试。

二、实现

实现内网穿透的方法有很多,今天介绍使用 Nginx proxy_pass 配合 SSH 隧道实现内网穿透。请先准备好一台服务器,并安装 Nginx。

服务器上进行如下操作

在 Nginx 的配置文件中添加如下配置,并重启服务:

server {

    listen       80;
    server_name dev.test.com;        // 改为你的域名即可

    location / {
        proxy_pass http://127.0.0.1:8080;  // 开放一个本地端口,用来转发上面定义的 80 端口的内容
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Cookie $http_cookie;
    }

}

本地电脑进行如下操作

打开命令行并执行如下命令,回车后会提示输入服务器 root 账号的密码:

$ ssh -CNg -R 8080:127.0.0.1:8080 -o TCPKeepAlive=yes -o ServerAliveInterval=10 -o ServerAliveCountMax=2 -o ExitOnForwardFailure=yes root@dev.test.com

启动本地的 Web 服务,端口为 8080。在公网通过域名 http://dev.test.com/wechat/service 即可访问本地的 http://127.0.0.1:8080/wechat/service 服务。然后就可以愉快的在本地进行微信的开发调试了。

说明:8080:127.0.0.1:8080 中第一个 8080 是 proxy_pass 的端口,第二个 8080 是本地服务的端口,根据实际情况更改。

提示端口被占用

如果本地电脑断开后连不上,提示端口已占用,在服务器上运行如下命令:

$ lsof -i:8080

找到占用的进程,执行如下命令,kill 掉对应的进程,然后重新连接即可:

$ kill -9 进程ID

标签: none

不错,不错,对我有帮助! 我要打赏他!GO ->

添加新评论