0. 原因

由于我的博客后台使用的是 PHPStudy for Linux,这个集成的 PHP 环境给我们提供了方便的建站体验(没有恰饭)。也是由于这个原因,这个面板内置的 Nginx Web 服务器不支持最新的 HTTP2 协议,所以我想要手动编译,以让博客网站支持这个协议。

这个协议有什么好处,可以查看https://www.jianshu.com/p/67c541a421f9,总的来说,就是可以提升网站并发性能,加快网站加载速度,提升网站浏览的体验。

1. 编译过程

根据PHPStudy for Linux官方的介绍,PHPStudy for Linux是运行在Docker环境中。使用我研究了一下PHPStudy for Linux的一键安装脚本,发现这个 Docker 镜像是基于Centos 7镜像制作的。由于我并没有 Centos 7 的服务器,所以我打算使用本地Docker,拉取Centos 7镜像,作为 Centos 7 的服务器使用(假装我有 Centos 7 服务器)。

这样子做有几个好处:

  1. 制作错误,可以直接删除容器,重新制作,避免重装系统
  2. PHPStudy for Linux是运行在Docker环境中,运用 Docker 的 Centos 7 编译,可以更好的判断兼容性

a. 拉取镜像

首先当然要安装好 Docker ,平台不同没有关系,Docker 就是为了提供一个跨平台的服务而诞生的

依次在终端输入以下命令

docker run -it --name centos7 centos:centos7 /bin/bash

运行完毕后,我们就进入了Centos 7容器的内部

如果不小心退出来,我们可以用下面的命令来重新进入容器内部

  1. 启动容器:
docker start centos7
  1. 进入容器
docker exec -it centos7 /bin/bash

b. 安装依赖

依次输入以下命令,安装各种依赖库、编译工具等等

yum install -y pcre-devel openssl openssl-devel wget make git gcc

由于 Centos 7 软件源中的OpenSSL版本较低,并不能支持TLS1.3,只能支持 HTTP2 模块。如需支持TLS1.3,可能要大动干戈

c. 编译

PHPStudy for Linux 的 Nginx 是基于 OpenResty 编译的,所以我们这里也要使用 OpenResty 来编译

Ⅰ. 下载、解压源码包

我这里下载的 OpenResty 是最新版的

用下面的代码下载源码包,我保存在/home 目录,你们可以根据具体情况更换下载位置

wget https://openresty.org/download/openresty-1.15.8.2.tar.gz

输入一下代码解压之,并进入 OpenResty 目录

tar -xzvf openresty-1.15.8.2.tar.gz && cd openresty-1.15.8.2

Ⅱ. 添加第三方 model

查看PHPStudy for Linux官方版本的 OpenResty,发现有一个第三方的 model,所以我们要添加第三方的 model

输入以下命令,拉取 model

git clone git://github.com/yaoweibin/ngx_http_substitutions_filter_module.git

Ⅲ. 编译

PHPStudy for Linux官方版本的 OpenResty 中的 Nginx 是安装在/usr/local/phpstudy/soft/nginx/nginx-1.15/,所以我们也要让 OpenResty 安装在这里

输入以下命令新建文件夹

mkdir -p /usr/local/phpstudy/soft/nginx/nginx-1.15

输入以下命令初始化 Makefile 文件

./configure --prefix=/usr/local/phpstudy/soft/nginx/nginx-1.15 \
--with-cc-opt='-O2' \
--add-module=/home/openresty-1.15.8.2/ngx_http_substitutions_filter_module \
--with-http_stub_status_module \
--with-stream --with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-http_ssl_module \
--with-http_v2_module \
--with-stream \
--with-stream_ssl_preread_module \
--with-openssl-opt='enable-tls1_3 enable-ec_nistp_64_gcc_128'

最好一行的那个是用来支持 TLS1.3 的,但编译出来的版本,并不支持 TLS1.3。。。

输入以下命令编译 OpenResty

make && make install
# 如果你的电脑有多核心,可以用以下代码开启多核心编译,加快编译速度
make -j2 && make install

Ⅳ. 打包

输入以下命令打包

cd /usr/local/phpstudy/soft/nginx
tar -czf /home/nginx-1.15.tar.gz nginx-1.15

3. 部署

重新开启一个终端,将编译好的压缩包文件复制到本地

docker cp centos7:/home/nginx-1.15.tar.gz 复制的地址

nginx-1.15.tar.gz上传到服务器

输入以下命令解压覆盖安装

cp nginx-1.15.tar.gz /usr/local/phpstudy/soft/nginx/nginx-1.15.tar.gz
cd /usr/local/phpstudy/soft/nginx
tar -xzvf nginx-1.15.tar.gz 

最后重启一下服务器即可

4. 可能遇到的问题

gzip 无法使用

点击 「Nginx」「配置」「配置修改」,全选,删除,粘贴一下内容

worker_processes auto;
user  www;

error_log  logs/error.log;

events {
use epoll;
worker_connections 1024;
multi_accept on;
}

http {

lua_package_path "/www/common/waf_lua/?.lua;;";

include mime.types;

gzip  on;
gzip_buffers 16 8k;
gzip_comp_level 2;
gzip_min_length 8k;
keepalive_timeout 65;

client_body_buffer_size 8m;
client_header_buffer_size 32k;
client_max_body_size 50m;

include /usr/local/phpstudy/vhost/sys/nginx/*.conf;
include /usr/local/phpstudy/vhost/nginx/*.conf;

}

参考资料

OpenResty 安装:http://openresty.org/cn/installation.html

OpenResty安装(Centos7.2):https://blog.csdn.net/fouy_yun/article/details/78314486

Nginx编译安装第三方模块http_substitutions_filter_module:https://www.cnblogs.com/archoncap/p/4961204.html