frp & nginx 现实内网穿透

105 阅读2分钟

frp 是什么?

frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。

官网:gofrp.org/zh-cn/

为什么选择 frp?

通过在具有公网 IP 的节点上部署 frp 服务端,您可以轻松地将内网服务穿透到公网,并享受以下专业特性:

  • 多种协议支持:客户端服务端通信支持 TCP、QUIC、KCP 和 Websocket 等多种协议。
  • TCP 连接流式复用:在单个连接上承载多个请求,减少连接建立时间,降低请求延迟。
  • 代理组间的负载均衡。
  • 端口复用:多个服务可以通过同一个服务端端口暴露。
  • P2P 通信:流量不必经过服务器中转,充分利用带宽资源。
  • 客户端插件:提供多个原生支持的客户端插件,如静态文件查看、HTTPS/HTTP 协议转换、HTTP、SOCKS5 代理等,以便满足各种需求。
  • 服务端插件系统:高度可扩展的服务端插件系统,便于根据自身需求进行功能扩展。
  • 用户友好的 UI 页面:提供服务端和客户端的用户界面,使配置和监控变得更加方便。

frps公网配置

  1. 下载

地址:github.com/fatedier/fr…

image.png 2. 安装 - 将下载包上传公网服务器 - 在opt文件夹进行解压 tar -zvxf [ftp.tar,gz] 4. frps.toml 配置

bindPort = 3308 # 服务端监听端口,默认值为 7000。
vhostHTTPPort = 8888 # HTTP 类型代理监听的端口,启用后才能支持 HTTP 类型的代理。

[auth]
token = "frptoken" # 在 method 为 token 时生效,客户端需要设置一样的值才能鉴权通过。

[log]
to = "./frps.log"
level = "info"
  1. 启动

./frps -c frps.toml

frpc内网配置

  1. 下载

地址:github.com/fatedier/fr…

image.png 2. 安装 - 将下载包上传公网服务器 - 在opt文件夹进行解压 tar -zvxf [ftp.tar,gz] 4. 配置

serverAddr = "xxx.xxx.xx.xx" # 连接服务端的地址。
serverPort = 3308 # 连接服务端的端口,默认为 7000。

[auth]
token = "frptoken" # 在 method 为 token 时生效,客户端需要设置一样的值才能鉴权通过。

[log]
to = "./frpc.log"
level = "info"

# 控制台
[webServer]
addr = "127.0.0.1" 
port = 7400
user = "admin"
password = "123456"


[[proxies]]
name = "yd-web"
type = "http"
localPort = 8000
customDomains = ["xx.xx.com"] # 填写域名
  1. 启动

./frpc -c frpc.toml

nginx配置

使用nginx对域名做代理,需要进行配置。这里默认对nginx有了解

配置

# server相当于虚拟站点
server {
    listen       80;
    server_name xxx; # 代理的域名
    # 动态服务
    location / {
       	proxy_pass http://127.0.0.1:8888; # 这里的端口要与frps中的vhostHTTPPort设置的端口一致
        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;
    }
}