首页 >>  正文

nginx反向代理

来源:baiyundou.net   日期:2024-09-21

作者:窃格瓦拉

前言

距离上一篇公网IPv4版本已经过去三年,而IPv6的教程也从前年拖更到现在,其实是因为一直在光猫拨号+二级路由的环境下,路由器内网的设备只能获取到内网IPv6地址,之前在Padavan上尝试用6relayd方式获取公网地址也不是很稳定。偶然发现了某位老哥的文章 OpenWrt二级路由器分配公网IPV6地址,解决了长久以来的困惑,原来二级路由开启中继模式让内网的设备获取公网IPv6并没有那么复杂,于是上周自己编译了一把OpenWrt,配置好路由器并让NAS获取到了IPv6地址,还在chatgpt的帮助下写了一个反向代理的程序,现在终于能舒舒服服地用IPv6了 。本文总结了个人使用IPv6的最佳实践,希望可以帮到大家。

目录

  • 开启IPv6

    • 光猫配置

    • 路由器配置 (以OpenWrt为例)

    • Unraid配置

  • 配置域名解析

    • 申请免费域名

    • DDNS-GO设置自动解析

  • 设置反向代理

    • Unraid修改网页端口

    • Docker部署反向代理应用

  • 移动网络访问

    • 手机APN打开IPv6

    • 使用域名访问应用

开启IPv6

光猫配置

出租屋使用的是某SDN网关,默认开启了IPv6,所以我这里没有额外配置。

动手能力强的朋友可以进入光猫后台修改IP协议,普通用户可以直接致电运营商远程开启。

有条件的还可以改成桥接模式,具体参考前一篇文章或其他教程。

路由器配置

理论上较新型号的路由器使用光猫桥接+路由器拨号,下级设备就可以自动获取公网IPv6地址了。

如果是光猫拨号+二级路由,需要开启中继模式:

分别进入 网络-接口-LAN和WAN,点击下方的IPv6 设置,将可选项全部设置为中继模式

如何判断成功获取到IPv6地址

Windows下进入设置-网络和Internet-属性,可以看到IPv6地址处 24 开头的地址即表示配置成功

或者直接打开 test-ipv6.com 测试页面查看

防火墙配置

本地获取到公网地址后,可能还不能直接从外网访问,需要进行防火墙配置

打开网络-防火墙-基本设置,将 转发 处更改为 接受 即可

Unraid配置

首先兑现一下上篇文章的承诺,工作后入正了! 

关掉Docker和VM,进入 Settings->Network Settings,将 Network protocol 设置为 IPv4 + IPv6

其余的 assignment 部分设置为 Automatic,会自动分配IP地址

当IPv6分配完成后,可以看到 IPv6 address 变成了 24 开头的地址

(后文中参考配置的IPv4地址默认使用192.168.123.181,需要替换成你自己的地址)

至此NAS已经成功获取IPv6公网地址,可以直接在浏览器中输入 [IPv6地址]:端口 访问NAS中的应用

配置域名解析

申请免费域名

这部分可以参考前一篇文章,动态域名解析需要到DNS服务商处获取API ID和Key,可以参考不同服务商的官方文档

DDNS-GO设置自动解析

 这次我们将动态域名解析(DDNS)服务直接安装在了Unraid,省去一些路由器的配置

Docker中添加 jeessy/ddns-go 的配置如图

浏览器输入 192.168.123.181:9876 进入ddns-go后台

选择DNS服务商并填入ID和Token

下方找到IPv6勾选启用,选择通过网卡获取,Domain框中输入域名,这里依旧使用泛域名 *.xxx.ml

保存配置后等待日志显示新增解析成功

现在已经可以通过 x.xxx.ml:端口号 访问NAS上的应用了

设置反向代理

Unraid修改网页端口

与前一篇文章不同的是,域名直接解析到了NAS的IPv6地址,而不是路由器的地址,因此需要修改Unraid默认的网页端口,将80和443端口预留给反向代理程序

Docker部署反向代理应用

这次反向代理没有使用Nginx Proxy Manager,在ChatGPT帮助下用go语言写了一个反向代理的小应用,使用toml文件配置代理和证书目录,支持https,还可以自动申请ssl证书,免去了手动配置证书的麻烦

Github代码仓库:ricardomlee/repro

部署也很简单,首先准备一个配置文件,命名为repro.toml,内容参考如下

[proxies]
"jelly.example.ml" = "http://192.168.123.181:8096"

[cert]
dir = "/config/cert"

将配置文件上传到appdata目录,例如新建一个/mnt/user/appdata/repro目录,放入repro.toml文件

Docker中添加 ricardomlee/repro 的配置如图,将刚刚创建的目录映射到容器里的 /config 目录,80和443端口分别映射到容器内的80和443端口

部署完成后,可以在浏览器输入代理的域名例如 jelly.example.ml 直接访问Unraid应用

第一次访问应用需要申请SSL证书,因此会加载等待一段时间,等证书申请完成后面访问就很快了

当然,除了代理Unraid上的应用,还可以代理内网中任意设备上的应用,例如要添加路由器管理页面的代理,只需要修改/mnt/user/appdata/repro/repro.toml文件,在 [proxies] 下方新增一行

"newifi.example.ml" = "http://192.168.123.1:80"

然后在Unraid Docker页面重启repro即可

移动网络访问

APN开启IPv6

以MIUI13为例,打开设置-双卡与移动网络,选择上网卡设置 接入点名称(APN),进入默认APN的设置页面,找到APN协议,修改成 IPv4/IPv6, 然后返回并确认保存

重启一下流量开关后,进入我的设备-全部参数-状态信息,查看IP地址部分成功获取到 24 开头的公网IPv6地址

使用域名访问应用

浏览器中输入代理的域名,访问成功 

最后

 鸽了好久的内容终于补完了,这次没有那么多啰嗦的废话,也是因为从学生成长为了一名入门级码农。希望这篇文章可以帮助还没有用上IPv6的小伙伴,有任何问题欢迎在评论区讨论 

链接

[1] Unraid尝鲜——设置反向代理实现泛域名访问Docker应用_NAS存储_什么值得买 (smzdm.com)

[2] OpenWrt二级路由器分配公网IPV6地址 | 梓喵出没 (azimiao.com)

","gnid":"9b5f180a392bfaf01","img_data":[{"flag":2,"img":[{"desc":"","height":"337","title":"","url":"https://p0.ssl.img.360kuai.com/t01807305826a1e7e7e.jpg","width":"600"},{"desc":"","height":"371","title":"","url":"https://p0.ssl.img.360kuai.com/t015be34806c9279645.jpg","width":"600"},{"desc":"","height":"379","title":"","url":"https://p0.ssl.img.360kuai.com/t0141c0f18b8186bf4c.jpg","width":"600"},{"desc":"","height":"379","title":"","url":"https://p0.ssl.img.360kuai.com/t014cccd932da9157f2.jpg","width":"600"},{"desc":"","height":"202","title":"","url":"https://p0.ssl.img.360kuai.com/t01cfc336c973c1c208.jpg","width":"600"},{"desc":"","height":"344","title":"","url":"https://p0.ssl.img.360kuai.com/t01234094c489060728.jpg","width":"600"},{"desc":"","height":"312","title":"","url":"https://p0.ssl.img.360kuai.com/t01041ea374afe05668.jpg","width":"600"},{"desc":"","height":"249","title":"","url":"https://p0.ssl.img.360kuai.com/t0141141f3535b9a5ef.jpg","width":"600"},{"desc":"","height":"283","title":"","url":"https://p0.ssl.img.360kuai.com/t01074f14b5bb8085a2.jpg","width":"600"},{"desc":"","height":"410","title":"","url":"https://p0.ssl.img.360kuai.com/t016346abbef6cc70f5.jpg","width":"600"},{"desc":"","height":"271","title":"","url":"https://p0.ssl.img.360kuai.com/t015cfa232b7f100903.jpg","width":"600"},{"desc":"","height":"800","title":"","url":"https://p0.ssl.img.360kuai.com/t0165e889bf4b51c24c.jpg","width":"600"},{"desc":"","height":"340","title":"","url":"https://p0.ssl.img.360kuai.com/t017f6227391214985f.jpg","width":"600"},{"desc":"","height":"700","title":"","url":"https://p0.ssl.img.360kuai.com/t013775b33d5f8274f2.jpg","width":"600"}]}],"original":0,"pat":"art_src_1,fts0,sts0","powerby":"hbase","pub_time":1678525791000,"pure":"","rawurl":"http://zm.news.so.com/39e1fc232fbe09e387b89d37552674c2","redirect":0,"rptid":"147e741479ce822b","rss_ext":[],"s":"t","src":"什么值得买","tag":[{"clk":"kdigital_1:路由器","k":"路由器","u":""}],"title":"Unraid实践——IPv6反向代理实现域名访问Docker应用

厉厘奇3914nginx 只能配置一个反向代理吗 -
周枝玉18889543834 ______ nginx支持通过多个server来配置不同的服务,每个服务都可以配置多个反向代理 反向代理可以配置在location中,匹配指定url的请求反向代理到一个后端服务器组中 一个server可以有多个location,一个nginx可以有多个server,所以可以配置多个反向代理

厉厘奇3914如何使用Nginx反向代理使用SSL配置Jenkins -
周枝玉18889543834 ______ 根据ssl.key和ssl.crt部署nginx 首先nginx需要支持ssl_module,然后修改nginx.conf如下 server { listen 443; server_name localhost; ssl on; ssl_certificate /opt/tengine/conf/ssl/free4lab.crt; ssl_certificate_key /opt/tengine/conf/ssl/free4lab_nopass.key;...

厉厘奇3914Nginx 做反向代理时 怎么做https强制跳转 -
周枝玉18889543834 ______ 这个我之前试过的 ,在上面的配置里加过下面这段配置,reload后访问没有任何反应跟以前还是一样的: server { listen 80; server_name IP; location / { rewrite ^/(.*) IP$1 permanent; } } 如果我的回答没帮助到您,请继续追问.

厉厘奇3914如何获取nginx反向代理域名 -
周枝玉18889543834 ______ nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递到应用程序中.

厉厘奇3914如何为thinkjs静态资源配置nginx反向代理 -
周枝玉18889543834 ______ 为了让网站静态资源加载更快,所以需要在VPS的nginx上配置一个反向代理来直接让Nginx处理静态资源,动态类的请求通过反向代理让Node.js来处理:?server { listen 80; server_name abc.com www.abc.com; index index.js index.html index....

厉厘奇3914nginx 可以使用域名反向代理吗 -
周枝玉18889543834 ______ 域名和IP都是可以的,域名会多一步解析的过程,所以一般IP地址不经常变的,用IP地址更好一点 因为大部分被代理的机器都是内网的,所以变动的可能性不大

厉厘奇3914nginx tomcat反向代理时tomcat要不要启动 -
周枝玉18889543834 ______ 如果nginx和tomcat在同一台服务器可以代理,则说明nginx的犯下那个代理功能是正常的. 但是放在两台服务器则失效,需要考虑的是:A服务器是否有权限访问B服务器. 如果B服务的地址为:192.168.100.10:8080

厉厘奇3914NGINX怎样处理惊群的 -
周枝玉18889543834 ______ Nginx处理集群是通过反向代理来实现的. 反向代理指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接到客户端,此时代理服务器对外就表现为一个服务...

厉厘奇3914nginx中proxy - set - header Host $host;的作用!~请详解!~ -
周枝玉18889543834 ______ nginx为了实现反向代理的需求而增加了一个ngx_http_proxy_module模块.其中proxy_set_header指令就是该模块需要读取的配置文件.在这里,所有设置的值的含义和http请求同中的含义完全相同,除了Host外还有X-Forward-For. Host的含义...

厉厘奇3914nginx反向代理多台独立web服务器 -
周枝玉18889543834 ______ 多个域名的话,就每个域名使用一个server段,然后proxy_pass到相应的web服务器上或者到upstream上.

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024