侧边栏壁纸
博主头像
小鱼吃猫博客博主等级

你所热爱的,便是你的生活。

  • 累计撰写 113 篇文章
  • 累计创建 47 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录

frp内网穿透+搭配 Nginx 一起使用

小鱼吃猫
2023-04-28 / 0 评论 / 1 点赞 / 636 阅读 / 4078 字

为什么使用 frp ?

通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:

  1. 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
  2. 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
  3. 代理组间的负载均衡。
  4. 端口复用,多个服务通过同一个服务端端口暴露。
  5. 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
  6. 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
  7. 服务端和客户端 UI 页面。

更多文档,请参考官方文档https://github.com/fatedier/frp

准备条件

  1. 云服务器(必须)
  2. 域名(必须)

域名及服务器配置

配置域名解析

建议配置泛域名解析,一劳永逸,我的解析如下

image.png

服务器放行端口

需要放行的端口在下文中的 frps.ini 配置文件中有,我目前的放行的有 18888、8888、8843

frp的下载与安装

下载地址 https://github.com/fatedier/frp/releases,注意下载对应自己的操作系统,它的服务端和客户端是在一个包里的,所以,如果你的服务端和客户端是不同的平台,请分别下载(一般都是服务端 linux, 客户端 windows) frp 下载

服务端

解压到文件夹下就行,实际上只需要 frps 开头的文件

客户端

解压到文件夹下就行,实际上只需要 frpc 开头的文件

frp 的配置

服务器的配置 (frps.ini)

[common]
#通讯端口,用于和客户端内网穿透传输数据的端口,可自定义
bind_port = 18888
#http监听端口,注意可能和服务器上其他服务用的80冲突,比如centos有些默认有Apache,默认80,可自定义
vhost_http_port = 8888
#https监听端口,默认443,可自定义
vhost_https_port = 8843
#通过浏览器查看 frp 的状态以及代理统计信息展示(端口、用户名、密码),可自定义,不建议开启,也没啥用
#dashboard_port = 8880
#dashboard_user = admin
#dashboard_pwd = 123456
#通讯令牌(客户端需和此处一致)
token = lyn4ever#jhacker

# frp日志配置
log_file = /home/frp/frps.log
log_level = info
log_max_days = 3

#全局域名,这个就是上边配置的泛解析域名
subdomain_host = np.jhacker.cn

客户端的配置 (frpc.ini)

[common]
#填写服务器公网IP地址
server_addr = xx.xx.xx.xx
#通讯端口,和服务端保持一致(如果是第三方云服务器需在厂商安全组策略中开放该端口)
server_port = 18888
#通讯令牌,和服务端保持一致
token = lyn4ever#jhacker

# 本地管理的界面的配置
admin_addr = 127.0.0.1
admin_port = 429
admin_user = admin
admin_pwd = 123456
# Admin assets directory. By default, these assets are bundled with frpc.
# assets_dir = ./static


# 以下配置就是你要代理的端口和域名配置,其中subdomain和custom_domains只能配置一个
[web]
type = http
local_port = 8013
subdomain = test
#custom_domains = test.np.jhacker.cn

[mysql]
type = tcp
local_port = 3307
# tcp模式需要指定服务器的端口,注意这个端口需要放行
remote_port = 83307
subdomain = mysql

到此,已经全部配置完毕,在你的客户端机子上的 8013 端口开着一个 http 服务,3306 端口开着 mysql。

分别启动服务器和客户端

  • 服务器
./frps -c frps.ini
  • 客户端
./frpc -c frpc.ini
  • 浏览器打开 http://test.np.jhacker.cn:18888 就能访问你客户端机子上的 8013 的服务了。
  • 使用 mysql.np.jhacker.cn:83307 就可以访问你本机上的 mysql 服务了。

在服务器使用 Nginx 进行反向代理访问 frp

这部分主要是为了解决每次使用内网穿透时需要添加端口的问题,比如上边的 18888 端口。nginx 的安装请自行解决,这里只给出反代的配置

server {
  listen 80;
  server_name *.np.jhacker.cn;
  client_max_body_size 10240m;
  location / {
	  # 配置服务器的frp的端口
      proxy_pass http://127.0.0.1:18888;
	  keepalive_timeout  0;
      # 剩下的不要动,直接复制
      proxy_set_header Host $host;
      # proxy_set_header Host $http_host:8007; # 对于 ngrok 需要用这句
      
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header REMOTE-HOST $remote_addr;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      add_header X-Cache $upstream_cache_status;
      add_header Cache-Control no-cache,public; # 设置浏览器协商缓存
      expires 12h; # 设置 nginx 缓存 12 小时
  }
}

这样配置之后,像上边的 test 服务,可以直接使用域名,而不需要带端口访问了。

更多文章,访问我的博客jhacker

1

评论区