bitrix nginx код ответа 404

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модератор: SLEDopit

Ответить
Аватара пользователя
bars
Сообщения: 930
ОС: BSD/LINUX
Контактная информация:

bitrix nginx код ответа 404

Сообщение bars »

Добрый день.
Есть сайт на битриксе под управлением nginx.
Так вот, не могу добиться что бы по несуществующим картинкам у сайта была отдача 404 ошибки от самого nginx.
Сейчас отдача 500 ошибка вылазиет по несуществующим картинкам..
try_files $uri =404; пробовал добавлять в локейшен с картинками, не фига не помогает.
location ~ /upload/.+\.(jpg|jpeg|png|webp) - проксируется на ресайз кратинок скриптом lua.

Код: Выделить всё

server {
...
...
...
server_name test.test.ru;
access_log /var/log/nginx/access_test.log;
error_log /var/log/nginx/error_test.log error;
root /usr/local/www/test/test.test.ru;
index index.html index.php;

include /usr/local/etc/nginx/redirect_04032021;

if ($request_uri ~ "^(/(?!personal|search|auth|bitrix).*)index\.(?:php$|html)") {
   return 301 $1;
}

if (!-e $request_filename) {
       rewrite  ^(?!.*\.webp$)(.*)$  /bitrix/urlrewrite.php last;
}

location ^~ /.well-known/ {
        root /usr/local/www/cert/;
}

location / {
        index index.php;
        satisfy any;
        allow 11111;
        deny all;
        auth_basic "closed site";
        auth_basic_user_file /usr/local/.htpasswd;
	root /usr/local/www/test/test.test.ru;
}

location ~ \.php$ {
        index index.php;
        satisfy any;
        allow 7.2.0.7;
        deny all;
        auth_basic "closed site";
        auth_basic_user_file /usr/local/.htpasswd;
	fastcgi_pass unix:/tmp/test.sock;
	fastcgi_index index.php;
	fastcgi_param SCRIPT_FILENAME /usr/local/www/test/test.test.ru/$fastcgi_script_name;
	include fastcgi_params;
	fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f www@test.test.ru";
  if (!-f $request_filename) {
        rewrite  ^(.*)$  /404.php last;
  }
}

location = /favicon.ico {
        log_not_found off;
        access_log off;
}

location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
}

location ~* ^/bitrix/components/bitrix/player/mediaplayer/player$ {
        add_header Access-Control-Allow-Origin *;
}

location ^~ /bitrix/admin/ {
	index index.php;
        satisfy any;
        allow 7.2.0.7;
        deny all;
        auth_basic "closed site";
        auth_basic_user_file /usr/local/.htpasswd;
location ~ \.php$ {
        fastcgi_pass unix:/tmp/test.sock;
        fastcgi_index index.php;
        include fastcgi_params;
	fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f www@test.test.ru";
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_ignore_client_abort off;
 }
}

location ~ /upload/.+\.(jpg|jpeg|png|webp) {
            proxy_buffers 8 2m;
            proxy_buffer_size 10m;
            proxy_busy_buffers_size 10m;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.3.4:8083;
}

location ~* \.(swf|zip|rar|arj|cab|exe|dll|ico|gif|bmp|mp3|avi|mov|mpg|mpeg|txt|amr|mmf|wml|wbmp|mid|midi|3gp)$ { 
	error_page 404 /404.html;
	expires 30d;
	charset utf-8;
	source_charset utf-8;
	access_log off;
}

location ~* ^/(upload|bitrix/images|bitrix/tmp) {
 	expires 30d;
	access_log off;
}

location = /404.html {
        access_log off ;
}

location ~ (/\.ht|/bitrix/modules|bitrix/managed_cache|bitrix/local_cache|bitrix/stack_cache|/upload/support/not_image|/bitrix/php_interface) {
	deny all;
	access_log off;
}

location ~* ^/upload/1c_[^/]+/ { deny all; }
location ~* ^/bitrix/html_pages/\.config\.php { deny all; }
location ~* ^/bitrix/html_pages/\.enabled { deny all; }
location ^~ /upload/support/not_image   { internal; }

location ~ /.svn/ {
	deny all;
	access_log off;
}
}
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: bitrix nginx код ответа 404

Сообщение Bizdelnick »

В смысле — от скрипта получаете 500, но пользователю хотите отправить 404? Не проще ли скрипт исправить?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 930
ОС: BSD/LINUX
Контактная информация:

Re: bitrix nginx код ответа 404

Сообщение bars »

да при ресайзе картинок, оп несуществующим картинкам получаем 500 ошибку, должнабыть 404.
Ппопробовали вовсе убрать локейшен с ресайзом

Код: Выделить всё

location ~ /upload/.+\.(jpg|jpeg|png|webp) {
            proxy_buffers 8 2m;
            proxy_buffer_size 10m;
            proxy_busy_buffers_size 10m;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.3.4:8083;
}
В таком случае 404 отдается но от самого битрикса, а хочется что бы от nginx выдавалась ошибка.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: bitrix nginx код ответа 404

Сообщение Bizdelnick »

bars писал:
30.09.2021 12:37
В таком случае 404 отдается но от самого битрикса, а хочется что бы от nginx выдавалась ошибка.
Ну так сделайте, как выше сделано для другого локейшна:
bars писал:
30.09.2021 12:01

Код: Выделить всё

	error_page 404 /404.html;
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 930
ОС: BSD/LINUX
Контактная информация:

Re: bitrix nginx код ответа 404

Сообщение bars »

вот сам ресайз картинок.

Код: Выделить всё

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;
    }
}
Добавлено (13:22):
Bizdelnick писал:
30.09.2021 13:10
error_page 404 /404.html;
Добавлял и в локейген с картинками где проксируется. и в обычный локейшен с картинками без проксирования.
А так же в сам локейшен где ресайз происходит.
500 ошибка с ресайзом.
без ресайза 404 nginx., но если без ресайза картинок, то сайт открывается кошерна, большая часть картинок не открывается просто.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: bitrix nginx код ответа 404

Сообщение Bizdelnick »

bars писал:
30.09.2021 13:20

Код: Выделить всё

                local img = assert(magick.load_image(path))
                if not img then ngx.exit(ngx.HTTP_NOT_FOUND) end
assert уберите.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 930
ОС: BSD/LINUX
Контактная информация:

Re: bitrix nginx код ответа 404

Сообщение bars »

Bizdelnick писал:
30.09.2021 13:33
assert уберите.
А что оно даст?
Сделал local img = (magick.load_image(path))
Ошибка 500
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: bitrix nginx код ответа 404

Сообщение Bizdelnick »

bars писал:
30.09.2021 18:28
А что оно даст?
Должно было дать отсутствие вылета из скрипта и срабатывание проверки с возвратом 404. Возможно, ещё где-то ошибка в скрипте, я не вчитывался. А в error_log что при этом пишется?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 930
ОС: BSD/LINUX
Контактная информация:

Re: bitrix nginx код ответа 404

Сообщение bars »

Bizdelnick писал:
30.09.2021 18:57
Должно было дать отсутствие вылета из скрипта и срабатывание проверки с возвратом 404. Возможно, ещё где-то ошибка в скрипте, я не вчитывался. А в error_log что при этом пишется?
Прогер вот что придумал.
Теперь все в порядке, хотелось бы проще правило сделать.
Теперь на несуществующие картинки отдача ошибки от nginx.

Код: Выделить всё

location ~ /upload/.+\.(jpg|jpeg|png|webp) {
set $image_path $request_filename;
if ($image_path ~ ^(.*)\.webp) {
        set $image_path $1;
}

if (!-e $image_path) {
        return 404;
}
        proxy_cache tescache;
        proxy_cache_bypass $http_cache_control;
        proxy_buffers 8 2m;
        proxy_buffer_size 10m;
        proxy_busy_buffers_size 10m;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.3.4:8082;
}
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 930
ОС: BSD/LINUX
Контактная информация:

Re: bitrix nginx код ответа 404

Сообщение bars »

Подсказали на соседнем форуме.
Этот вариант мне больше нравится, map и try_files быстрее if и с меньшей нагрузкой.

Код: Выделить всё

http {
map $uri $image_path_without_webp {
        default $uri;
    ~(.+)\.webp $1;
}
И в вирутал хосте.

Код: Выделить всё

if (!-e $request_filename) {
   rewrite  ^(?!.*\.(jpg|jpeg|png|webp)$)(.*)$  /bitrix/urlrewrite.php last;
}

location ~ /upload/.+\.(jpg|jpeg|png|webp) {
try_files $image_path_without_webp =404;
....
....
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Ответить