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

2014-09-10 13:07:42 +08:00
 Suclogger
vps可以访问ipv6,搭建了Nginx,能否通过反向代理转发到ipv4网络来呢?
10894 次点击
所在节点    问与答
21 条回复
pfitseng
2014-09-10 13:17:50 +08:00
我觉得是可以得,不过还需要专zhe业teng人士解答
Suclogger
2014-09-10 13:26:53 +08:00
@pfitseng 折腾了好久还是没折腾出来
Honwhy
2014-09-10 13:28:58 +08:00
IPv6到IPv6|IPv4转换网关(nginx),网关到IPv4网站,
整体来看,你的网关需要双栈。
还需要将v6请求改成v4请求,比如proxy_pass。
只能说这么多了。
ysjdx
2014-09-10 13:37:24 +08:00
你的服务器开v4,v6双栈

然后做个代理不可以么?

做反代你要么得自己建dns,要不得改hosts。反代方法就是楼上说的 proxy_pass
Suclogger
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
2014-09-10 13:45:36 +08:00
@ysjdx 多谢指点。能否指点一下双栈的配置细节呢?
lsylsy2
2014-09-10 13:47:15 +08:00
@Suclogger 尝试设置一下Host header?
mengskysama
2014-09-10 14:36:24 +08:00
我似乎看到了六维空间
Showfom
2014-09-10 14:38:23 +08:00
@Suclogger

上面 servername 写 bt.neu6.edu.cn

下面直接写

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

这样试试呢?
mengskysama
2014-09-10 14:40:00 +08:00
@Suclogger 确定下NGINX有是否需要编译IPV6支持
rrfeng
2014-09-10 14:41:07 +08:00
你需要的是正向代理啊……
ctexlive
2014-09-10 15:45:22 +08:00
你是在学校的电脑服务器,校外电脑通过该服务器访问六维?
这个应该用正向代理吧. squid3就支持ipv6. 代理用squid3即可.
Suclogger
2014-09-10 16:05:49 +08:00
@Showfom 谢谢你的答复。按照你的想法修改之后依然还是404错误。
Suclogger
2014-09-10 16:25:01 +08:00
@rrfeng 一语惊醒梦中人,正向代理之后成功~谢谢。
Suclogger
2014-09-10 16:25:46 +08:00
@ctexlive 多谢指点。用你的方法成功实现。:)
Suclogger
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
2014-09-10 21:56:11 +08:00
其实正向代理,不如用squid3了. 各种权限控制,和高性能. 要求不高,用nginx也行
photon006
220 天前
还有一种方案,用 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
220 天前
这样还有个好处,家宽没公网 ipv4 又想映射服务出去就只能考虑 ipv6 + 非标端口 443 ,比如 8443 、2053 、2083 ,访问时就得带上端口号,worker 反代正好隐藏端口号,还能提升安全性。
photon006
219 天前
上面代码有问题,要改成这样才能支持 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));
}
)

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

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

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

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

© 2021 V2EX