frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。
通过在具有公网 IP 的节点上部署 frp 服务端,您可以轻松地将内网服务穿透到公网,并享受以下专业特性:
下载软件:FRP Releases
支持多平台,需根据服务器系统和CPU架构选择下载。下载的包是同时包含服务器端和客户端软件的。
linux## 存放下载文件目录 cd /opt/frps/ ## 解压 tar frp_0.59.0_linux_amd64.tar.gz
frps.toml是服务端的配置文件。
完整的配置说明可以参考frp官网。
例如我的配置如下:
jsbindPort = 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服务了。
在 Linux 系统下,使用 systemd 可以方便地控制 frps 服务端的启动、停止、配置后台运行以及开机自启动。 以下是具体的操作步骤:
如果您的 Linux 服务器上尚未安装 systemd,可以使用包管理器如 yum(适用于 CentOS/RHEL)或 apt(适用于 Debian/Ubuntu)来安装它:
yum install systemd
apt install systemd
使用文本编辑器 (如 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 服务
sudo systemctl start frps
sudo systemctl stop frps
sudo systemctl restart frps
sudo systemctl status frps
sudo systemctl enable frps
通过遵循上述步骤,您可以轻松地使用 systemd 来管理 frps 服务,实现启动、停止、自动运行和开机自启动。确保替换路径和配置文件名称以匹配您的实际安装。
frpc 内置的 Admin UI 可以帮助用户通过浏览器来查询和管理客户端的 proxy 状态和配置。
需要在 frpc.toml 中指定 admin 服务使用的端口,即可开启此功能:
jswebServer.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的搭建教程,但若把1台具备公网的服务器只拿来作为frp服务器也未免太奢侈了,服务器的主业(比如网站搭建等)不能因噎废食吧。可是网站搭建(不管是Apache还是Nginx)和frp都要占用服务器的80/443端口,如果按常规方法搭建会因端口占用冲突而失败。那么有没有办法让两者共存、一起发挥作用呢?经过一番的搜索和学习,终于找到了解决方案,在此对自己在云服务器上同时安装Nginx(ubuntu环境)和frp的过程作下记录并期望能够帮助有此需求的网友。
以下为nginx配置:
jsuser 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 许可协议。转载请注明出处!