Добрый день.
Есть сайт на битриксе под управлением nginx.
Так вот, не могу добиться что бы по несуществующим картинкам у сайта была отдача 404 ошибки от самого nginx.
Сейчас отдача 500 ошибка вылазиет по несуществующим картинкам..
try_files $uri =404; пробовал добавлять в локейшен с картинками, не фига не помогает.
location ~ /upload/.+\.(jpg|jpeg|png|webp) - проксируется на ресайз кратинок скриптом lua.
server {
listen 127.0.3.4:8082;
set $files_root /usr/local/www/test/test_test_ru;
root $files_root;
access_log off;
expires 30d;
location /upload {
# дефолтные значения ресайза
set $w 0;
set $h 0;
set $q 92;
set $rtype "resize";
set $filter "Lanczos";
#1-99 allowed
if ($arg_q ~ "^([1-9]|[1-9][0-9])$") {
set $q $arg_q;
}
if ($arg_rtype ~ "([\w\-]+)") {
set $rtype $1;
}
if ($arg_filter ~ "([\w\-]+)") {
set $filter $1;
}
if ($arg_resize ~ "([\d\-]+)x([\d\+\!\^]+)") {
set $w $1;
set $h $2;
rewrite ^(.*)$ /upload/optimize/$rtype/$filter/$w/$h/$q$uri last;
}
rewrite ^(.*)$ /upload/optimize/$rtype/$filter/$w/$h/$q$uri last;
}
location ~* ^/upload/optimize/(resize|crop)/(.*?)/([\d]+)/([\d\+\!\^]+)/([\d]+)/upload/(.+)(\..*?)$ {
default_type 'text/plain';
set $rtype $1;
set $filter $2;
set $w $3;
set $h $4;
set $q $5;
set $fname $6;
set $format $7;
if ($request_filename ~ "([^/]+)$") {
set $base_file_name $1;
}
if (!-e $request_filename) {
content_by_lua_block {
package.loaded.eeMagick = nil
local magick = require "eeMagick"
local format = ''
local command = ''
local nginxWidth = tonumber(ngx.var.w)
local nginxHeight = tonumber(ngx.var.h)
local nginxQuality = tonumber(ngx.var.q)
if ngx.var.format ~= '.webp' then
format = tostring(ngx.var.format)
end
local path = ngx.var.files_root .. "/upload/" .. ngx.var.fname .. format
local pathFolderSave = ngx.var.request_filename
local baseFileName = ngx.var.base_file_name
baseFileName = baseFileName:gsub("%-", "%%-")
pathFolderSave = pathFolderSave:gsub(baseFileName, "")
local img = assert(magick.load_image(path))
if not img then ngx.exit(ngx.HTTP_NOT_FOUND) end
img:auto_orient()
local w, h = img:get_width(), img:get_height()
if nginxWidth == 0 and nginxHeight == 0 then
img:sharpen(1, 0)
os.execute("mkdir -p " .. pathFolderSave)
img:write(ngx.var.request_filename)
ngx.print(img:get_blob())
else
if ngx.var.rtype == 'crop' then
img:resize_and_crop(nginxWidth, nginxHeight, ngx.var.filter)
else
local scale = math.min(nginxWidth / w, nginxHeight / h)
img:resize(w * scale, h * scale, ngx.var.filter)
end
img:sharpen(1, 0)
img:set_quality(nginxQuality)
img:set_interlace_scheme('PlaneInterlace')
img:strip()
if ngx.var.format == '.webp' then
img:set_format("webp")
end
-- ngx.print(ngx.var.request_filename)
os.execute("mkdir -p " .. pathFolderSave)
img:write(ngx.var.request_filename)
ngx.print(img:get_blob())
end
}
}
try_files $uri =404;
error_page 404 /404.html;
}
}
Добавлял и в локейген с картинками где проксируется. и в обычный локейшен с картинками без проксирования.
А так же в сам локейшен где ресайз происходит.
500 ошибка с ресайзом.
без ресайза 404 nginx., но если без ресайза картинок, то сайт открывается кошерна, большая часть картинок не открывается просто.
Должно было дать отсутствие вылета из скрипта и срабатывание проверки с возвратом 404. Возможно, ещё где-то ошибка в скрипте, я не вчитывался. А в error_log что при этом пишется?
Должно было дать отсутствие вылета из скрипта и срабатывание проверки с возвратом 404. Возможно, ещё где-то ошибка в скрипте, я не вчитывался. А в error_log что при этом пишется?
Прогер вот что придумал.
Теперь все в порядке, хотелось бы проще правило сделать.
Теперь на несуществующие картинки отдача ошибки от nginx.