我是靠谱客的博主 名字长了才好记,最近开发中收集的这篇文章主要介绍如何让这个frp支持多个网站,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

FRP 默认仅支持在全局配置中设置一对 tls_cert_filetls_key_file,但通过以下方法,可以实现支持多个域名和证书的功能:


方法 1:通过 Nginx 或 Caddy 配置反向代理

使用 Nginx 或 Caddy 作为中间层处理 HTTPS 和多证书,FRP 仅作为 HTTP 的隧道服务。

步骤:

        1. 移除 FRP 的 HTTPS 配置
在 FRP 服务端配置中,删除 tls_cert_filetls_key_file,让 FRP 只处理流量,不负责 SSL。

修改后的 frps.ini

[common]
bind_addr = 0.0.0.0
bind_port = 7001
vhost_http_port = 80
token = 123456

dashboard_port = 17500
dashboard_user = admin
dashboard_pwd = 123456

         2. 使用 Nginx 配置多域名和证书
在 Nginx 中为每个域名配置 HTTPS 和证书。

Nginx 示例配置:

server {
    listen 80;
    server_name site-a.com site-b.com;
    return 301 https://$host$request_uri;  # 将 HTTP 请求重定向到 HTTPS
}

server {
    listen 443 ssl;
    server_name site-a.com;

    ssl_certificate /path/to/site-a.com/fullchain.pem;
    ssl_certificate_key /path/to/site-a.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;  # FRP 转发的网站 A
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    listen 443 ssl;
    server_name site-b.com;

    ssl_certificate /path/to/site-b.com/fullchain.pem;
    ssl_certificate_key /path/to/site-b.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:9090;  # FRP 转发的网站 B
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

        3. 运行 FRP 客户端并绑定域名
在客户端中为每个网站配置相应的 HTTP 转发。

客户端配置:

[website_a]
type = http
local_ip = 127.0.0.1
local_port = 8080
custom_domains = site-a.com

[website_b]
type = http
local_ip = 127.0.0.1
local_port = 9090
custom_domains = site-b.com

        4. 重启服务
启动或重启 FRP、Nginx 服务。


方法 2:使用通配符证书

如果所有域名共享同一主域(例如 *.example.com),可以使用通配符证书。

配置方法:

        1. 获取一个支持通配符的证书(如通过 Let’s Encrypt 或其他 CA 机构申请的 *.example.com)。

        2. 将 tls_cert_filetls_key_file 设置为通配符证书路径:

 frps.ini 示例:

[common]
bind_addr = 0.0.0.0
bind_port = 7001
vhost_https_port = 443
token = 123456

tls_cert_file = /path/to/wildcard/fullchain.pem
tls_key_file = /path/to/wildcard/privkey.pem

        3. 在客户端中配置子域名,例如:

        客户端配置:

[website_a]
type = https
local_ip = 127.0.0.1
local_port = 8080
subdomain = sitea  # 对应 sitea.example.com

[website_b]
type = https
local_ip = 127.0.0.1
local_port = 9090
subdomain = siteb  # 对应 siteb.example.com



方法 3:运行多个 FRP 实例

如果必须支持多个完全不同的域名证书,可以运行多个 FRP 服务端实例,每个实例绑定一个不同的证书。

配置方法:

  1. 启动多个 FRP 服务端实例,分别监听不同的 HTTPS 端口。

  2. 为每个实例配置一个独立的证书:

frps1.ini

[common]
bind_addr = 0.0.0.0
bind_port = 7001
vhost_https_port = 443
token = 123456

tls_cert_file = /path/to/site-a.com/fullchain.pem
tls_key_file = /path/to/site-a.com/privkey.pem

frps2.ini

[common]
bind_addr = 0.0.0.0
bind_port = 7002
vhost_https_port = 8443
token = 654321

tls_cert_file = /path/to/site-b.com/fullchain.pem
tls_key_file = /path/to/site-b.com/privkey.pem

    3. 在客户端中分别连接不同的服务端:

客户端 A:

[website_a]
type = https
local_ip = 127.0.0.1
local_port = 8080
custom_domains = site-a.com
server_addr = your-server-ip
server_port = 7001

客户端 B:

[website_b]
type = https
local_ip = 127.0.0.1
local_port = 9090
custom_domains = site-b.com
server_addr = your-server-ip
server_port = 7002

    4. 启动所有实例。



通过以上方法,你可以灵活支持多个域名和证书的场景,推荐优先使用 方法 1(Nginx 反向代理),因为它易于管理且扩展性更强。


最后

以上就是名字长了才好记为你收集整理的如何让这个frp支持多个网站的全部内容,希望文章能够帮你解决如何让这个frp支持多个网站所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(125)

评论列表共有 0 条评论

立即
投稿
返回
顶部