frp内网穿透
frp内网穿透
1.前言
为什不使用ngrok
ngrok 免费版本功能有限
只能有一个内网穿透
对外中转网站没有中国网络,速度慢
使用发布的外网地址默认看到的是一个ngrok的提示页,需要使用nginx中转设置 proxy_set_header ngrok-skip-browser-warning 1; 和 proxy_set_header Host fa9c-2409-8a00-1a40-ec90-58d7-daf3-64bb-fb24.ngrok-free.app;
为什使用frp
免费开源版本
有中文帮助文档
使用go语言编写,部署简单
支持多个内网穿透同时发布
2. 资料
官网
3. 安装过程
使用frp版本:v0.61.2
在release下载:
服务器端docker容器配置
如果没有构建一个空镜像, Dockerfile
# Dockerfile FROM scratch # 无需其他指令(这是一个完全空的镜像)构建镜像
docker build -t empty-image .frps.toml 配置
bindPort = 7000 vhostHTTPPort = 7001 [auth] method = "token" token = "abc1abxdea98aeclcdd" [webServer] addr = "0.0.0.0" port = 7010 user = "自己设置" password = "自己设置"拷贝 frps、frps.toml 两个文件到服务器:/docker-data/frps/app/ 目录下
docker-compose.yaml
services: frps: image: empty-image # 镜像 container_name: frps # 容器名,相当于docker run命令中的--name restart: unless-stopped # 之前是什么状态,docker重启后,保持之前的状态(如果之前是stop,那docker重启时,也是stop状态) volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录,相当于docker run命令中的-v - /docker-data/frps/app/:/app environment: # 设置环境变量,相当于docker run命令中的-e TZ: Asia/Shanghai LANG: en_US.UTF-8 ports: # 映射端口,相当于docker run 命令中的-p - "7000:7000" #bindPort - "7001:7001" #vhostHTTPPort - "7010:7010" #webServer port working_dir: /app # 工作目录 command: "/app/frps -c /app/frps.toml" #必须指定全路径,因为镜像中并不存在这个文件,而是通过卷映射进来的
客户端配置
frpc.toml
serverAddr = "ali.rstone.com.cn"
serverPort = 7000
[auth]
method = "token"
token = "abc1abxdea98aeclcdd"
[[proxies]]
name = "rstone-web-nuxt3"
type = "http"
localPort = 3000
customDomains = ["gzh-dev.rstone.com.cn"]
[[proxies]]
name = "rstone-web-backend"
type = "http"
localPort = 8080
customDomains = ["gzh-dev-api.rstone.com.cn"]启动客户端:
frpc -c frpc.toml
服务器上nginx配置
设置域名gzh-dev.rstone.com.cn 和 gzh-dev-api.rstone.com.cn 都指向 ali.rstone.com.cn
ali.rstone.com.cn 开发端口7000、7010
配置nginx
server { listen 80; # 监听端口 server_name gzh-dev.rstone.com.cn; # 域名 location / { proxy_pass http://172.19.0.1:7001; # 代理目标地址 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 X-Forwarded-Proto $scheme; # 设置代理请求头 } } server { listen 80; # 监听端口 server_name gzh-dev-api.rstone.com.cn; # 域名 location / { proxy_pass http://172.19.0.1:7001; # 代理目标地址 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 X-Forwarded-Proto $scheme; # 设置代理请求头 } }测试