4.21阶段性总结

Pluviophile 发布于 2024-04-21 116 次阅读


nginx优化

昨天晚上看到群里在说proxy protocol的事情,看到群友的配置受到了点启发,于是又去倒腾nginx和frp。发现了好多问题。

以前看文档说的nginx启用proxy protocol对nginx有要求:

于是我去搜nginx plus和nginx open resouce,nginxplus无疑是面向企业的专业版,显然是收费的,然后搜nginx open resouce ,搜到的是github上的开源项目,都是only for linux,能找到的windows版本只有一个,就是nginx.org,但这个项目怎么看都是官方版本的另一分支,像是自行编译的,而且最新版本到了1.25,和1.13差的很大内心os:这功能应该是新版才有的吧所以就有了先入为主的观点:应该是用不了。

还有一层buff:frp转发的是http2流量,nginx不在listen行写上http2会报一个http_protocol_error的错误,我之前一直不知道,用着frp的https2https插件,不知道为什么这个可以用,但是这样疑似又启用不了proxyprotocol(真是玄学),会导致nginx获取到的proxy_protocol是一段乱码 belike:

2024/04/21 01:21:41 [error] 13796#3780: *97 broken header: " ꁠ 惃’¾‘šɜ`;·Ńs–£¶῟ÿoLz8gØu@`ù 㡾r;?¤8EȻ®cÔ)‘c*V<r-ꔡӣù9 &À+À/À,À0̨̩À	ÀÀ" while reading PROXY protocol, client: 127.0.0.1, server: 0.0.0.0:443

所以一直都没用上,只能fetch获取ip的api来获取客户端ip

昨晚我又心血来潮,想搞一下看看,先后尝试了关掉https2https插件,更改proxyprotocol协议版本,更改nginx写入响应头的变量(批评一下网上的各种教程,给的五花八门而且都不对,误导我好久)前面几次结果不是502就是broken header,直到我把响应头的变量从$remote_addr换成$proxy_protocol_addr,把frp的插件关掉,终于在响应头列表里找到了那个真实ip。当时我真的很激动,感觉自己是个天才hhhhh。

第二天早上起来,我依此又优化了一下nginx,写了两个请求头:

set_header X-Ipv4 $proxy_protocol_addr always;
set_header X-Ipv6 $remote_addr always;

因为我只在ipv4的listen中启用了proxyprotocol,所以$proxy_protocol_addr这个变量必然只有在ipv4访问即走frp的时候会出现,而走ipv6直连时ip会在remote_addr中,X-Ipv4就不会出现。但这样有一个问题:在走frp时X-Ipv6会被赋一个127.0.0.1的值,这是因为远程服务器是本机上的frp,我感觉这个不太好看,又优化了一下:

if ($remote_addr = '127.0.0.1') {
    set $ipv4_is_true 1;
    set $real_ip $proxy_protocol_addr;
}
		
if ($remote_addr != '127.0.0.1') {
    set $real_ip $remote_addr;
}
		
add_header X-Ipv4-Is-True $ipv4_is_true;
add_header Ip $real_ip always;

这样就只会显示一个real_ip,而且添加了一个X-Ipv4-Is-True的请求头,便于脚本判别ipv4或ipv6访问。
到这,我就改完了nginx的配置,可以说是很完美了。然后我趁热打铁,又去折腾了一下我的脚本,把原来的脚本丢给ai让他帮我重写,结果就是少了几乎一半的代码量,还更简洁了(((((

如图,左边是修改后的,右边是修改前的

虽然但是,ai写的代码有很多错误,我还得自己改(嗯嗯嗯

其他优化

也把代码结构优化了,把原来写在html里的script拆下来放到文件夹里了。

又去搞php和wordpress本体,,结果restapi死活用不了,,也懒得弄了,或许以后哪天我一拍脑门就想出来解决方法了呢hhh

把底部的寄语修改了颜色,变成了爱莉希雅色

然后就没什么了,或许我想起来再写吧。