编辑
2024-07-29
工具
00
请注意,本文编写于 115 天前,最后修改于 115 天前,其中某些信息可能已经过时。

目录

服务器端搭建
下载软件
frp官网
服务端配置
使用systemd管理frps服务
安装 systemd
使用 yum 安装 systemd(CentOS/RHEL)
使用 apt 安装 systemd(Debian/Ubuntu)
创建 frps.service 文件
写入内容
启动frp
停止frp
重启frp
查看frp状态
设置 frps 开机自启动
web界面
配置frpc.toml
frp与nginx公用80端口

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

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

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

服务器端搭建

下载软件

下载软件:FRP Releases
支持多平台,需根据服务器系统和CPU架构选择下载。下载的包是同时包含服务器端和客户端软件的。

linux
## 存放下载文件目录 cd /opt/frps/ ## 解压 tar frp_0.59.0_linux_amd64.tar.gz

frp官网

https://gofrp.org/zh-cn/

服务端配置

frps.toml是服务端的配置文件。
完整的配置说明可以参考frp官网。
例如我的配置如下:

js
bindPort = 7000 webServer.addr = "0.0.0.0" webServer.port = 7500 webServer.user = "admin" webServer.password = "123456" log.to = "/var/log/frps.log" log.level = "info" log.maxDays = 3 auth.method = "token" auth.token = "1qaz2wsx3edc" allowPorts = [ { start = 6000, end = 7000 } ]

配置好后,就可以通过命令:./frps -c ./frps.toml启动frps服务了。

使用systemd管理frps服务

在 Linux 系统下,使用 systemd 可以方便地控制 frps 服务端的启动、停止、配置后台运行以及开机自启动。 以下是具体的操作步骤:

安装 systemd

如果您的 Linux 服务器上尚未安装 systemd,可以使用包管理器如 yum(适用于 CentOS/RHEL)或 apt(适用于 Debian/Ubuntu)来安装它:

使用 yum 安装 systemd(CentOS/RHEL)

yum install systemd

使用 apt 安装 systemd(Debian/Ubuntu)

apt install systemd

创建 frps.service 文件

使用文本编辑器 (如 vim) 在 /etc/systemd/system 目录下创建一个 frps.service 文件,用于配置 frps 服务。

js
$ sudo vim /etc/systemd/system/frps.service

写入内容

js
[Unit] # 服务名称,可自定义 Description = frp server After = network.target syslog.target Wants = network.target [Service] Type = simple # 启动frps的命令,需修改为您的frps的安装路径 ExecStart = /path/to/frps -c /path/to/frps.toml [Install] WantedBy = multi-user.target

使用 systemd 命令管理 frps 服务

启动frp

sudo systemctl start frps

停止frp

sudo systemctl stop frps

重启frp

sudo systemctl restart frps

查看frp状态

sudo systemctl status frps

设置 frps 开机自启动

sudo systemctl enable frps

通过遵循上述步骤,您可以轻松地使用 systemd 来管理 frps 服务,实现启动、停止、自动运行和开机自启动。确保替换路径和配置文件名称以匹配您的实际安装。

web界面

frpc 内置的 Admin UI 可以帮助用户通过浏览器来查询和管理客户端的 proxy 状态和配置。
需要在 frpc.toml 中指定 admin 服务使用的端口,即可开启此功能:

配置frpc.toml

js
webServer.addr = "127.0.0.1" webServer.port = 7400 webServer.user = "admin" webServer.password = "admin"

打开浏览器通过 http://127.0.0.1:7400 访问 Admin UI。
如果想要在外网环境访问 Admin UI,可以将 7400 端口通过 frp 映射出去即可,但需要重视安全风险。

js
[[proxies]] name = "admin_ui" type = "tcp" localPort = 7400 remotePort = 7400

frp与nginx公用80端口

实际上网上(包括本博客)已经有了很多frp的搭建教程,但若把1台具备公网的服务器只拿来作为frp服务器也未免太奢侈了,服务器的主业(比如网站搭建等)不能因噎废食吧。可是网站搭建(不管是Apache还是Nginx)和frp都要占用服务器的80/443端口,如果按常规方法搭建会因端口占用冲突而失败。那么有没有办法让两者共存、一起发挥作用呢?经过一番的搜索和学习,终于找到了解决方案,在此对自己在云服务器上同时安装Nginx(ubuntu环境)和frp的过程作下记录并期望能够帮助有此需求的网友。

以下为nginx配置:

js
user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; # multi_accept on; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # SSL Settings ## ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; # 博客 server { listen 80; server_name laiqi.work; location / { proxy_pass http://127.0.0.1:8880; proxy_set_header Host $host:80; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_hide_header X-Powered-By; } } # 二级代理(frp_wyl) server { listen 80; server_name wyl.laiqi.work; location / { proxy_pass http://127.0.0.1:6100; #将server_name的请求转发到81端口 proxy_redirect http://$host/ http://$http_host/; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; } } } #mail { # # See sample authentication script at: # # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript # # # auth_http localhost/auth.php; # # pop3_capabilities "TOP" "USER"; # # imap_capabilities "IMAP4rev1" "UIDPLUS"; # # server { # listen localhost:110; # protocol pop3; # proxy on; # } # # server { # listen localhost:143; # protocol imap; # proxy on; # } #}

参考资料:
https://blog.csdn.net/engineerlzk/article/details/122957432
https://www.jyoryo.com/archives/156.html

本文作者:小白菜

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!