咨询 frpc 如何获取真实 IP

1 天前
 guiyun

各位大佬 我想通过 frp 内网穿透内网的 Nginx, 并且获取真实 IP ,配置如下 我这边一给 nginx 配置 proxy_protocol 这个参数(就在 ssl 后面的这个地方) 网站就是 502.确定反向代理的网站没有错误

我这边有个测试网站 https://test.guiyun.plus

frpc.ini

[TEST_HTTPS]
type = https
local_ip = 10.0.0.13
local_port = 443
custom_domains = test.guiyun.plus

proxy_protocol_version = v2

plugin = https2https                            
plugin_local_addr = 10.0.0.13:443

#证书相关配置
plugin_crt_path = /etc/frp/ssl/_.guiyun.plus.crt
plugin_key_path = /etc/frp/ssl/_.guiyun.plus.key         
plugin_header_X-From-Where = frp

内网 nginx 配置

upstream test {
    server  127.0.0.1:30080;
}
server {
    listen 80;
    server_name test.guiyun.plus;
    # 强制跳转到 HTTPS
    return 301 https://$host$request_uri;
}

server {

	# 就在下面这行添加 proxy_protocol 。重启 nginx 后网站就会报 502 。
    listen 443 ssl http2 proxy_protocol;
    server_name test.guiyun.plus;

    # SSL 证书相关配置,需要自己替换为自己的证书文件路径和密钥文件路径
    ssl_certificate   ssl/_.guiyun.plus.crt;
    ssl_certificate_key ssl/_.guiyun.plus.key;


    location / {
        proxy_set_header X-Real-IP $proxy_protocol_addr;
        proxy_set_header X-Forwarded-For $proxy_protocol_addr;
        proxy_pass http://test;
    }
}

Frpc 的版本是 0.51.2

Nginx 版本是 nginx/1.18.0 编译参数为

Tengine version: Tengine/2.3.3
nginx version: nginx/1.18.0
built by gcc 12.2.0 (Debian 12.2.0-14)
built with OpenSSL 1.1.1k  25 Mar 2021
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-pcre=../pcre-8.45 --with-openssl=../openssl-1.1.1k --with-zlib=../zlib-1.2.8 --add-module=../ngx_http_google_filter_module --add-module=../ngx_http_substitutions_filter_module --with-file-aio --with-stream --with-http_auth_request_module --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-google_perftools_module --with-debug
526 次点击
所在节点    问与答
14 条回复
Goooooos
1 天前
guiyun
1 天前
@Goooooos 就是按照文档开机 Proxy Protocol 这个功能导致 502 的呀?
chinanala
1 天前
必须要用 frp 吗?我也有这种需求,不过我是用 haproxy 做四层转发给 nginx ,然后 nginx 配置 proxy_protocol 接收就行了
opengps
1 天前
给 frp 前面的 web ,套一层 cdn ,用 cdn 的那种方式获取 ip 即可
guiyun
1 天前
@chinanala 是买的第三方的 frp
opengps
1 天前
或者不用 cdn ,把 nginx 放到最外层,用 nginx 的方式把真实 ip 发给后端
guiyun
1 天前
@opengps 别人的 frp,没法在外面套 nginx
opengps
1 天前
谁这么大单敢卖 frp ,但凡你有点违法的东西他不得替你背锅?
guiyun
1 天前
@opengps 国内节点,我的还是备案的域名
opengps
1 天前
@guiyun 对方给你提供的是 80/443 端口反向代理?还是你域名跟其他人绑定上去共享了一个 ip 的 80/443 端口?如果是那可能已经套了一层 nginx
yxhzhang185
1 天前
这个 proxy_protocol_version=v2 也需要在 frps 上配置。
huaxing0211
20 小时 51 分钟前
我用的 0.6 的 frp ,在 nginx 的 server 里加如下内容,即可显示真实 ip ,没做其它设置:
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0; # 允许任何 IP 段传递真实 IP
huaxing0211
20 小时 28 分钟前
另外,在 frp0.6 的示例配置中有:
requestHeaders.set.x-from-where = "frp",
它等同于“header_x_forwarded_for = true”,
所以上述 nignx 配置中,只需要添加那 2 行。
这是我在 0.6 中的配置,不知道 0.6 以下的版本有何区别,没做研究!
希望能帮你解决问题!
guiyun
4 小时 16 分钟前
@huaxing0211
非常感谢,问题解决了
老版本也是支持的 配置是 plugin_header_X-From-Where = frp

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1089236

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX