frp + Nginx 反代 + 泛域名证书(vpspve.com)完整步骤说明
frp + Nginx 反代 + 泛域名证书(vpspve.com)完整步骤说明

frp + Nginx 反代 + 泛域名证书(vpspve.com)完整步骤说明

frp + Nginx 反代 + 泛域名证书(vpspve.com)完整步骤说明
一、环境说明

VPS:

公网 IP:VPs(示例)

系统:Ubuntu(其他 Linux 也类似)

已安装:nginx

内网:

PVE1:192.168.0.96:8006,对应域名 pve.vpspve.com

PVE2:192.168.0.98:8006,对应域名 pve98.vpspve.com

网关:192.168.0.1(OpenWrt)

域名:

主域名:vpspve.com,托管在 Cloudflare

使用子域名访问内网服务:

pve.vpspve.com → 192.168.0.96:8006

pve98.vpspve.com → 192.168.0.98:8006

后续可以扩展:openwrt.vpspve.com、fn.vpspve.com 等

统一约定:

frps 监听端口:7000(TCP)

frp 认证方式:token

token 示例:88673710sf

所有子域共用一个泛域名证书:vpspve.com + *.vpspve.com

证书统一路径:

/etc/nginx/ssl/vpspve.key

/etc/nginx/ssl/vpspve.pem

二、VPS 上安装 & 配置 frps(服务端)

下载 frp

cd /opt
wget https://github.com/fatedier/frp/releases/download/v0.56.0/frp_0.56.0_linux_amd64.tar.gz
tar -zxvf frp_0.56.0_linux_amd64.tar.gz
mv frp_0.56.0_linux_amd64 frp
cd /opt/frp

创建 frps.toml

nano /opt/frp/frps.toml

填入:

bindPort = 7000

auth.method = “token”
auth.token = “88673710sf”

保存退出。

前台测试运行

cd /opt/frp
./frps -c frps.toml

看到类似输出:

frps uses config file: frps.toml

frps tcp listen on 0.0.0.0:7000

frps started successfully

按 Ctrl + C 停止,用后台方式运行。

后台常驻运行

cd /opt/frp
nohup ./frps -c frps.toml > /opt/frp/frps.log 2>&1 &

检查端口监听

ss -lntp | grep 7000

出现类似:

LISTEN 0 4096 *:7000 *:* users:((“frps”,pid=xxxx,fd=3))

说明 frps 正常启动。

三、内网 PVE 上安装 & 配置 frpc(客户端)

以下示例以 PVE1(192.168.0.96)和 PVE2(192.168.0.98)为例。
两台 PVE 机器上步骤类似,端口和名称区分开即可。

【前提】
PVE 网络要能出网,并配置好网关,例如:
vmbr0: 192.168.0.96/24, gateway 192.168.0.1

在 PVE 上下载 frp

以 PVE1 为例(192.168.0.96):

cd /root
wget https://github.com/fatedier/frp/releases/download/v0.56.0/frp_0.56.0_linux_amd64.tar.gz
tar -zxvf frp_0.56.0_linux_amd64.tar.gz
mv frp_0.56.0_linux_amd64 frp
cd /root/frp

PVE1 的 frpc 配置(pve.vpspve.com 对应 96)

nano /root/frp/frpc.toml

内容:

serverAddr = “103.149.91.232”
serverPort = 7000

auth.method = “token”
auth.token = “88673710sf”

transport.tcpMux = true

[[proxies]]
name = “pve-web”
type = “tcp”
localIP = “192.168.0.96”
localPort = 8006
remotePort = 39006

PVE2 的 frpc 配置(pve98.vpspve.com 对应 98)

在 192.168.0.98 那台 PVE 上同样下载解压后:

nano /root/frp/frpc.toml

内容:

serverAddr = “103.149.91.232”
serverPort = 7000

auth.method = “token”
auth.token = “88673710sf”

transport.tcpMux = true

[[proxies]]
name = “pve98-web”
type = “tcp”
localIP = “192.168.0.98”
localPort = 8006
remotePort = 39007

注意:

每台内网服务 remotePort 必须不同(39006、39007…)

type 必须是 tcp,用于转发 PVE 的 https 服务

测试启动 frpc(每台 PVE)

cd /root/frp
./frpc -c frpc.toml

正常输出类似:

login to server success
proxy added: [pve-web]
start proxy success

确认正常后可 Ctrl + C 停止,用后台运行。

后台运行 frpc

cd /root/frp
nohup ./frpc -c frpc.toml >/root/frpc.log 2>&1 &

检查:

ps -ef | grep frpc

四、VPS 上配置 Nginx 反向代理(PVE1/PVE2)

目标:

https://pve.vpspve.com
→ VPS:39006 → PVE1:192.168.0.96:8006

https://pve98.vpspve.com
→ VPS:39007 → PVE2:192.168.0.98:8006

确认 /etc/nginx/nginx.conf 包含:

http {

include /etc/nginx/sites-enabled/*;
}

创建 pve 站点配置(PVE1)

nano /etc/nginx/sites-available/pve

内容示例:

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

server_name pve.vpspve.com;

ssl_certificate /etc/nginx/ssl/vpspve.pem;
ssl_certificate_key /etc/nginx/ssl/vpspve.key;

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;

location / {
proxy_pass https://127.0.0.1:39006;
proxy_ssl_verify off;

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 https;
proxy_set_header X-Forwarded-Host $host;
}
}

创建 pve98 站点配置(PVE2)

nano /etc/nginx/sites-available/pve98

内容示例:

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

server_name pve98.vpspve.com;

ssl_certificate /etc/nginx/ssl/vpspve.pem;
ssl_certificate_key /etc/nginx/ssl/vpspve.key;

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;

location / {
proxy_pass https://127.0.0.1:39007;
proxy_ssl_verify off;

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 https;
proxy_set_header X-Forwarded-Host $host;
}
}

启用站点

ln -s /etc/nginx/sites-available/pve /etc/nginx/sites-enabled/pve
ln -s /etc/nginx/sites-available/pve98 /etc/nginx/sites-enabled/pve98

检查并重载 nginx

nginx -t
systemctl reload nginx

五、使用 acme.sh + Cloudflare 申请泛域名证书

目标:一次性申请 vpspve.com + *.vpspve.com 泛域名证书,所有子域名共用。

安装 acme.sh

curl https://get.acme.sh | sh
source ~/.bashrc

注册 ZeroSSL 账户(只需一次)

acme.sh –register-account -m 你的邮箱
# 示例:
# acme.sh –register-account -m 262789078@qq.com

设置 Cloudflare API 信息

export CF_Key=”你的Cloudflare Global API Key”
export CF_Email=”你的Cloudflare账号邮箱”

示例:

export CF_Key=”992fb6abf808b3d452a085ac36efbab21d4b3″
export CF_Email=”262789078@qq.com”

使用 DNS 验证申请泛域名证书

acme.sh –issue –dns dns_cf -d vpspve.com -d ‘*.vpspve.com’

成功后会提示:

Your cert is in: /root/.acme.sh/vpspve.com_ecc/vpspve.com.cer

Your cert key is in: /root/.acme.sh/vpspve.com_ecc/vpspve.com.key

fullchain.cer 路径也会显示

创建 Nginx 证书目录并安装证书

mkdir -p /etc/nginx/ssl

acme.sh –install-cert -d vpspve.com \
–key-file /etc/nginx/ssl/vpspve.key \
–fullchain-file /etc/nginx/ssl/vpspve.pem \
–reloadcmd “systemctl reload nginx”

安装成功后,/etc/nginx/ssl 目录下会有:

vpspve.key

vpspve.pem

nginx 会自动 reload。

六、Nginx 统一使用泛域名证书

以后所有站点(pve、pve98、openwrt、飞牛 NAS 等)都统一写:

ssl_certificate /etc/nginx/ssl/vpspve.pem;
ssl_certificate_key /etc/nginx/ssl/vpspve.key;

可以用命令检查:

grep -R “ssl_certificate” /etc/nginx/sites-enabled -n

确认全部站点都指向 vpspve.pem / vpspve.key。

七、以后新增 OpenWrt / 飞牛 NAS 的标准模板

以 OpenWrt(192.168.0.1:80)为例:

1)在内网机器(跑 frpc 的地方)添加新代理

[[proxies]]
name = “openwrt-web”
type = “tcp”
localIP = “192.168.0.1”
localPort = 80
remotePort = 39010

重启 frpc(或 nohup 再启一次)。

2)VPS 上新增 Nginx 配置

nano /etc/nginx/sites-available/openwrt

内容:

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

server_name openwrt.vpspve.com;

ssl_certificate /etc/nginx/ssl/vpspve.pem;
ssl_certificate_key /etc/nginx/ssl/vpspve.key;

location / {
proxy_pass http://127.0.0.1:39010;
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 https;
}
}

启用站点并重载:

ln -s /etc/nginx/sites-available/openwrt /etc/nginx/sites-enabled/openwrt
nginx -t
systemctl reload nginx

访问:

https://openwrt.vpspve.com

飞牛 NAS / 其他服务同理,只需:

frpc 增加一个 [[proxies]]

remotePort 换一个新的,例如 39011

nginx 新建一个 server_name 指向这个 remotePort 即可

八、常用排错命令

1)frps 是否在运行(VPS)

ps -ef | grep frps
ss -lntp | grep 7000
tail -n 50 /opt/frp/frps.log

2)frpc 是否在运行(内网)

ps -ef | grep frpc
tail -n 50 /root/frpc.log

3)VPS 上本地测试 frp 转发是否正常

以 PVE1 为例(39006):

curl -vk https://127.0.0.1:39006

4)Nginx 配置检查

nginx -t
systemctl reload nginx
journalctl -xeu nginx.service –no-pager | tail -n 50

5)查看所有已启用站点

ls -l /etc/nginx/sites-enabled/

ystemd 服务托管
PVE 重启后自动运行
frpc 崩溃自动重启
不需要手动进入目录执行

马上开始!


✅ 第一步:创建 frpc Systemd 服务

运行:

nano /etc/systemd/system/frpc98.service

[Unit]
Description=FRPC Client for PVE98
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/root/frp_0.56.0_linux_amd64/frpc -c /root/frp_0.56.0_linux_amd64/frpc.toml
Restart=always
RestartSec=3

# 保证 PATH 不乱
WorkingDirectory=/root/frp_0.56.0_linux_amd64

[Install]
WantedBy=multi-user.target

✅ 第二步:加载 systemd

systemctl daemon-reload

✅ 第三步:启动 frpc 服务

systemctl start frpc98

✅ 第四步:设置开机自动启动

systemctl enable frpc98

✅ 第五步:检查 frpc 是否成功运行

systemctl status frpc98

正常会显示:

● frpc98.service - FRPC Client for PVE98
Active: active (running)
...
[pve98-web] start proxy success\

接下来建议你加一个更强的增强版(可选但推荐)

让 frpc 自动检测网络恢复、失败自动重连。

在你的 /etc/systemd/system/frpc98.service 里,用这个增强版替换原来的 Service 段:

[Service]
Type=simple
ExecStart=/root/frp_0.56.0_linux_amd64/frpc -c /root/frp_0.56.0_linux_amd64/frpc.toml
WorkingDirectory=/root/frp_0.56.0_linux_amd64
Restart=always # frpc 挂了自动重启
RestartSec=5 # 5 秒自动重试
StartLimitInterval=0 # 不限重启次数(重要)# 网络断了等它恢复
After=network-online.target
Wants=network-online.target

改完后重新加载:

systemctl daemon-reload
systemctl restart frpc98
启动命令
cd /root/frp_0.56.0_linux_amd64
./frpc -c frpc.toml

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注