使用 nginx 的四层代理监听 443 端口,反代后端 6443 端口站点。
通过http2可以正常获取到客户端 IP ,通过 h3quic连接则无法获取到真实的客户端 IP ,只能获取到 127.0.0.1 。
请问各位大佬,在保持使用四层反代的前提下,如何配置可以通过quic获取到客户端 IP 。
REMOTE_ADDR: 127.0.0.1
HTTP_CLIENT_IP: 未设置
HTTP_X_FORWARDED_FOR: 未设置
HTTP_X_REAL_IP: 未设置
HTTP_FORWARDED: 未设置
HTTP_FORWARDED_FOR: 未设置
HTTP_X_FORWARDED: 未设置
map $ssl_preread_server_name $name {
    default default_backend;
}
upstream default_backend {
    server 127.0.0.1:6443; # 站点
}
server {
    listen 443 reuseport;
    listen 443 udp reuseport;
    proxy_pass $name;
    ssl_preread on;
    proxy_protocol on;
}
server
{
    listen 80;
    listen 6443 ssl  proxy_protocol ;
    listen 6443 quic reuseport;
		
    http2 on;
    server_name abc.com www.abc.com;
    
    index index.php index.html;
    root /wwwroot/abc.com;
    
    set_real_ip_from 127.0.0.1;
    real_ip_header proxy_protocol;
    
    ...
}
nginx version: nginx/1.27.1
built by gcc 12.2.0 (Debian 12.2.0-14)
built with OpenSSL 1.1.1q 5 Jul 2022
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-http_auth_request_module --add-module=/www/server/nginx/src/ngx_http_substitutions_filter_module-master --with-ld-opt=-Wl,-E --with-cc-opt=-Wno-error --with-ld-opt=-ljemalloc --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module --with-http_v3_module
|  |      1dabao OP ``` nginx version: nginx/1.27.1 built by gcc 12.2.0 (Debian 12.2.0-14) built with OpenSSL 1.1.1q 5 Jul 2022 TLS SNI support enabled configure arguments: --user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-http_auth_request_module --add-module=/www/server/nginx/src/ngx_http_substitutions_filter_module-master --with-ld-opt=-Wl,-E --with-cc-opt=-Wno-error --with-ld-opt=-ljemalloc --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module --with-http_v3_module ``` | 
|  |      2Showfom PRO | 
|  |      3lambdaq      230 天前 我估计,四层反代 原理上无法把这个值带过来。。。 | 
|  |      7Opportunity      230 天前 | 
|  |      8v1      230 天前 stream 模块已经移除了对 QUIC 的支持,获取真实客户端 ip 直接直接在 HTTP 模块下多 Server 监听同端口即可 https://hg.nginx.org/nginx/rev/113e2438dbd4 https://mailman.nginx.org/pipermail/nginx/2023-April/CZ5L6KMLLZNDP2R6TGAX5MN4VLQA3U3R.html | 
|      9leonshaw      230 天前 via Android proxy_bind transparent 行不行 | 
|  |      10ysc3839      230 天前 四层反代不行,因为完全没有动内部传的数据,自然也不能加上表示 IP 的请求头。 | 
|      11seansong      230 天前 你已经开启了 proxy_protocol ,后端解析一下呗 | 
|      12seansong      230 天前 看错了,你是 quic ,proxy_protocol 不会生效 | 
|      13huihuimoe      230 天前 via iPhone  3 udp 只能用 proxy protocol v2 ,nginx 官方只支持 v1(只作用于 tcp)。 得加个 nginx-stream-proxy-protocol-v2 ,然后两边开 proxy protocol v2 |