新的域名终于备案通过了,但在服务器上安装宝塔面板并创建网站之后,却发现不知为何无法申请 Let's Encrypt 的免费 HTTPS 证书。只要我打开网站 SSL 配置中 Let's Encrypt 证书的申请界面,就会弹出 JSON 格式的报错信息。最后我手动用 Certbot
申请证书解决了这个问题,在此记录一下。
分类目录归档:经验
使用 Nginx 反向代理将 Jupyter Lab 绑定到子域名
我在能连接到公网的服务器上开了一个 Jupyter Lab 服务,平时用来看数据和测试一些代码。
考虑到用 Nginx 来管理 Web 服务的 IP 白名单和 HTTPS 证书会比较方便,而且,如果将 Jupyter Lab 绑定到子域名上,URL 中可以省去一个端口号,看起来比较美观。因此,我决定采用 Nginx 反向代理的方式,将服务绑定到子域名上。途中遇到了一些坑,在此记录一下。
解决 Windows 10 端口被 Hyper-V 随机保留(占用)的问题
大概从半年前开始,我发现我的代理软件配置的端口有时会不能用,软件提示「没有权限访问端口」。这个问题会在什么时候出现完全随机,没有任何规律。对于这个问题,有时候重启可以解决,有时候重启好几次才能解决,并且如果运气不好,可能重启几次后这些端口还是不能用……
这让我非常困惑,我给代理软件开了管理员权限,但没有效果。我使用 netstat -ano
想看看这些端口被什么程序占用,却一无所获。当时,我误以为是代理软件出了一些神秘问题,在 google 无果后,因为大多数时候重启都能解决,我就没有再管。
直到前两天,我在做 Web 开发时,发现在 Windows 10
中使用 localhost:8088
死活访问不了 WSL 2 的 8088
端口。一开始我以为是 WSL 2
默认的端口转发出错了,便用 netsh interface portproxy
重新指定了端口转发,但还是访问不了。我又猜想可能是 WSL 2
中 Ubuntu
的防火墙规则有问题,但排查后发现不是。我又怀疑是 Windows 10
的防火墙设置有问题,但仔细核对后发现确实没有问题。正当我百思不得其解时,我随手把端口号换成了 3000
,发现居然能用了。并且在我再一次重启电脑之后,发现之前不能用的 8088
也又能用了。
这个灵异问题让我顿时联想到了半年前出现的那个代理软件端口不能用的问题,我试着又重启了几次,发现刚刚能用的 8088
端口又不能用了。面对这种奇葩情况,我只能推断可能是 Windows 10
因为某些原因,会随机保留这些端口号,不让用户使用。
但老重启也不是个事儿,这次我找对了搜索关键字,一番 google 后终于搞明白了问题的成因,并解决了这个困扰我半年之久的问题。
设置 Ubuntu 20.04 终端语言和 man 命令返回内容为简体中文
近期通过 SSH 连接服务器使用比较多,服务器系统是 Ubuntu 20.04。
用得多了后,就感觉每天看着命令行里的英文怪头疼,想起来之前用图形界面的 Manjaro 时,安装好系统后终端里的命令提示都是中文,说明应该存在一个比较简单的方法将终端语言切换为中文。便查询了一下,发现确实非常方便,也在博客中记录一下。
随手一记
记录一些零碎的日常知识。
优化中文网页排版样式
互联网的概念的是西洋人提出的,网页与网页浏览器也都发源于西方,因而在默认样式下,网页浏览器对中文网页排版总有些捉急——举个简单的例子,如果网页中的中文字符和英文字符相邻,那么排版出来的效果是「挤在一起的」,字符与字符之间没有间隙,过渡难称平滑。此外,还有如「标点挤压」「行尾点号悬挂」「章节边界调整」等问题,都是压在中文网页排版样式上的大山。
ThinkPHP 5.1 笔记(一)
最近在做一个需要大力出奇迹、快速开发的东西,听说 ThinkPHP 十分易于上手,就决定试一试用 ThinkPHP5.1 稳定版做程序的后端。因为过去基本没有用过 PHP 语言和 ThinkPHP 框架,所以基本是一边看手册一般写代码的。使用体验很好,ThinkPHP 不愧是风靡无数培训班的 PHP 框架,上手和使用都可以说是零门槛。
以下是我写代码时记录下的一些笔记。
[译] 如何检测 Chrome Headless(无头浏览器)?
原文链接:https://antoinevastel.com/bot%20detection/2017/08/05/detect-chrome-headless.html
原文标题:Detecting Chrome Headless
原文作者:Antoine Vastel
译者注:自从 Chrome Headless 发布后,各种基于 Chrome Headless 的自动化测试工具、爬虫等项目层出不穷。比起已经停止更新且容易被针对的 PhantomJS、Selenium 等经典自动化测试程序,Chrome Headless 几乎是完美的。然而,比起 Chrome 的普通模式,Chrome Headless 仍然有一些细微的差别,使其会被抓住小辫子……
编者注:我创建了一个库,可以使用浏览器指纹来检测识别机器人与爬虫。虽然这个库仍在开发中,但您已经可以开始使用它了。Github 地址为:https://github.com/antoinevastel/fpscanner
什么是无头浏览器(headless browser)?
无头浏览器就是一种没有图形用户界面的浏览器。它可以被程序控制,从而自动执行某些任务,例如进行网页自动化测试或网页截图。
为什么要检测无头浏览器?
除了上文提到的那两个人畜无害的例子,无头浏览器还可用于自动执行一些恶意的任务。例如,无头浏览器经常被用于网页爬取,增加广告展示次数或寻找网站漏洞中。
到目前为止,最受欢迎的无头浏览器之一是 PhantomJS。不过,因为它是基于 Qt 框架构建的,所以与大多数流行的浏览器相比,它在许多地方都有所不同。正如这篇文章所述,我们可以使用一些基于浏览器指纹的识别技术来检测它。
在 Chrome 59 之后,Google 发布了 Chrome 浏览器的 Headless 版本。与 PhantomJS 不同,它基于普通的 Chrome 而不是外部框架,这使得它更难被检测出来。
接下来,我们将介绍几种可用于区分普通 Chrome 浏览器和 Chrome Headless 的技术。