nginx 配置图片模块image_filter和nginx 平滑升级

时间:2024-01-25 14:42:15

#nginx配置简单图片系统

* 用到的nginx模块有image_filter模块
* 该模块主要的配置参数为

```
image_filter size; // 以json的方式输出图片格式信息
image_filter rotate 90 | 180 | 270; // 图片逆时针旋转指定度数,该度数只能是90, 180, 270
image_filter resize width height // 缩小图片到指定的规格,如果想让一个维度缩放,另外一个维度等比例缩放,则另外维度参数值为'-'.如果配合rotate指令使用,那么执行顺序是先缩放,后旋转。
image_filter crop width height // 从左上角按照进行裁剪
image_filter off; // 关掉image_filter的应用
image_filter test; // 确保图片格式为jpeg,gif,png,webp等格式,否则返回415错误(Unsupported Media Type)



image_filter_buffer 10M // 设置图片最大缓存,如果超过,则返回415(Unsupported Media Type)
image_filter_interlace on|off
image_filter_jepg_quality 1~100;
image_filter_sharpen percent;
image_filter_transparency on|off;
image_filter_webp_quality 1~100

```

###配置可访问原图和格式尺寸的图片

```
server {
listen 80;
server_name static.mys.com;
access_log /var/log/nginx/host.access.log;
error_log /var/log/nginx/host.error.log;
proxy_set_header X-Forwarded-For $remote_addr;
location ~* /(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ { // 含有图片规格的请求方式 root /rootdir;
set $h $3;
set $w $2;
if ($h = '0') {
rewrite /(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ /$1.$4 last; // 如果高度为0那么跳转访问原图,注意rewrite指令中last的用法
}
if ($w = '0') {
rewrite /(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ /$1.$4 last; // 如果宽度为0那么跳转访问原图,注意rewrite指令中last的用法
}
rewrite /(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ /$1.$4 break; // 改写访问的url地址,注意rewrite指令中break的用法
image_filter resize $w $h; // 配置image_filte模块并使用
image_filter_buffer 2M;
image_filter_interlace on;
}

location ~* /.*\.(jpg|gif|png)$ { // 访问原图
root /rootdir;
}
}
```

### 对于nginx测试配置文件出现的问题
* unknown directive "image_filter" 问题

主要是因为Nginx中没有编译加入image_filter模块,因此需要重新编译加入该模块。

### Nginx的升级(centos下)
* 下载需要升级的版本,比如nginx1.17.4

```
wget http://nginx.org/download/nginx-1.17.4.tar.gz

```
* 进入下载目录,解压下载好的压缩包,比如/home/work/nginx目录下:

```
tar -zxf nginx-1.17.4.tar.gz // 解压压缩包
cd ./nginx-1.17.4/ // 进入解压目录

```
* 查看当前nginx版本的编译参数

```
nginx -V // 查看当前版本的编译参数

which nginx // 查看当前的nginx执行文件路径
```
* 重新配置nginx

```
./configure 配置参数 (通过nginx -V 找到的配置参数,同时加上 --with-http_image_filter_module 模块,注意修改--prefix 为通过which nginx查看到的路径
```
* 如果上一步报错,出现

```
./configure: error: the HTTP image filter module requires the GD library.
You can either do not enable the module or install the libraries.
```
* 需要安装gd库,centos下的安装命令为:

```
yum install gd gd-devel
```
* 安装完成,重新执行一遍./configure即可安装完成。
* 之后执行make命令进行编译,不要执行make install.

```
make
```
* 平滑替换旧的nginx执行文件

```
// 假如which nginx 得到的执行文件路径为:/usr/local/nginx
mv /usr/local/nginx /usr/local/nginx.old
cp ./objs/nginx /usr/local/nginx
```
* 然后在源码目录下执行:

```
make upgrade
```
* 确认image_filter安装完成,通过

```
nginx -V
```

* 完成之后需要重新启动nginx一次

```
nginx -s stop
nginx
```

* 即完成了nginx的平滑升级以及image_filter模块的安装。