V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Suclogger
V2EX  ›  问与答

能否通过 Nginx 反向代理 ipv6 的站点后通过 ipv4 访问

  •  2
     
  •   Suclogger · 2014-09-10 13:07:42 +08:00 · 11004 次点击
    这是一个创建于 3714 天前的主题,其中的信息可能已经有所发展或是发生改变。
    vps可以访问ipv6,搭建了Nginx,能否通过反向代理转发到ipv4网络来呢?
    第 1 条附言  ·  2014-09-10 16:29:34 +08:00
    已经解决。感谢@rrfeng @ctexlive
    贴一下正向代理的配置:
    Nginx.conf

    server {
    resolver 8.8.8.8;
    resolver_timeout 5s;

    listen 0.0.0.0:8080;


    location / {
    proxy_pass $scheme://$host$request_uri;
    proxy_set_header Host $http_host;

    proxy_buffers 256 4k;
    proxy_max_temp_file_size 0;

    proxy_connect_timeout 30;

    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 301 1h;
    proxy_cache_valid any 1m;
    }
    }
    21 条回复    2023-11-21 09:48:17 +08:00
    pfitseng
        1
    pfitseng  
       2014-09-10 13:17:50 +08:00
    我觉得是可以得,不过还需要专zhe业teng人士解答
    Suclogger
        2
    Suclogger  
    OP
       2014-09-10 13:26:53 +08:00
    @pfitseng 折腾了好久还是没折腾出来
    Honwhy
        3
    Honwhy  
       2014-09-10 13:28:58 +08:00
    IPv6到IPv6|IPv4转换网关(nginx),网关到IPv4网站,
    整体来看,你的网关需要双栈。
    还需要将v6请求改成v4请求,比如proxy_pass。
    只能说这么多了。
    ysjdx
        4
    ysjdx  
       2014-09-10 13:37:24 +08:00
    你的服务器开v4,v6双栈

    然后做个代理不可以么?

    做反代你要么得自己建dns,要不得改hosts。反代方法就是楼上说的 proxy_pass
    Suclogger
        5
    Suclogger  
    OP
       2014-09-10 13:42:56 +08:00
    @Honwhy 多谢指点。我的Nginx配置文件是这样写的:

    server {
    listen 80;

    #charset koi8-r;

    location / {
    proxy_pass http://bt.neu6.edu.cn/;
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    访问会报404错误
    Suclogger
        6
    Suclogger  
    OP
       2014-09-10 13:45:36 +08:00
    @ysjdx 多谢指点。能否指点一下双栈的配置细节呢?
    lsylsy2
        7
    lsylsy2  
       2014-09-10 13:47:15 +08:00
    @Suclogger 尝试设置一下Host header?
    mengskysama
        8
    mengskysama  
       2014-09-10 14:36:24 +08:00
    我似乎看到了六维空间
    Showfom
        9
    Showfom  
       2014-09-10 14:38:23 +08:00
    @Suclogger

    上面 servername 写 bt.neu6.edu.cn

    下面直接写

    proxy_pass http://[2001:da8:9000::232]/;

    这样试试呢?
    mengskysama
        10
    mengskysama  
       2014-09-10 14:40:00 +08:00
    @Suclogger 确定下NGINX有是否需要编译IPV6支持
    rrfeng
        11
    rrfeng  
       2014-09-10 14:41:07 +08:00   ❤️ 1
    你需要的是正向代理啊……
    ctexlive
        12
    ctexlive  
       2014-09-10 15:45:22 +08:00   ❤️ 1
    你是在学校的电脑服务器,校外电脑通过该服务器访问六维?
    这个应该用正向代理吧. squid3就支持ipv6. 代理用squid3即可.
    Suclogger
        13
    Suclogger  
    OP
       2014-09-10 16:05:49 +08:00
    @Showfom 谢谢你的答复。按照你的想法修改之后依然还是404错误。
    Suclogger
        14
    Suclogger  
    OP
       2014-09-10 16:25:01 +08:00
    @rrfeng 一语惊醒梦中人,正向代理之后成功~谢谢。
    Suclogger
        15
    Suclogger  
    OP
       2014-09-10 16:25:46 +08:00
    @ctexlive 多谢指点。用你的方法成功实现。:)
    Suclogger
        16
    Suclogger  
    OP
       2014-09-10 16:27:35 +08:00
    感谢@rrfeng @ctexlive
    贴一下正向代理的配置:
    Nginx.conf

    server {
    resolver 8.8.8.8;
    resolver_timeout 5s;

    listen 0.0.0.0:8080;


    location / {
    proxy_pass $scheme://$host$request_uri;
    proxy_set_header Host $http_host;

    proxy_buffers 256 4k;
    proxy_max_temp_file_size 0;

    proxy_connect_timeout 30;

    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 301 1h;
    proxy_cache_valid any 1m;
    }
    }
    ctexlive
        17
    ctexlive  
       2014-09-10 21:56:11 +08:00
    其实正向代理,不如用squid3了. 各种权限控制,和高性能. 要求不高,用nginx也行
    photon006
        18
    photon006  
       356 天前
    还有一种方案,用 cloudflare worker 反代

    1 、创建一个 worker ,把域名改成自己的





    2 、添加一条路由




    3 、设置 subdomain.example.com 域名代理

    https://imgur.com/a/WisnzQP


    访问 https://subdomain.example.com 就会经过 worker 处理,worker 反代去 https://ipv6.example.com:8443 拉取数据,ipv6.example.com 就是只有 ipv6 网络的服务。
    photon006
        19
    photon006  
       356 天前
    这样还有个好处,家宽没公网 ipv4 又想映射服务出去就只能考虑 ipv6 + 非标端口 443 ,比如 8443 、2053 、2083 ,访问时就得带上端口号,worker 反代正好隐藏端口号,还能提升安全性。
    photon006
        20
    photon006  
       355 天前
    上面代码有问题,要改成这样才能支持 websocket 反代:

    addEventListener(
    "fetch", event => {
    const url = new URL(event.request.url);
    url.protocol = "https";
    url.hostname = "ipv6.example.com";
    url.port = '8443';
    const request = new Request(url, event.request);
    event.respondWith(fetch(request));
    }
    )
    photon006
        21
    photon006  
       355 天前
    大陆无法访问 chatgpt 接口,同理反代 openai 可以这样:

    addEventListener(
    "fetch", event => {
    const url = new URL(event.request.url);
    url.protocol = "https";
    url.hostname = "api.openai.com";
    url.port = '443';
    const request = new Request(url, event.request);
    event.respondWith(fetch(request));
    }
    )
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2616 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 05:40 · PVG 13:40 · LAX 21:40 · JFK 00:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.