利用FRP做HTTP服务的内网穿透(基础版)

博文目录


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 应该就能正常提供服务了

相关文章

fastjson2 是 fastjson 项目的重要升级,目标是为下一个十年...
博文目录文章目录问题描述解决方案问题描述阿里云ECS, 系统切...
博文目录文章目录创建项目创建代码仓库完成工程代码并提交推...
下载CentOS官网CentOS下载CentOS-7-x86_64-DVD-2003.isoCent...
博文目录文章目录服务端客户端测试效果服务端配置到 nginx 反...
博文目录文章目录环境下载安装配置使用环境阿里云ECS(Aliyu...