
frp+nginx代理内网git仓库到外网(居家办公必备!)
场景
公司 git 仓库一般都禁止外网访问,但是有时候需要在家里办公,如果公司有 vpn 还好,如果没有 vpn,家里的电脑压根就没办法正常拉代码
根据这种情况,做了一个临时的方案:frp + nginx + 云服务器(做内网穿透) 快速实现外网访问内网 git 仓库,随用随开,用完即关
前提条件
(角色:外网电脑):一台云服务器或者有公网 ip 的电脑即可,用作 frp 服务端
(角色:公司电脑):和 git 仓库服务器在同一个网段或能访问 git 仓库的电脑即可,用作 frp 的客户端以及 nginx 服务端
(角色:家里电脑):任何一台能访问外网的电脑即可
frp 安装包:
windows:https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_windows_amd64.zip
linux:https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz
nginx 安装包:
windows(已编译好的):https://nginx.org/download/nginx-1.26.3.zip
linux 版本源码:https://nginx.org/download/nginx-1.26.3.tar.gz
原理
假设:
git 仓库服务器的内网地址为 http://192.168.0.10:8888
公司电脑的内网 ip 为 192.168.0.20
有公网 ip 的电脑 ip 为 175.175.1.12
原理:
先在有公网 ip 的电脑上启动 frp 服务端
在公司电脑上启动 nginx,监听 11111 端口,配置反向代理请求 git 仓库服务器,从而达到访问 http://127.0.0.1:11111 就能访问到 git 仓库
继续在公司电脑上启动 frp 客户端,将本地的 11111 端口映射到 frp 服务端的 11111 端口,从而达到访问公网 ip 就能访问到 git 仓库的目的
流程如下:
家里电脑 -> 公网电脑(http://175.175.1.12:11111) -> frp转发到公司电脑11111端口 -> 公司电脑nginx反向代理到内网git仓库服务器
开始搭建
有公网 ip 的电脑部署 frp 服务端
1、根据电脑系统类型,下载 frp 部署压缩包
2、修改服务端配置文件 frps.toml
# 服务端监听端口
bind_port = 7000
# 服务端管理界面访问端口
dashboard_port = 7001
# 管理界面的登录账号
dashboard_user = admin
# 管理界面的登录密码
dashboard_pwd = admin123
# frp客户端接入服务端时要填的token,越复杂越安全
token = fafdsafdsafdsafdsaf
3、启动 frp 服务端
linux
sudo ./frps -c ./frps.toml
还可以写一个后台运行的脚本 start_server.sh 放在 frp 目录下
#!/bin/bash
BASE_PATH=`cd $(dirname $0);pwd`
nohup $BASE_PATH/frps -c $BASE_PATH/frps.ini >> $BASE_PATH/log.log 2>&1 &
启动的时候直接执行
sudo ./start_server.sh
windows,命令行窗口别关掉,关掉就停了
.\frps.exe -c .\frpc.toml
公司电脑启动 nginx + frp 客户端
启动 nginx 代理
1、如果是 windows 电脑,直接下载编译好的压缩包解压即可,如果是 linux 电脑,那就得自己编译了(这里就不讲怎么编译了)
2、打开 nginx 目录下的 conf/nginx.conf 文件,添加一个 server 块,如下
server {
listen 11111;
server_name localhost;
location / {
# 代理到git仓库服务器
proxy_pass http://192.168.0.10:8888;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
# 设置代理请求头的 host,一定要加上端口,不然到时遇到重定向的时候端口就不见了
# 如果你的nginx监听端口和映射到frp服务端的端口不一致,那这里的$server_port就换成映射到frp服务端的端口
# 目的是让浏览器遇到git仓库服务器返回的302重定向后,浏览器(或git客户端)还是访问重定向前的ip:port
proxy_set_header Host $host:$server_port;
proxy_cache_bypass $http_upgrade;
}
}
3、启动 nginx
windows,在 nginx 目录下打开一个 cmd 执行,命令行窗口别关掉,关掉就停了
.\nginx.exe -c ..\conf\nginx.conf
linux,在 nginx 目录下执行
sudo ./sbin/nginx -c ../conf/nginx.conf
启动 frp 客户端
1、根据电脑系统下载对应的压缩包哈,别下错了
2、进入到 frp 目录下,编辑 frpc.toml
# 配置frp服务端的ip和端口
serverAddr = "175.175.1.12"
serverPort = 7000
[[proxies]]
name = "gongsi-diannao-git"
type = "tcp"
# 将本地的11111端口映射到frp服务端的11111端口
localIP = "127.0.0.1"
localPort = 11111
remotePort = 11111
# frp服务端配置的访问token
token = fafdsafdsafdsafdsaf
3、启动 frp 客户端
linux
./frpc -c ./frpc.toml
也可以像上面启动 frp 服务端一样写个后 T 台运行的脚本
windows,命令行窗口别关掉,关掉就停了
.\frpc.exe -c .\frpc.toml
测试
用家里的电脑访问下公网电脑的 11111 端口,看看能不能进入 git 仓库的页面,能进入就是可以了
关闭代理
方式一:
办公室电脑关闭 nginx 或者 frp 客户端
方式二:
公网 ip 的电脑关闭 frp 服务端
如果是云服务器,也可以在防火墙配置里删掉 11111 端口的访问规则