博文目录


FRP Releases
使用frp进行内网穿透
FRP 示例
FRP 实例 通过自定义域名访问内网的 Web 服务
FRP 参考 服务端配置
FRP Linux Server Release
FRP Windows Client Release

服务端

在 linux 上执行 arch, 结果如果是 [X86_64] 即可选择 [linux amd64] 版本的 Release 包

wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz
tar -zxvf frp_0.38.0_linux_amd64.tar.gz
mv frp_0.38.0_linux_amd64 frp-0.38.0

编辑 frps.ini, bind_port 是 frp 运行的端口, vhost_http_port 是在客户端访问时使用的端口, 这两个端口需在防火墙开放

[common]
bind_port = 7000
vhost_http_port = 8888
log_file = frp.log

新建 run.sh 来运行 server 端

#!/bin/sh
nohup ./frps -c frps.ini &
chmod 777 run.sh

运行 run.sh, 查看 frp.log, 成功信息如下

2021/11/23 23:30:20 [I] [root.go:200] frps uses config file: frps.ini
2021/11/23 23:30:20 [I] [service.go:192] frps tcp listen on 0.0.0.0:7000
2021/11/23 23:30:20 [I] [service.go:235] http service listen on 0.0.0.0:8888
2021/11/23 23:30:20 [I] [root.go:209] frps started successfully

客户端

假设在 Windows 上运行了一个本地 Web 服务, 端口是 10001

下载 Windows 版本的客户端

编辑 frpc.ini, server_addr 和 server_port 是服务端地址和端口, [local] 配置节是自己添加的内容, type 是 http, local_port 是本地服务的端口(按需修改), custom_domains 是已注册的域名或者自定义的子域名(需配置域名解析, 确保顶级域名能访问到服务器)

[common]
server_addr = 117.50.xxx.xxx
server_port = 7000

[local]
type = http
local_port = 10001
custom_domains = mrathena.cn

因为 frpc.exe 不能直接点击运行, 参数没法传, 需要写一个启动的批处理 frpc.bat

@echo off

set file=frpc.ini

:: 读取并展示 frpc.ini 中的 local_port 和 custom_domains
setlocal enabledelayedexpansion
for /f "delims== tokens=1,2" %%i in (%file%) do (
	if "%%i"=="local_port" (set port=%%j)
	if "%%i"=="custom_domains" (set domain=%%j)
)

echo=
echo 浏览器地址栏输入 [%domain%\**\**] 即可访问内网服务
echo=
echo 代理的本地端口是 [%port%]

:: 确认是否需要更换 local_port
echo=
set /p newPort=如需替换代理端口请输入新的端口(Enter): 

echo=
if not defined newPort (
	echo 未输入新的端口, 继续使用 [%port%]
) else (
	echo 使用新的本地端口 [%newPort%]
	set changed=true
)

:: 如果输入了新的 local_port 则替换 frpc.ini 中的 local_port
if defined changed (
	for /f "delims=:" %%a in ('type %file%^|findstr /n "local_port=%port%"')do set #%%a=y
	(for /f "tokens=1* delims=:" %%a in ('type %file%^|findstr /n .*')do (
	if defined #%%a (echo local_port=%newPort%)else echo.%%b
	))>"%file%".tmp
	@move "%file%".tmp "%file%" >nul 2>nul
)

:: 启动 frpc
echo=
echo ==================================================
echo=
frpc -c %file%

:: pause

运行 frpc.bat, 成功信息如下

2021/11/23 23:41:57 [I] [service.go:301] [5eed5fb1046fe11c] login to server success, get run id [5eed5fb1046fe11c], server udp port [0]
2021/11/23 23:41:57 [I] [proxy_manager.go:144] [5eed5fb1046fe11c] proxy added: [local]
2021/11/23 23:41:57 [I] [control.go:180] [5eed5fb1046fe11c] [local] start proxy success

测试效果

现在调用 mrathena.cn:8888/xxx/xxx?xxx=xxx 应该就能正常提供服务了

服务端配置到 nginx 反向代理

    server {
        listen 80;
        server_name frp.mrathena.cn;
        location / {
            proxy_pass http://localhost:8888;
            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;
        }
    }

修改客户端配置 custom_domains = frp.mrathena.cn, 和 nginx 配置的子域名对应, 重启客户端

现在调用 frp.mrathena.cn/xxx/xxx?xxx=xxx 应该就能正常提供服务了

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐