#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模块的安装。