frp内网穿透
- 为什不使用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语言编写,部署简单
- 支持多个内网穿透同时发布
- 使用frp版本:v0.61.2
- 在release下载:
- 服务器端docker容器配置
# Dockerfile
FROM scratch
# 无需其他指令(这是一个完全空的镜像)
docker build -t empty-image .
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" #必须指定全路径,因为镜像中并不存在这个文件,而是通过卷映射进来的
- 客户端配置
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"]
- 服务器上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; # 设置代理请求头
}
}
- 测试