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 服务器)。
这样子做有几个好处:
- 制作错误,可以直接删除容器,重新制作,避免重装系统
PHPStudy for Linux
是运行在Docker
环境中,运用 Docker 的 Centos 7 编译,可以更好的判断兼容性
a. 拉取镜像
首先当然要安装好 Docker ,平台不同没有关系,Docker 就是为了提供一个跨平台的服务而诞生的
依次在终端输入以下命令
docker run -it --name centos7 centos:centos7 /bin/bash
运行完毕后,我们就进入了Centos 7
容器的内部
如果不小心退出来,我们可以用下面的命令来重新进入容器内部
- 启动容器:
docker start centos7
- 进入容器
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
最新评论