互联网上有很多关于IE(Internet Explorer)的梗,确实IE已经是一款很老的浏览器了,刚才我打开Windows 10自带的IE,除了推荐我使用Edge外也在明示IE将在6月正式退役,所以现在开发的网站基本也不会在考虑IE,同样的考虑到本站的访客大部分应该是有一定技术背景的,用IE的可能性也不大,所以网站也不兼容IE,尤其是淘汰了TLS 1.1加密套件后,基本上也就目前最高版本的IE还能打开,我也稍微调整了一下JavaScript和CSS,让IE勉强可以浏览内容,但是交互的部分就无法保证了,等IE彻底退役后将不再考虑IE的可访问性。 实际上对于类似IE这类老旧浏览器最大的问题就是新的前端特性支持不全,导致脚本报错,除了可以使用jQuery替代外,也能使用一些Polyfill进行对应的Hack,其实随着新的前端技术的引入,我们对于jQuery的依赖越来越小,以后大的方向应该是抛弃 …

从去年3月15日网站全新改版到现在整个系统(服务器、应用程序)已经迭代了N轮,重点还是解决访问速度的问题,为此没有新增加栏目,好在是docker部署所以大大减轻了运维负担,并且通过自主编译也让Web服务器程序集成了HTTP/3、WAF等扩展功能,针对jsDelivr国内镜像失效导致引用的第三方库CDN拖慢了网站速度的问题,现在中国大陆的访客流量会自动切换到Staticfile CDN,速度有了改善,其实对于第三方库的引用我一直比较保守,如果不是为了优先保障用户体验,我更倾向于将流量限制在本机上,目前所有第三方库均做了完整性校验和匿名跨域,第三方CDN除了可能探测到访客IP外应该不会再获取其他信息。 据威言威语讲目前网站算是恢复到一个正常能访问的水平,之前第一次访问的访客甚至会看着旋转的加载动画发呆(笑),以前一直受到缓存的影响(毕竟自己刷自己网站是最多的)没有感觉到这点,直到有一天向别人推 …

如何确定公网IP地址是一个让很多家用宽带朋友们经常遇到的问题,毕竟固定IP地址总是价格不菲因而不适用于家庭宽带,而我们的电信宽带运营商(ISP)往往给我们分配的是动态IP地址,之所以称作为动态IP地址,是因为每次拨号得到的IP地址可能会不一样,还有更骚的操作就是有的运营商每天或不定期在某个时间刷新IP地址池,这样已经获得的IP地址将会被强制释放并分配新的IP地址,这对于我们一些运行在家用带宽下的服务带来了影响——需要重新设置服务端IP地址,比如监控、网络存储等等,这时候DDNS就发挥作用的,现在大部分路由器内置了DDNS客户端,比如花生壳等服务客户端,但是这些客户端存在收费、不稳定以及刷新间隔小等问题,对于自己有域名的朋友可以使用DNS服务商的API自己实现IP更新操作,比如阿里云(Aliyun)、Cloudflare均可以实现。 对于DDNS如何使用API更新不在本文叙述范围内,但调用 …

记得很久以前看过一个留学生使用华为上网棒架设越洋VOIP服务器实现境外使用国内SIM卡拨打电话的文章,颇为有意思,操作简单来说就是购买华为特定型号的USB上网棒(Dongle Modem),手机卡使用特定运营商的SIM,当然这里选择最便宜的套餐,国内使用树莓派安装RasPBX系统,将上网棒接入树莓派,配置FreePBX之后就可以愉快使用树莓派接打电话或收发短信了,而且在地球的任意角落也可以通过互联网实现境内通话资费。 一直对这种新鲜Geek范儿的事情比较感兴趣,正好手头闲置有树莓派,于是动手实施,当然本着不折腾不舒服的理由,我没有直接安装RasPBX这个定制的系统,当然另外的考虑就是树莓派仅作为话务中心服务对于我来说没有充分榨干其价值,毕竟上面还跑有其他各种特殊的服务,于是参考了RasPBX的定制脚本开始了折腾之路......遗憾的是这个事情已经过去有六七年了,当时没有记录折腾的步骤,虽然 …

日常运维中经常会接触到SSH(Secure Shell,安全外壳协议),通过SSH登录到要管理的服务器,通过各种命令完成整个服务器的维护,这个过程在内网中或者网络质量较高的时候总是很顺畅,但是当网络质量比较差的时候就会出现意外断开连接的情况了,比如比较常见的报错Socket error Event: 32 Error: 10053,这时候往往需要我们重新发起SSH连接,问题是新发起的连接无法继续上一个连接执行的命令,比如在断开连接前我们在虚拟终端执行了一个需要长时间等待的Shell命令,但是命令没执行完网络中断了,实际上此时的命令仍然在执行,如果遇到需要交互的部分还会停下来,只是我们新的连接将看不到命令的输出,可以通过ps aux | grep 进程名定位到进程。本文将介绍对于此类问题的应对方法供参考 1 终端的概念 1.1 什么是TTY TTY 是 Teletype 或 …

一些项目中对外服务需要开放一些API接口,常见也是最易用的就是使用GET方式向URL传参查询字符串(Query String),这种方式的缺点主要有①传输的数据需要进行URL编码(URL Encode);②受到URL最大长度限制,超过限制则有可能被Web服务器拒绝;③一种可能的安全缺陷就是Web服务器的日志有可能暴露敏感信息,比如查询字符串传递了密码,虽然使用HTTPS加密传输的URL能够避免被中间人拦截识别敏感信息,但是无法避免服务器端Web应用日志记录的问题,敏感信息可能会通过日志暴露给审计人员或者攻击者。 可能有读者会考虑使用POST方法是不是能够避免这些问题,确实对于复杂数据传输场景使用POST方式更为合适,因为POST请求的载荷(Payload)主要位于HTTP请求的主体(Body)部分,除非特殊配置,否则有效避免了②和③,对于①,常见的POST主体编码是表单模式,常见提交表单就 …

nginx作为反向代理服务器一直以轻巧高效著称,在日常实践中我将其作为项目的反向代理应用前端并取得了不错的效果,这里记录nginx其中利用njs模块的脚本支持读取ipset黑名单(白名单)从而实现访问控制列表(Access Control List)的方法,做法仅供参考,如有想法欢迎评论提出。 1 主要背景 1.1 问题的提出 互联网环境日益复杂和危险,对于新上线的服务器主机来说,每天都将面临大量的漏洞扫描、DDoS攻击,对于配置不当或者存在安全漏洞的主机,很容易就会沦为跳板机或者挖矿机,继而攻击网络中其他主机或者白白消耗宝贵的计算资源,对于互联网威胁我认为有必要采取积极的防御策略。 1.2 基本的防御策略 主要有这几种手段:① 关注安全公告并及时打补丁避免漏洞;② 复杂的身份认证策略,避免弱口令存在于SSH或者数据库系统中,建议采取证书或者key方式完成认证流程;③ 最小权限划分原则,避 …

本网站自从3月上线以来已经有8个月时间,期间也有各种bug,也勉强修复了,最初网站运行在.NET 5.0平台上,后来一直关注着.NET 6.0的进展,在微软正式Release的时候立马开始适配新的6.0平台,期间也遇到过各种坑,留有这篇文章仅做记载。 1 安装Visual Studio 2022 因为Visual Studio 2019不再支持NET 6.0 SDK,如果想继续在VS平台下开发,必须升级到Visual Studio 2022,对于个人来说我们选择Community版本就可以了,安装完成后选择用最新的VS2022打开你的项目。 2 升级NuGet Package到最新版本 由于我是等到.NET 6.0正式版出来的时候升级的,大部分的第三方包(Package)已经适配了.NET 6.0,可以直接升级,但仍然建议各位查阅项目官方的文档,特别是breaking changes以及用 …

.NET Core多语言本地化支持可以让所开发的应用更加国际化,但是不同操作系统平台之间可能会遇到一些特有的部署问题,本文将介绍我在Linux环境下部署国际化应用过程中遇到的zh-CN中文资源丢失问题的解决方案,当然可能有其他更好的方案,这里不做推荐,本文操作使用的软件环境是Debian 11、ASP.NET 5.0、nginx,仅供参考。 1 多语言国际化应用的建立 .NET Core本地化方式参考《Globalization and localization in ASP.NET Core》,通常情况下,在Startup.cs的ConfigureServices部分会包含如下代码: services.AddLocalization(options => options.ResourcesPath = "Resources"); services.AddMvc() . …

Docker默认是不开启IPv6支持的,但是我们某些业务往往又需要IPv6的支持,特别是IPv6普及大势所趋,本文主要介绍的是如何开启Docker桥接网络IPv6支持,这篇文章具体操作仅供参考,建议以官方文档为准。 本文最重要的先决条件是主机商已经分配给你一个公网IPv6地址段,我们可以通过查看主机控制面板中信息、询问主机供应商或者直接SSH登录主机使用命令ip -f inet6 addr show eth0获取。命令方式获取的ipv6地址输出如下: 6: eth0: mtu 9000 inet6 2607:f0d0:1002:51::4/64 scope global valid_lft forever preferred_lft forever inet6 fe80::230:48ff:fe33:bc33/64 scope link …


Some archived posts that were written in Simplified Chinese before the year 2021 were moved to and it may never update.