frp
frp copied to clipboard
frps是否可以接收 PROXY protocol?
我是nginx sni第四层分流到frps的,nginx设置了proxy_protocol on(启用PROXY protocol发送),frps能否接收PROXY protocol呢?是接收,不是发送。
好像没有这个必要?既然前面挡了 nginx 的话,可以直接将 real IP 写到 header 中传递给 frps?
现在是nginx设置了proxy_protocol on之后,分流给frps,就会error。错误日志我抽时间整理放上来。
frps 没有识别 PROXY_PROTOCOL,所以出错很正常的。我的意思是,没必要转发给 frps 的时候开启 PROXY protocol
用nginx sni分流是因为有其他服务用到443,其他服务需要开启PROXY protocol获取真实IP信息,所以frps想共用443,必须要接收PROXY protocol才行。否则就error
以上是某“爱国”core,有个acceptProxyProtocol:true的配置,就是为了开启PROXY protocol接收,接收nginx SNI分流前真实来源IP和端口。
我在想frps有没有这种设置
nginx 的配置应该是可以单独配置的?都用 443,但是不同 host 可以配置不同的转发规则把?发往 frps 的时候就不需要带上 Proxy protocol 了?
要支持的话也可以考虑,之后看一下怎么设计,你目前肯定直接优化 nginx 配置更快一些。
刚正在配置一个场景,似乎和这个 issue 是同一个问题
stream {
map $ssl_preread_server_name $backend_name {
home-emby.frp.xxx.com frp-emby;
home-dsm.frp.xxx.com frp-dsm;
default web;
}
upstream web {
server 127.0.0.1:8443;
}
upstream frp-emby {
server internal-frps-emby.xxx.com:5011;
}
upstream frp-dsm {
server internal-frps-dsm.xxx.com:5014;
}
server {
listen 443 reuseport;
listen [::]:443 reuseport;
proxy_pass $backend_name;
ssl_preread on;
}
}
这样配置的目的是让多个服务可以共用 443 端口
5011 和 5014 是两个 HTTPS 网页服务,单独访问没有问题,然后用 Nginx 分流,就不行了,我没找到错误日志,现在的现象是访问 home-emby.frp.xxx.com 时会得到 home-dsm.frp.xxx.com 的网页,或者反过来,总会有一个是不正常的
@cielpy 看起来不是一个问题,你能单独新建一个 issue 说明这个问题,以及我如何能在本地快速复现这个场景?
@cielpy 看起来不是一个问题,你能单独新建一个 issue 说明这个问题,以及我如何能在本地快速复现这个场景?
确实不是同一个问题,但是我觉得这个问题可能不是在 frp,而是在 Nginx 那边,有人遇到和我一样的问题 https://www.orzlee.com/proxy/2021/04/13/nginx-sni-offload-port-multiplexing-uses-xray-vless-xtls.html
一样的情况,我现在是通过前置 FRPS,然后再在 Nginx 前套一个 FRPC 来曲线解决用户 IP 的传递问题的(就是服务器上同时安装了 FRPS 和 FRPC)。不过这样的话 V2Ray 就不能使用 gRPC 和 mux 了。
以上是某“爱国”core,有个acceptProxyProtocol:true的配置,就是为了开启PROXY protocol接收,接收nginx SNI分流前真实来源IP和端口。 我在想frps有没有这种设置
这个我好像会, 我是前置 Nginx sni, proxy_protocol on 之后 Xray 可以运行但是没有网, 删掉 proxy_protocol 之后 Xray 可以正常上网, 猜测是 Xray 无法识别 proxy_protocol 的 header, 后面找到一个解决方案就是在 stream 里面加个 proxy_pass, 加上 header 的数据 proxy_pass 之后就没有 header 了(maybe, 我猜的). 贴上我stream的部分配置
map $ssl_preread_server_name $name {
111.com cdc;
222.gq dic;
333.com mtp;
}
upstream cdc{
server 127.0.0.1:777;
}
upstream mtp{
server 127.0.0.1:899;
}
upstream frp{
server 127.0.0.1:7000;
}
upstream xtls{
server 127.0.0.1:8964;
}
upstream dic{
server 127.0.0.1:856;
}
server {
listen 443 reuseport;
listen [::]:443 reuseport;
proxy_pass $name;
ssl_preread on;
proxy_protocol on;
}
server {
listen 127.0.0.1:777 proxy_protocol;
proxy_pass xtls;
}
server {
listen 127.0.0.1:899 proxy_protocol;
proxy_pass frp;
}
}```
还会考虑支持这个功能嘛,有这个功能的话,服务端和客户端的配置可以大大简化,只转发一个tcp端口就可以了,毕竟前后都可以让Nginx之类的去分流...