NaiveProxy 新一代高速代理工具,NaiveProxy 教程
在安装 NaiveProxy 之前,我们首先需要了解一下 NaiveProxy 是什么东西,随着网络技术的更新,一些传统的代理工具逐渐被淘汰,淘汰的原因不言而喻,淘汰的同时又有一批新的技术脱颖而出。下面详细了解一下什么是 NaiveProxy 。一款强大而神器的代理工具。
什么是 NaiveProxy
NaiveProxy,挪威语叫 NaïveProxy ,翻译成中文:“天真的代理”,是2019年底由 klzgrad 大神开发的一种新型网络代理技术,它使用Chrome的网络堆栈来伪装流量,具有较强的保护隐私能力和较低的可检测性,重用 Chrome 网络堆栈是确保性能和安全性的最佳实践。
NaiveProxy 是 Caddy Web 服务器的转发代理插件,一个插件都这么厉害。那么 Caddy 又是什么东西?
Caddy是什么
Caddy 是一个开源的,使用 Golang 编写,支持 HTTP/2 的 Web 服务端。它使用Golang 标准库提供HTTP 功能。 Caddy 一个显著的特性是默认启用HTTPS。它是第一个无需额外配置即可提供HTTPS 特性的Web 服务器。
作者 Matt Holt 于 2014 年 12 月开始开发 Caddy ,并于 2015 年 4 月发布第一个版本。在发布后的一年里,它的下载量超过了 20000 次,并在 GitHub 上获得了 4500 个 Star。
Caddy 支持各种 Web 技术,提供静态编译的二进制文件,支持 i386、amd64 和 ARM 架构上的 Windows、Mac、Linux、Android 和 BSD 操作系统。
Caddy 具有自动 HTTPS 的快速且可扩展的多平台 HTTP/3 Web 服务器
Caddy官网:https://caddyserver.com/
GitHub项目地址:https://github.com/caddyserver/caddy
关于 Caddy 不过多介绍,有想详细了解 Caddy 的网友,可以访问 Caddy 官方网站和项目页面进行查看。下面继续说 NaiveProxy
NaiveProxy 对比其它工具有什么不同
NaïveProxy 使用 Chromium 的网络堆栈来伪装具有强大的审查阻力和低可检测性的流量。重复使用 Chrome 的堆栈还可以确保性能和安全性方面的最佳实践。
Cronet 是一个类似地从 Chromium 的网络堆栈派生的库,但其官方版本仅限于 Android 和 iOS。NaïveProxy 的 Cronet 分支提供其原生 API 的二进制版本,支持多个平台,并支持使用 cgo 和cronet-go绑定创建 Go 应用程序。
使用 Chromium 的网络堆栈可以缓解以下流量攻击:
- 网站指纹/流量分类:通过 HTTP/2 中的流量复用来缓解。
- TLS 参数指纹识别:通过重用Chrome 的网络堆栈而失败。
- 主动探测:被应用程序前端击败,即将代理服务器隐藏在具有应用层路由的常用前端服务器后面。
- 基于长度的流量分析:通过长度填充来缓解。
NaiveProxy 使用Chrome的网络堆栈,Chrome 和标准前端(如 Caddy、HAProxy)之间的常规 HTTP/2 流量完全相同。前端还会将未经身份验证的用户和活动探测器重新路由到后端HTTP服务器,从而使得无法检测到代理的存在。
前端服务器可以是任何众所周知的反向代理,它能够基于 HTTP 授权标头路由 HTTP/2 流量,从而防止主动探测代理的存在。已知的包括带有 forwardproxy 插件和 HAProxy 的 Caddy。
现在主流代理工具的tls都使用http/1.1,而 NaiveProxy 使用的传输协议是 http2 与 http3
http2和http1的区别
HTTP/1.1,使用基于文本格式,文本表现形式多样、场景多,健壮性不足。HTTP/2使用二进制格式,只有0和1的组合,选择二进制传输,协议解析实现方便且健壮。
HTTP连接会随着时间进行自我调节,起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移提高传输的速度。这种调节被称为TCP慢启动。这种调节让具有突发性和短时性的HTTP连接变的十分低效。HTTP/2通过多路复用让所有数据流使用同一个连接,有效使用TCP连接,让高带宽也能真正的服务于HTTP的性能提升。
HTTP/2在应用层和传输层之间增加了二进制分帧,突破了HTTP/1.1性能限制,改进传输性能,实现低延迟和高吞吐量。
HTTP/2使用HPACK算法来压缩每次请求连接的头字段,降低了网络开销。HPACK算法可以减少需要传输的头字段大小,通讯双方通过建立和维护头字段表,字段表中使用长度较小的索引号表示重复的字符串,在用Huffman编码压缩数据,既避免了重复头字段的传输,又减小了需要传输的大小。
HTTP/2有哪些关键特性?
二进制分帧
HTTP/2所有性能增强的核心在于新的二进制分帧层,如下图所示,它是所有其他功能和性能优化的基础,它定义了如何封装HTTP消息并在客户端与服务器之间传输。
HTTP/2没有改动HTTP的应用语义,仍然使用HTTP的请求方法、状态码和头字段等规则,它主要修改了HTTP的报文传输格式。HTTP/1.1协议以换行符作为纯文本的分隔符,而HTTP/2将所有传输的信息分割为更小的消息和帧,并采用二进制格式对它们编码,这些帧对应着特定数据流中的消息,他们都在一个TCP连接内复用。
优先级排序
将HTTP消息分解为很多独立的帧之后就可以复用多个数据流中的帧,客户端和服务器交错发送和传输这些帧的顺序就成为关键的性能决定因素。HTTP/2允许每个数据流都有一个关联的权重和依赖关系,数据流依赖关系和权重的组合明确表达了资源优先级,这是一种用于提升浏览性能的关键功能。HTTP/2协议还允许客户端随时更新这些优先级,我们可以根据用户互动和其他信号更改依赖关系和重新分配权重,这进一步优化了浏览器性能。
首部压缩
HTTP每次请求或响应都会携带首部信息用于描述资源属性。HTTP/1.1使用文本的形式传输消息头,消息头中携带cookie每次都需要重复传输几百到几千的字节,这十分占用资源。
HTTP/2使用了HPACK算法来压缩头字段,这种压缩格式对传输的头字段进行编码,减少了头字段的大小。同时,在两端维护了索引表,用于记录出现过的头字段,后面在传输过程中就可以传输已经记录过的头字段的索引号,对端收到数据后就可以通过索引号找到对应的值。
多路复用
多路复用允许同时通过单一的HTTP/2连接发起多重的请求-响应消息,实现多流并行而并不依赖多个TCP连接,HTTP/2把HTTP协议通信的基本单位缩小为一个一个的帧,这些帧对应着逻辑流中的消息,并行地在同一个TCP连接上双向交换消息。
HTTP/2基于二进制分帧层,HTTP/2可以在共享TCP连接的基础上同时发送请求和响应。HTTP消息被分解为独立的帧,而不破坏消息本身的语义交错发出去,在另一端根据流标识符和首部将他们重新组装起来。通过多路复用技术,可以避免HTTP旧版本的消息头阻塞问题,极大提高传输性能。
HTTP/2服务器推送
HTTP2.0的一个强大的新功能,就是服务器可以对一个客户端请求发送多个响应。服务器向客户端推送资源无需客户端明确的请求。服务端根据客户端的请求,提前返回多个响应,推送额外的资源给客户端。如下图所示,客户端请求stream 1,服务端在返回stream 1的消息的同时推送了stream 2和stream 4。
服务端推送是一种在客户端请求之前发送数据的机制。在HTTP/2中,服务器可以对一个客户端的请求发送多个响应。如果一个请求是由你的主页发送的,服务器可能会响应主页内容、logo以及样式表,因为服务端知道客户端会用到这些东西。这样不但减轻了数据传送冗余步骤,也加快了页面响应的速度,提高了用户体验。
什么是HTTP3
HTTP/3是第三个主要版本的HTTP协议。与其前任HTTP/1.1和HTTP/2不同,在HTTP/3中,将弃用TCP协议,改为使用基于UDP协议的QUIC协议实现。
此变化主要为了解决HTTP/2中存在的队头阻塞问题。由于HTTP/2在单个TCP连接上使用了多路复用,受到TCP拥塞控制的影响,少量的丢包就可能导致整个TCP连接上的所有流被阻塞。
QUIC(快速UDP网络连接)是一种实验性的网络传输协议,由Google开发,该协议旨在使网页传输更快。在2018年10月28日的邮件列表讨论中,互联网工程任务组(IETF) HTTP和QUIC工作组主席Mark Nottingham(英语:Mark Nottingham)提出了将HTTP-over-QUIC更名为HTTP/3的正式请求,以“明确地将其标识为HTTP语义的另一个绑定……使人们理解它与QUIC的不同”,并在最终确定并发布草案后,将QUIC工作组继承到HTTP工作组。[ 在随后的几天讨论中,Mark Nottingham(英语:Mark Nottingham)的提议得到了IETF成员的接受,他们在2018年11月给出了官方批准,认可HTTP-over-QUIC成为HTTP/3。
2019年9月,HTTP/3支持已添加到Cloudflare和Google Chrome(Canary build)。Firefox Nightly在2019年秋季之后添加支持。
2022年6月6日,IETF正式标准化HTTP/3为RFC9114。
http3,基于 udp 的 quic 协议,UDP 是“无连接”的,根本就不需要“握手”和“挥手”,所以就比 TCP 来得快。同时因为 naiveproxy 通过重用了 chrome 的网络堆栈,就实现了流量的彻底隐藏,同时又获得了 http3 的高速传输。
NaiveProxy 搭建
言归正传,下面搭建一个 naiveproxy 服务,naiveproxy 会直接启用 http3 的 quic 协议,不要担心443端口被占用的问题,UDP和TCP的端口是不冲突的。
NaiveProxy项目地址:https://github.com/klzgrad/naiveproxy
NaiveProxy 搭建步骤
- 在服务器端搭建 NaiveProxy 服务端(Caddy)
- 在本地端搭建 NaiveProxy 客户端
NaiveProxy 搭建 前的准备工作
NaiveProxy 使用的是TLS流量,所以需要申请域名域名,首先注册域名。
然后申请 let's encrypt 的免费TLS证书。
免费申请SSL证书机器人:Certbot快速申请自动续订https域名证书
其次是你需要一台独立的云主机,如果你还没有免费的云主机,可以去谷歌云、亚马逊云、微软云进行免费申请。
推荐使用亚马逊云,每月100G流量,免费时长一年。免费申请 AWS EC2 亚马逊云服务器
安装Go语言
Go官网下载地址:https://go.dev/dl/
Go语言安装教程:安装Go语言及搭建Go语言开发环境
在安装之前,首先使用 lscpu 查看一下服务器的CPU架构。
intel 与 amd 厂商使用的是基于X86架构的CPU,X86架构使用的是复杂指令集即指令一步到位,而arm使用的是精简指令集即指令由几个指令完成。
X86架构性能好,但是耗电多、电压高,主要用于桌面合服务器。
然而ARM架构耗电少、电压低,但是单核性能不如X86,主要用于移动设备。
近几年来,X86架构发展迟缓,ARM架构进步显著,已经从移动设备向桌面电脑和服务器进军了,如m1芯片。
arm架构的cpu:https://go.dev/dl/go1.19.2.linux-arm64.tar.gz
x86架构的cpu:https://go.dev/dl/go1.19.2.linux-amd64.tar.gz
在服务器上下载go语言安装包,然后解压到 /usr/local/ 目录中。
wget https://go.dev/dl/go1.19.linux-amd64.tar.gz tar -zxvf go1.19.linux-amd64.tar.gz -C /usr/local/
go语言解压缩完毕即可,无需安装,解压缩后,在 /etc/profile 文件内添加变量。
echo export PATH=$PATH:/usr/local/go/bin >> /etc/profile source /etc/profile go version
安装完毕后使用 go version 命令查看安装是否成功
能够正常显示GO语言版本,就表示已经安装成功了。
安装 NaïveProxy 和 Caddy
naiveproxy 是一个web服务代理工具,和VPN有本质上的区别,naiveproxy 需要配合转发代理服务器使用,caddy 是具有自动TLS功能的HTTPS服务器。
执行以下安装命令,安装之前需要保证服务器到github的网络通畅。编译需要一定的时间,服务器CPU性能很关键,请耐心等待。
注意:forwardproxy 是第三方插件,caddy本身是不带的,下面是集成了 forwardproxy 和 naive 的 caddy
一定要安装带 forwardproxy 和 naive 插件的 caddy ,否则需要单独安装这两个 caddy 插件。
安装之后可以使用caddy list-modules | grep forward_proxy
命令来查看。
xcaddy项目地址:https://github.com/caddyserver/xcaddy
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest ~/go/bin/xcaddy build --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive cp caddy /usr/bin/ /usr/bin/caddy version setcap cap_net_bind_service=+ep /usr/bin/caddy #使用setcap命令设置 /usr/bin/caddy 可以非ROOT用户启动1024以下端口。
注意:可以使用这条命令 setcap -r /usr/bin/caddy
清除附加权限。
编译完成后,将 caddy 文件夹拷贝到 /usr/bin 目录,之后查看一下是否编译成功。显示版本号,就已经编译成功了。
优化BBR加速模块
新版本Linux系统自带BBR加速模块,所以你可以直接执行以下命令,启用原版BBR加速。命令如下:
bash -c 'echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf' bash -c 'echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf' sysctl -p
配置 caddy
以上都安装完毕后,接下来配置caddy
首先,将域名A记录解析到所在服务器的IP地址上。然后申请SSL域名证书。
#新建存放Caddyfile的目录 mkdir /etc/caddy/ #使用VI命令在/etc/caddy/目录中,新建Caddyfile配置文件 vi /etc/caddy/Caddyfile
生成强密码,输入下面命令,在服务器上自动生成一串强密码。
cat /dev/urandom | tr -dc a-zA-Z0-9 | head -c32; echo;
使用下面的模板,进行如下更改:
- 替换yourname为您选择的用于 NaiveProxy 身份验证的用户名。
- 替换 pass 为您生成的强密码,或者自定义密码。
- 用您的域名和主机名替换 example.com
- 用您的实际电子邮件地址替换youremail@example.com用来接收 Let's Encrypt 通知
caddy在服务器上有两种建立代理网站的方式,一种是将web网站文件保存在服务器上,另外一种是反向代理到其它网站。
如果想建立多用户版Naive,可以将 forward_proxy 模块复制。将basic_auth中的用户密码修改成另外一个就可以了。
在服务器上新建web网站:
:443, example.com tls youremail@example.com route { forward_proxy { basic_auth yourname pass hide_ip hide_via probe_resistance } file_server { root /var/www/html } }
将域名反向代理到其它网站地址:
:443, example.com tls youremail@example.com route { forward_proxy { basic_auth yourname pass hide_ip hide_via probe_resistance } reverse_proxy https://example2.com { header_up Host {upstream_hostport} } }
caddy官方反向代理文档:https://caddyserver.com/docs/caddyfile/directives/reverse_proxy
几种配置域名SSL证书的方式:
- 手工向证书发行方申请方式
手动从证书发行方申请证书,然后在Caddy配置中指定证书和秘钥文件路径:
tls /path/example.com.crt /path/example.com.key - 主机自动申请方式
如果目标域名(例如: example.com)已经解析到了本机,那么 Caddy2 启动后会尝试自动通过 ACME HTTP 申请证书(默认的证书发行方为 let's encrypt)。
优点:配置简单,
语法如下, 后面的 email 参数是告知 CA 申请人的邮箱。
tls email - dns 自动申请方式
Let's encrypt通过域名服务商提供的域名解析记录api,来验证我们对域名的所有权。
优点:不需要任何公网IP地址,只要通过dns的解析记录即可完成验证; 另外,如果网站启用了 CDN,必须使用这个方式。
缺点:配置比较麻烦,需要设置一些环境变量,另外还需要下载对应dns 服务商的插件(插件简化了caddy调用DNS服务商API的过程),。 caddyfile中的语法:
tls {
dns…
}
修改好配置文件后,启动 caddy 。在启动 caddy之前,你需要先格式化配置文件,否则会报错,使用 caddy fmt –overwrite “/etc/caddy/Caddyfile” 命令
#格式化配置文件 caddy fmt --overwrite /etc/caddy/Caddyfile #启动配置文件 caddy run --config /etc/caddy/Caddyfile
在浏览器中输入域名后,网站可以正常打开,caddy成功启动之后,接下来配置一下自启动文件,reboot 重新启动服务器。
caddy配置守护进程(开机自启):https://github.com/klzgrad/naiveproxy/wiki/Run-Caddy-as-a-daemon
常用命令
# 以后台的方式启动 caddy caddy start --config /etc/caddy/Caddyfile # 以前台的方式启动 caddy caddy run --config /etc/caddy/Caddyfile # 停止 caddy stop # reload 配置文件 caddy reload --config /etc/caddy/Caddyfile # 安装 CA 证书到本地目录 caddy trust # 格式化 Caddyfile caddy fmt --overwrite /etc/caddy/Caddyfile # 将标准的 Caddyfile 转成 json 格式的等效配置文件, 一般不用这种配置文件 caddy adapt --config /etc/caddy/Caddyfile --pretty
服务器连接成功后,手动创建一个自启动配置文件。注意不要使用命令来启动caddy
vi /etc/systemd/system/naive.service
将下面内容粘贴到 naive.service 文件中后 :wq 保存退出vi编辑模式。
[Unit] Description=Caddy Documentation=https://caddyserver.com/docs/ After=network.target network-online.target Requires=network-online.target [Service] Type=notify User=root Group=root ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile TimeoutStopSec=5s LimitNOFILE=1048576 LimitNPROC=512 PrivateTmp=true ProtectSystem=full AmbientCapabilities=CAP_NET_BIND_SERVICE [Install] WantedBy=multi-user.target
自启动文件创建完毕后,启动caddy:
#daemon-reload 加载新的 unit 配置文件 systemctl daemon-reload #enable 创建 unit 配置文件的软链 systemctl enable naive #start 启动配置文件 systemctl start naive #status 查看配置文件当前状态 systemctl status naive
查看以喜爱配置文件的当前状态,绿灯表示 caddy 已经启动成功了。
检查 Caddy 是否正在侦听端口80和443:
ss -tulpn | grep caddy
您可以通过在 PC 上打开 Google Chrome 并访问您的主机。例如:https://www.example.com
到这里 Naive 就已经配置完毕了,如果你喜欢尝试不同的naive配置文件,也可以采用下面的JSON方式,自定义naive配置文件。
Json自定义配置文件
查看官方JSON 配置结构
除了创建 Caddyfile 配置文件之外,你还可以将 Caddyfile 配置文件,转换为 json 文件。转换之后的 json 文件可以临时测试使用,也可以作为永久的配置文件使用,修改 naive.service 文件中的路径即可。下面贴出来一个自定义的 json 配置文件,喜欢测试的可以用来测试使用。
# /etc/caddy/caddy_server.json { "admin": { "disabled": true }, "apps": { "http": { "servers": { "srv0": { "listen": [ ":443" ], "routes": [ { "handle": [ { "handler": "subroute", "routes": [ { "handle": [ { "auth_user_deprecated": "用户名", "auth_pass_deprecated": "密码", "handler": "forward_proxy", "hide_ip": true, "hide_via": true, "probe_resistance": {} } ] }, { "match": [ { "host": [ "域名" ] } ], "handle": [ { "handler": "file_server", "root": "/var/www", "index_names": [ "index.html" ] } ], "terminal": true } ] } ] } ], "tls_connection_policies": [ { "match": { "sni": [ "域名" ] } } ], "automatic_https": { "disable": true } } } }, "tls": { "certificates": { "load_files": [ { "certificate": "/etc/letsencrypt/live/域名/fullchain.pem", "key": "/etc/letsencrypt/live/域名/privkey.pem" } ] } } } }
运行配置文件之前也需要预先格式化一下,否则会报错!
#格式化配置文件 caddy fmt --overwrite "/etc/caddy/caddy_server.json" caddy run --config "/etc/caddy/caddy_server.json"
配置 NaiveProxy 客户端
网络上除了NaiveProxy官方提供的客户端,还有很多支持NaiveProxy的第三方客户端,例如Q2ray。
NaiveProxy官方客户端
Naive客户端支持很广泛,Windows、Linux、Mac、Android等,最关键的是支持 Openwrt,可以将客户端内置到路由器中。
Naive客户端下载地址:https://github.com/klzgrad/naiveproxy/releases
下面看一下Windows平台的客户端配置以及连接速度。
下载 Windows 版本的客户端,解压缩后,打开 config.json 文件。
config.json 文件中很简单,就五行代码,还包括两行括号。
- listen 不需要改动,本机的代理端口,默认1080。也可以将127.0.0.1修改成0.0.0.0
- proxy 是上面设置的服务端的用户密码以及域名。如果使用 HTTP3 则将 https:// 改为 quic://
- log 日志文件,无需填写。如果删除改行,客户端的dos窗口不显示日志。
NaiveProxy客户端启动完毕后,还需要配置一个socks5的网络代理,才能正常使用 Google Chrome 浏览器进行访问。
下面介绍一个 Google Chrome 插件 SwitchyOmega !
Proxy SwitchyOmega
什么是SwitchyOmega
Proxy SwitchyOmega 可以轻松快捷地管理和切换多个代理设置。在Google Chrome 应用商店中搜索 SwitchyOmega ,直接在线安装即可。你也可以在备用下载地址中,下载安装包离线安装 Chrome 扩展应用。
Proxy SwitchyOmega 备用下载地址: https://github.com/FelisCatus/SwitchyOmega/releases
- Chromium 或基于 Chromium 的浏览器用户: 请从 Chrome 应用商店 安装。
- Mozilla Firefox 或者基于 Mozilla 的其他浏览器用户: 请从 Mozilla Add-Ons 安装。
此扩展为 SwitchySharp 的升级版,可替代 SwitchyPlus 或 Proxy Switchy. SwitchyOmega 初次安装时会检查是否存在 SwitchySharp ,如果有的话则会自动升级设置,无须手动配置。如果您使用的是非谷歌应用商店版,或者无法自动升级,则可以手动在SwitchySharp导出设置文件后,在SwitchyOmega导入,可兼容配置。升级到SwitchyOmega后请禁用SwitchySharp。
如有任何问题,请[右键]点击图标,并在菜单中选择“反馈问题”,以便开发人员及时解决。
2.x 版本新功能:
* 自动检测未加载的元素,并可通过弹出菜单一键设置使用代理。
* 支持需要用户名密码验证的代理服务器。
* 更灵活的代理配置:代理情景模式、多个自动切换模式以及多个规则列表。
* 新增多种切换条件类型,并改进原有的切换条件。
* PAC 脚本生成和切换的性能优化。
* 崭新的选项页面和下拉菜单,用户体验更佳。
* 许多错误修复以及改进。测试更充分。特别提醒:由于Chrome限制,同一时间只能有一个扩展控制代理设置,一般来说Chrome会优先后安装的扩展。冲突中若SwitchyOmega获得了优先权,则可以切换到“系统代理”模式,从而把优先权归还给其他扩展,从而解决问题。如果此扩展的配置被其他代理相关、或者去广告相关的扩展覆盖,则问题无法解决,只能通过重装SwitchyOmega来提高优先权。
通过Google Chrome浏览器SOCKS5代理访问,速度还是很快的。下面使用谷歌云测试搭建的Naive服务,在测速网站中,下载上传速度都很理想。至于个人隐私的防护方面,建议使用官方客户端,配置简单。其它第三方客户端如果配置不当,有可能会触发当地运营商的网络限流机制。
Naive客户端+Google Chrome+SwitchyOmega浏览器插件,最终实现了代理访问互联网。感觉客户端配置有些繁琐。至于隐蔽性如何,到底能不能保护个人隐私,这个因人而异了。
声明:本文仅仅用于互联网技术经验交流,文中所有内容均来自于互联网,本站只做技术类文章的收集整理。在不违规违法的前提下,尽可能的保护个人隐私。不要抱有侥幸心理,使用网络代理技术进行违法活动,你在网络上所有的一切活动,几乎都是透明的。
Thank you for your nice informations.
the forward proxy for caddy seems not support multi users.
ref:
https://github.com/caddyserver/forwardproxy/issues/81
And you say “If you want to build a multi-user version of Naive, you can copy the forward_proxy module. ”
How do we can it?
To where can I copy the forward_proxy module?
I want information to use Naive Proxy for multi users.
Thank you before.
端口只有IPV4的,IPV6无法使用
按照教程搭建后,我vps原来的wordpress 无法访问了,有办法兼容吗?配置文件怎么调,可以教下吗
Nginx和Caddy不能同时使用,你可以研究一下Caddy将WordPress放在Caddy下面。记得备份好数据!