概述
FRP 默认仅支持在全局配置中设置一对 tls_cert_file
和 tls_key_file
,但通过以下方法,可以实现支持多个域名和证书的功能:
方法 1:通过 Nginx 或 Caddy 配置反向代理
使用 Nginx 或 Caddy 作为中间层处理 HTTPS 和多证书,FRP 仅作为 HTTP 的隧道服务。
步骤:
1. 移除 FRP 的 HTTPS 配置
在 FRP 服务端配置中,删除 tls_cert_file
和 tls_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_file
和 tls_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 服务端实例,每个实例绑定一个不同的证书。
配置方法:
启动多个 FRP 服务端实例,分别监听不同的 HTTPS 端口。
为每个实例配置一个独立的证书:
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支持多个网站所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复