Frp内网穿透+Nginx反向代理流程
项目地址:https://github.com/fatedier/frp
项目文档:https://gofrp.org/zh-cn/docs/
Frp 是一个用 Go 语言开发的高性能反向代理工具,专注于内网穿透,支持 TCP、UDP、HTTP 和 HTTPS 等协议。它能帮助用户在没有公网 IP 的情况下暴露内网服务,实现远程访问和端口复用。
FRP的应用场景:
-
在无公网 IP 环境下提供 Web 服务。
-
远程访问家庭或公司内网服务器。
-
通过单一服务端端口暴露多个服务,实现端口复用。
FRP部署流程:
前提条件
- 一台具有固定公网 IP 的 Linux 云主机,并暴露指定端口。
- 域名配置:
- 主域名(如 frp.test.com)解析至公网 IP。
- 泛域名(如 *.frp.test.com)解析至公网 IP,支持多个子域名服务。
FRP的配置
-
下载并安装 Frp 服务端(frps)和客户端(frpc):
wget https://github.com/fatedier/frp/releases/download/v0.34.2/frp_0.34.2_linux_amd64.tar.gz tar -zxvf frp_0.34.2_linux_amd64.tar.gz mv frp_0.34.2_linux_amd64/frps /usr/local/frp # 可自定义目录-
将
frpc复制到内网机器。 -
将
frps复制到公网机器。
-
-
配置服务端(/usr/local/frp/frps.toml):
# FRP监听的端口
bindPort = 7000
# 身份认证配置
auth.method = "token"
auth.token = "abcdefghjkl"
# HTTP 服务监听端口
vhostHTTPPort = 80
# HTTPS 服务监听端口
vhostHTTPSPort = 443
# 子域名支持(可选,如果你想用 subdomain 参数)
subDomainHost = "frp.yourdomain.com"
# Web 管理后台配置
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "123456789"
# 启用 Prometheus 监控
enablePrometheus = true
# 日志配置
log.to = "/var/log/frps.log"
log.level = "info"
log.maxDays = 3
- 配置客户端(/usr/local/frp/frpc.toml):
#/usr/local/frp/frpc.toml客户端配置文件
# 服务端地址和端口
serverAddr = "111.231.70.217"
serverPort = 7000
# 启用 TLS 加密传输
transport.tls.enable = true
# 身份认证配置(必须与服务端一致)
auth.method = "token"
auth.token = "abc1234esds567s8d9efsa"
# SSH 服务代理配置
[[proxies]]
name = "ssh_nextcloud"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
# Web 服务代理配置
[[proxies]]
name = "web_nextcloud"
type = "http"
localIP = "127.0.0.1"
localPort = 80
remotePort = 80 # 公网访问端口
customDomains = ["111.231.70.217"] # 使用域名时默认使用Server端的HTTP服务监听端口
使用 Systemd 启动 Frp
在 Linux 系统下,利用 Systemd 管理 frps 服务:
-
安装 systemd
# 使用 yum 安装 systemd(CentOS/RHEL) yum install systemd # 使用 apt 安装 systemd(Debian/Ubuntu) apt install systemd -
创建
/etc/systemd/system/frps.service:[Unit] # 服务名称,可自定义 Description = frp server After = network.target syslog.target Wants = network.target [Service] Type = simple # 启动frps的命令,需修改为您的frps的安装路径 ExecStart = /usr/local/frp/frps -c /usr/local/frp/frps.toml [Install] WantedBy = multi-user.target -
管理命令:
sudo systemctl start frps # 启动 sudo systemctl stop frps # 停止 sudo systemctl restart frps # 重启 sudo systemctl status frps # 查看状态 sudo systemctl enable frps # 开机自启 -
设置 frps 开机自启动
sudo systemctl enable frps
Nginx反向代理:
项目地址:https://github.com/nginx/nginx
项目文档:https://nginx.org/en/docs/index.html
Nginx 是一个高性能的 Web 服务器和反向代理工具,常用于负载均衡和静态文件服务。
Nginx的安装
-
推荐使用包管理器:
#Ubuntu/Debian sudo apt update sudo apt install nginx #CentOS/RHEL sudo yum install epel-release sudo yum install nginx -
源码编译(可选):
wget http://nginx.org/download/nginx-1.24.0.tar.gz tar -zxvf nginx-1.24.0.tar.gz cd nginx-1.24.0 sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev ./configure --prefix=/usr/local/nginx --with-http_ssl_module make sudo make install
配置Nginx
编写配置文件位于 /etc/nginx/conf.d/server.conf(或源码安装的/usr/local/nginx/conf/nginx.conf):
server {
listen 80; # Nginx监听端口
server_name localhost; # 可更换成127.0.0.1
# 防火墙配置信息
#allow 192.168.110.39;
#deny all;
# 访问localhost:80/pga/映射到192.168.110.50:81服务器
location /pga/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_pass http://192.168.110.50:81;
}
# 访问localhost:80/api/映射到192.168.110.50:82/api 后端配置
location /api/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_pass http://192.168.110.50:82/api/;
}
# 访问localhost:80/p53/,nginx转发前端静态文件
location /p53/ {
root /home/dell/software/p53/;
index index.html;
}
}
前端路由配置示例(Vue 或类似框架):
server: {
proxy: {
'/api': {
target: '111.231.70.217:82', // Frp 穿透后的后端地址
}
}
}
测试配置:
sudo nginx -t # 测试
sudo nginx -s reload # 重载
使用 Systemd 启动 Nginx
同样可以使用systemctl进行管理Nginx的启动
sudo systemctl start nginx # 启动
sudo systemctl enable nginx # 开机自启
sudo systemctl status nginx # 查看状态

3488

被折叠的 条评论
为什么被折叠?



