frp内网穿透访问本地web服务

2022年 3月 29日 117点热度 0人点赞

原文链接:https://blog.csdn.net/codeblf2/article/details/103752247

环境准备

  • 已备案的域名一个
  • 带公网 ip 的云服务器
  • pc 一个
  • frp 0.30.0 github 下载地址
  • nginx 1.10.3

安装 frp

frp 是用 go 语言开发的内网穿透工具, 分为 frpc, frps.

frpc 是客户端, 安装在内网, frps 是服务端, 安装在具有公网 ip 的服务器上, frpc 和 frps 协商一个通讯端口, frpc 启动的时候会通过这个通讯端口去连接 frps, 实现内网穿透.

frps 可以配置 vhost_http_port 来实现虚拟主机服务, 浏览器请求 [公网 ip]:[vhost_http_port], frps 会把这个请求转发给 frpc, frpc 接收到后再转发给服务提供者, 可以实现内网服务访问, 具体请看: frp 中文文档.

从 github 上下载 frp, 放在 /home 下, 打开 frps.ini 添加如下配置:

[common]

# frp 连接的端口
bind_port = 7000

# http 监听端口
vhost_http_port = 8080
# https 监听端口
vhost_https_port = 8443

# frp 客户端连接服务端时的 token 为了安全建议添加
token = tPaALZKtCBfN6IAp

# 二级域名后面访问的格式是 a.frp.xxx.net 或 b.frp.xxx.net
subdomain_host = frp.xxx.net

使用命令启动:

./frps -c ./frps.ini

ps: 如果云服务器有防火墙或者云安全组策略 (阿里云有, 在控制台), 需要开放你上面用到的端口.

域名解析

解析两条 A 记录: frp.xxx.net*.frp.xxx.net, 都指向你的云服务器 ip, 稍等一会, ping frp.xxx.net, 如果能 ping 通说明解析成功.

配置 frpc

下载 frp 到本地, 解压
进入解压完成的目录, 修改 frpc.ini 为下:

[common]
# 公网 ip 就是 frps 所在的服务器的 ip
server_addr = xxx.xxx.xxx.xxx
# frps 规定的连接端口
server_port = 7000
# 连接 token 与 frps 中的 token
token = tPaALZKtCBfN6isP
# 定义第一个转发
[web01]
type = http
# 本地 (内网) 服务的端口
local_port = 8001
# 与 frps 中的 subdomain_host 连接起来就是 a.frp.xxx.net
subdomain = a

# 定义第二个转发
[web02]
type = http
# 本地 (内网) 服务的端口
local_port = 8002
# 与 frps 中的 subdomain_host 连接起来就是 b.frp.xxx.net
subdomain = b

然后启动:

./frpc -c ./frpc.ini

如果没有报错就是启动成功.

至此, 访问地址 a.frp.xxx.net:8080 会被转发到本地 (内网) 的 8001 端口, 而访问地址 b.frp.xxx.net:8080 会被转发到本地 (内网) 的 8002 端口.

配置 nginx

我们不想要 url a.frp.xxx.net:8080 这类似地址中的端口怎么办? 那只能使用默认端口 80 了, 这里可以用 nginx 进行转发, 首先在云服务器安装 nginx, 这个不再赘述, 网上有的是资料, 然后配置 nginx 的 conf 文件, 名字为 nginx.conf, 在 nginx 文件夹或者/etc/nginx 里面, 至于在哪, 取决于你用的什么安装方式, 此文件中添加一个 server 节点, 配置如下:

server {
    # 监听的 80 端口
    listen 80;
    # 域名配置 记得一定要加上*.frp.xxx.net 这个, 只加 frp.xxx.net 是不行的, 某运维大坑张 XX 在这坑我 2 天的时间
    server_name * .frp.xxx.net frp.xxx.net;
    location / {
        proxy_pass http: //127.0.0.1:8080;
        # 这个 Host 的 header 一定要加, 不然转发后 frp 拿不到通过哪个域名访问的, 导致转发失败
        proxy_set_header Host $host;
    }

然后重启 nginx, 大功告成.

相关问题

客户端登录不上

2022/05/17 13:37:13 [E] [service.go:340] send Login request to plugin error
2022/05/17 13:37:13 [W] [service.go:128] login to server failed: send Login request to plugin error

frps.ini 中的 plugin 相关配置注释掉, 因为你没有启动插件, 所以 frps 连接不到插件, 就报错了.

#[plugin.user-manager]
#addr = 127.0.0.1:9000
#path = /handler
#ops = Login

#[plugin.port-manager]
#addr = 127.0.0.1:9001
#path = /handler
#ops = NewProxy

参考链接

rainbow

这个人很懒,什么都没留下

文章评论