何を见てるの?君のこと见てるよ

0%

利用外网服务器实现内网端口反向代理

当在内网服务器部署了一些服务时,我们在内网下可以很方便访问,但是当我们在外网的时候,就没法直接的访问内网的服务了,这时候可以通过内网穿透来实现访问内网服务,本篇文章记录下通过公网云服务器实现反向代理的方法

1、准备

  • 内网服务器一台
  • 外网的云服务器一台(安装配置Nginx)

2、服务器配置ssh

在两台服务器都配置ssh,然后为了实现免密访问,可以使用ssh-keygen -t rsa命令产生密钥对,然后将~/.ssh/下的id_rsa.pub中的内容,拷贝到另一台服务器同样路径下的authorized_keys文件中(如果不存在就创建一个)

在内网服务器安装autossh

1
sudo apt-get install autossh

3、内网服务器配置反向代理

命令格式

1
2
3
4
5
6
7
8
ssh -fCNL 
-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
-L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口
-p 指定远程主机的端口
ssh -fCNR [B机器IP或省略]:[B机器端口]:[A机器的IP]:[A机器端口] [登录B机器的用户名@服务器IP]

内网服务器反向代理ssh(22)和其他服务(9000)

将内网服务器9000端口访问的服务反向代理到外网云服务器的9001端口

1
2
ssh -fCNR 9001:localhost:9000 root@114.115.156.32
ssh -fCNR 7000:localhost:22 root@114.115.156.32

使用autossh,可以自动重新连接

1
2
autossh -M 1314 -fCNR 9001:localhost:9000 root@114.115.156.32
autossh -M 1315 -fCNR 7000:localhost:22 root@114.115.156.32

4、外网云服务器使用nginx进行端口转发

如果云服务器中安装配置好Nginx后,在配置文件中修改,添加端口本地端口转发代理如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 9000;
server_name localhost;

location / {
proxy_pass http://127.0.0.1:9001 ;
proxy_set_header Host $host:9000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Via "nginx";

}
}

注意这里非80端口转发,需要在proxy_set_header Host中设置和listen端口保持一致
注意云服务器需要去安全组管理中开放相对应的转发端口9000