Nginx HTTPS 性能优化

启于 一开始源于一个一闪而过的想法——反向代理是否会引入额外的延时?然后进一步思考:倘若 CDN 使用 https 回源,然后又用 https 反代,这光是握手是不是就得来回十几遍才行? 显然,放弃 https 不是一个合理的做法(事实上是一个疯狂的做法),那么就研究了一下 https 的优化思路,整合了一些网上的资源,在此记录一下。 以下配置并不适用于所有情况,最典型的,CDN 不提供某些配置选项,我们只能把我们掌控之下的事情做好。 一些思路 HTTP2 HTTP1.1 发布于1999年,已经是上个世纪的东西了。当时智能手机、自动驾驶还停留在科幻作品里。然而20年后的今年,那些曾经处于幻想中的设备,竟然还在使用当初的协议… 我们知道 TCP 的反复握手总是很恶心。一个网页往往有含有大量的资源,于是很多时间被浪费在建立连接上,可以到这个网站测试感受一下。对于 HTTP2,同域名只建立1个 TCP 连接,也就是说握手再也不会充斥我们的网路了。当然,还有其他优点,这里不再一一列举。 启用 HTTP2 很简单,加上一个标志即可: listen 443 ssl; # 旧配置,改成下面这行 listen 443 ssl http2; 多数 CDN 应该支持此功能。 这个工具可以检测 HTTP2 以及下面几个配置项的状态。 启用 OCSP Stapling (装订) 对于个人站长,这个也许是作用最明显的了。由于一些不可描述的原因,Let’s Encrypt 的证书验证服务器从中国大陆访问不是很稳定。通常客户端会按照 OSCP 协议去查询证书的状态(以免证书被吊销但本地的吊销列表没有及时更新),如果这一步骤很慢,则直接影响整体加载速度。 启用 OCSP Stapling 后,服务器会预先查询自己证书的状态,将带有 CA 签名的结果缓存在本地,与证书链一并发送给客户端,这样客户端不需要自己再进行请求,只要验证合法性即可。也就避免了网络因素导致的延时。 启用方法也不复杂,加上三行配置: ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /path/to/full_chain.pem; # 完整证书链 多数 CDN 应该支持此功能。...

September 5, 2021 · Chenhe

利用GHActions部署hugo博客到自己VPS

受够了 Wordpress 的臃肿以及对 markdown 的水土不服,受不了 ghost 主题的匮乏与对中文圈的态度。Hexo 用过一段时间,但实在太讨厌 NPM 了,只想安安静静写个博客,结果竟然还要配“开发环境”? 于是 —— Go 真香!迁移到了 Hugo。和 Hexo 一样作为一个静态网站生成器,集成 Github Pages 几乎是标配了,但是 GH 近期在大陆似乎不太如意,眼看着就差彻底断联了。所以还是更想放在自己的香港 VPS 上。作为踩坑记录,这篇文章出现了。 上传文件到 VPS 因为 hugo 生成本身非常容易,就一行命令的事,所以我们先来解决主要矛盾,那就是怎么把生成的文件放到 VPS 上。 rsync 当然,你大可以配一下 Hook,GH 生成完毕后打包传到 Release 或其他什么鬼地方,通知服务器,然后服务器再去拉取回来解压。显然,这不是一个「优雅」的方案。 我希望这一步尽可能地简单,简单到无序通知 VPS 进行额外操作,GH 可以单方面部署完成,这样就少了许多维护成本与不稳定因素。既然是文件传输,自然想到 FTP SFTP/SCP。这两个其实都行啦,不过这里都不用 😂,而且另一个更加适合此场景的东西——rsync。这是一个文件同步服务,可以进行差异比较只传输必要部分,和其他一堆现代化的特性,有兴趣自己查查看吧 标准的服务器系统应该预置了 rsync(不要告诉我你使用 windows),这东西用起来和 scp 很像——都是借用 ssh 进行传输,也使用系统账户进行认证。一条命令轻松实现需求 -a 表示递归同步,并且同步元数据 -v 打印一些信息 --delete 删除目标文件夹存在但本地不存在的玩意,不加这个参数就是增量同步。你一定不希望删掉某个不可描述的东西后实际上文件还在那吧 😄 rsync -av --delete source/ username@host:destination (才怪)难道你的服务器不要身份验证了? 你可以直接把 VPS root 的用户名密码,或者密钥拿过来使,又不是不能用。但是我 觉得 肯定这不是个好主意。新建个系统用户?然后 balabala…...

August 16, 2021 · Chenhe

CentOS 安装 java 环境

首先去java官网找jdk安装包:https://www.oracle.com/technetwork/java/javase/overview/index.html 由于官网需要接受协议才可以下载,linux可以使用如下命令: wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" +URL 在/usr/local目录下新建java文件夹,命令行: sudo mkdir /usr/local/java 然后将下载到压缩包拷贝到java文件夹中,命令行: cp jdk-xxxx.tar.gz /usr/local/java 然后进入java目录并解压,命令行: cd /usr/local/java sudo tar xvf jdk-xxxx.tar.gz 然后可以把压缩包删除,命令行: sudo rm jdk-xxxx.tar.gz 设置环境变量,这里直接设置全局。 修改修改etc/profile,在末尾添加: export JAVA_HOME=/usr/local/java/jdkxxxx export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 重新登录,校验安装结果: java -version

September 1, 2017 · Chenhe

Linux 配置 php-java-bridge

转自:http://www.piaoyi.org/php/php-java-bridge-jar-class.html 我的环境: CentOS7 64位,lnmp一键安装包-apach版,php7. 有的时候我们需要在PHP里调用JAVA平台封装好的jar包里的class类和方法,一般飘易推荐的做法是采用php-java-bridge做桥接,本文就来介绍一下大致的实现方法。 先简单说下php-java-bridge做桥接的实现原理: 先打开java的一个监听端口,php调用java的时候,将对应的方法调用转发到java的指定端口,由java执行后再将结果返回给php。这种模式是一种比较典型的代理模式,php在这里成为了一个代理转发器,把java的类调用转发给后端的java执行。 下载二进制的 JavaBridge.jar包、java/Java.inc库文件,下载地址:http://php-java-bridge.sourceforge.net/pjb/download.php 首先确认已经安装java jdk环境。 把JavaBridge.jar移动的java库的位置: /usr/local/java/jdk1.8.0_121/jre/lib 在JavaBridge.jar所在目录运行命令(先cd到所在目录) java -jar JavaBridge.jar SERVLET_LOCAL:8081 & (加&是让其在后台运行) 或者直接带上日志等级 java -jar JavaBridge.jar SERVLET:8081 3 JavaBridge.log & 执行后,我们使用命令netstat -nltp,发现linux已经开启了一个8081端口开始监听: PS:如果需要开机启用,配置:/etc/rc.d/rc.local 末尾添加: java -jar JavaBridge.jar所在绝对路径 SERVLET_LOCAL:8081 & 在web目录下放置 Java.inc文件,编写php测试代码 test.php define("JAVA_DEBUG", true); //调试设置 define("JAVA_HOSTS", "127.0.0.1:8081"); //设置javabridge监听端口 /*0: Log nothing, not even fatal errors. 1: Log fatal system errors such as "out of memory error"....

March 31, 2017 · Chenhe