Nginx 有很多功能丰富的模块,这里面包含自带模块以及第三方模块,这里介绍一下军哥 LNMP 环境下如何添加第三方 Nginx 模块的教程,在 Nginx 中添加 Brotli 模块以及 Cookie Secure 模块,大大提高网站速度和安全性。
Nginx 安装 Brotli 模块
根据 Google 发布的研究报告,Brotli 压缩算法具有多个特点,最典型的是以下 3 个:
- 针对常见的 Web 资源内容,Brotli 的性能相比 Gzip 提高了 17-25%;
- 当 Brotli 压缩级别为 1 时,压缩率比 Gzip 压缩等级为 9(最高)时还要高;
- 在处理不同 HTML 文档时,Brotli 依然能够提供非常高的压缩率。
可以看到 Brotli 算法的效果还是比较显著了,明显提高了速度。
下载 Nginx Brotli 源码
找一个存放 Brotli 源码的目录,比如我的是/root/lnmp1.6/src
目录,然后执行以下命令:
cd /root/lnmp1.6/src/ git clone https://github.com/google/ngx_brotli.git
然后添加模块路径到lnmp.conf
文件中,执行以下命令:
vim /root/lnmp1.6/lnmp.conf
在Nginx_Modules_Options=
后面添加上你需要的模块,比如:
Nginx_Modules_Options='--add-module=/root/lnmp1.6/src/ngx_brotli'
然后保存文件,执行 Nginx 升级命令:
cd /root/lnmp1.6 ./upgrade.sh nginx
选择你想要升级的版本,即可编译安装 Nginx 成功添加新的模块。
修改配置文件
安装完成之后,需要修改 Nginx 的配置文件,因为前面我们只是给 Nginx 编译安装上了 Brotli 的模块,但是此时它还是未启用生效状态的,我们需要编辑 Nginx 的配置文件,加入 Brotli 的配置。
编辑/usr/local/nginx/conf/vhost
中的网站对应配置文件,在Sever
段中加入如下配置:
# 开启 ngx_brotli 压缩 brotli on; # 指定压缩数据的最小长度,只有大于或等于最小长度才会对其压缩。这里指定 20 字节 brotli_min_length 20; # Brotli 请求缓冲区的数量和大小 brotli_buffers 16 8k; # Brotli 使用的窗口值。默认值为 512k brotli_window 512k; # 压缩水平可以是 0 到 11,默认值是 6。太高的压缩水平对性能提升并没有太大好处,因为这需要更多的 CPU 时间 brotli_comp_level 6; # 指定允许进行压缩的类型 brotli_types text/xml text/plain application/json text/css application/x-javascript application/xml application/xml+rss text/javascript image/svg+xml image/svg application/font-woff application/vnd.ms-fontobject application/vnd.apple.mpegurl application/javascript image/x-icon image/jpeg image/jpg image/gif image/png; # 是否允许查找预处理好的、以 .br 结尾的压缩文件。可选值为 on、off、always brotli_static always;
如果按照官方提供的文档说明,我们可以把它放在 Nginx 配置文件nginx.conf
的 HTTP 段中,本站就是这么处理的,因为多个站点可以一次性全部开启。
重载 Nginx 使得配置生效:
lnmp nginx reload
然后可以在前端查看页面是否启用了 Brotli 算法,只要响应头里看到Content-Encoding: br
字眼,说明已经成功启用了。
如果没有出现,建议查看 nginx 的模块是否编译成功,可以执行:
nginx -V
查看具体的模块,如果有 Brotli 字眼,说明已经成功,这个时候就检查配置文件即可。
安装 Nginx_Cookie_Flag_Module 模块
由于谷歌的安全限制,现在浏览器会出现 cookie 的警告提示,通过在 HTTP 响应标头中包含HTTPOnly
和Secure
可以帮助保护您的 Web 应用程序,免受跨站点脚本和会话操纵攻击。
有两种方法可以在 Nginx 中配置 HTTPOnly 和 Secure 的 Cookie 属性:
使用 proxy_cookie_path
将以下指令添加到ssl.conf
或default.conf
proxy_cookie_path / "/; HTTPOnly; Secure";
然后重载 Nginx 配置
lnmp nginx reload
配置 Nginx_Cookie_Flag_Module 模块
这里我们使用 Nginx 模块的方式,相比前面滥用 cookie 安全的方式更加严谨。
下载 Nginx_Cookie_Flag_Module 模块
找一个你想存放 Brotli 源码的目录,比如我的/root/lnmp1.6/src
目录,然后执行以下命令:
cd /root/lnmp1.6/src/ git clone https://github.com/AirisX/nginx_cookie_flag_module.git
和上面安装 Brotli 模块一样,我们在lnmp.conf
文件中添加相应模块,如果你想要将这两个一起添加,那么命令如下:
Nginx_Modules_Options='--add-module=/root/lnmp1.6/src/ngx_brotli --add-module=/root/lnmp1.6/src/nginx_cookie_flag_module'
然后保存文件,执行 Nginx 升级命令:
cd /root/lnmp1.6 ./upgrade.sh nginx
选择你想要升级的版本,即可编译安装 Nginx 成功添加新的模块。
修改配置文件
查看模块是否安装成功:
nginx -V
然后可以在相应的配置文件中的location
或server
指令中添加以下行:
set_cookie_flag HttpOnly secure;
重载 Nginx 配置,到这里就可以解决浏览器 cookie 警告的问题了,增强了网站安全性。