问题描述
基本思路
- 利用FRP的 Proxy Protocol 协议来传递经过真实 IP
frp 支持通过 Proxy Protocol 协议来传递经过 frp 代理的请求的真实 IP 利用群晖自带的Nginx反向代理内部服务
群晖的nginx的用户自定义配置文件路径在/etc/nginx/conf.d/目录下,并以http.*.conf格式命名server { # 监听IPv4,并开启Proxy Protocol协议 listen 5501 ssl proxy_protocol; # 监听IPv6,并开启Proxy Protocol协议 listen [::]:5501 ssl proxy_protocol; # 监听的域名,你解析给云服务器的域名 server_name ds.home.com; # 排除Cloudflare CDN的IP # 如果你有使用到CDN的服务的话,一般NAS不会使用到此类IP # 仅供参考,自行配置 set_real_ip_from 173.245.48.0/20; # 排除本地IP,请根据你的具体情况配置 set_real_ip_from 192.168.0.0/16; set_real_ip_from 10.0.0.0/8; # 排除服务器IP set_real_ip_from 1.1.1.1/32; # 真实IP使用proxy_protocol协议 real_ip_header proxy_protocol; # 开启排除IP功能 real_ip_recursive on; proxy_headers_hash_max_size 512; proxy_headers_hash_bucket_size 128; # 反向代理 location / { # 目标地址,群晖默认HTTPS地址为5001,请根据实际情况调整 proxy_pass https://localhost:5001; # 兼容http proxy_set_header Upgrade-Insecure-Requests 1; # 告诉后端使用ssl proxy_ssl_server_name on; # 客户端使用的http协议 proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Scheme $scheme; # 客户端host proxy_set_header Host $host; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-Host $http_host; # 完整URI proxy_set_header X-Original-URI $request_uri; # 客户端使用的端口 proxy_set_header X-Real-Port $proxy_protocol_port; # 多层代理IP proxy_set_header X-Forwarded-For $proxy_protocol_addr; # 客户端IP,群晖默认会通过X-Real-IP获取用户IP proxy_set_header X-Real-IP $proxy_protocol_addr; # 支持Websocket # 如果你使用诸如Docker bash此类的功能,则需要开启Websocket proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection Upgrade; proxy_connect_timeout 60s; proxy_read_timeout 60s; proxy_send_timeout 12s; # 配置文件来自https://www.alainlam.cn/?p=403 } }
检查Nginx配置文件
重启nginx
systemctl restart nginx
评论 (0)