0

Перенес сайт на новый сервер с другой панелью управления (aaPanel) перенес конфиг сайта nginx, все работает кроме одного rewrite, что можете посоветовать?

Код:

location / {
    location /image {
      rewrite ^/image/(.+).jpg$ /static/image.php?id=$1 last;
    }
}

По этому адресу изображение есть:

https://mydomain.com/static/image.php?id=AtYOA6MXJ6U

А тут 404:

https://mydomain.com/image/AtYOA6MXJ6U.jpg

Как исправить?

  • 404 от nginx или от php? Что в логах ошибок написано? – andreymal Jun 15 '22 at 21:41
  • 2022/06/16 00:09:00 [error] 346168#346168: *126680 FastCGI sent in stderr: "PHP message: PHP Warning: Creating default object from empty value in /www/wwwroot/mydomain.com/scripts/functions.php on line 760PHP message: PHP Warning: Creating default object from empty value in /www/wwwroot/mydomain.com/scripts/functions.php on line 855PHP message: PHP Warning: Creating default object from empty value in /www/wwwroot/mydomain.com/scripts/functions.php on line 760", – Дмитрий Самченко Jun 16 '22 at 05:53
  • Но я не уверен что эти ошибки относятся к выводу того изображения, после переезда на другой сервер, вылазят ошибки и не реврайтит изображение, вот тут уже писал про php ошибки (но пока решения нет): https://ru.stackoverflow.com/questions/1420426/Как-исправить-warning-creating-default-object-from-empty-value-in – Дмитрий Самченко Jun 16 '22 at 05:57
  • А в логах ошибок nginx что? – andreymal Jun 16 '22 at 08:05
  • В логах ничего нет, если выношу строку rewrite ^/image/(.+).jpg$ /static/image.php?id=$1 last; с location / то все работает, не понятно по чему остальные реврайты работают корректно в нутри location / а именно этот не работает, срабатывает только если его выношу с location / – Дмитрий Самченко Jun 16 '22 at 10:25

1 Answers1

1

Поищите среди других location регулярку, под которую попадает ваш запрос /image/AtYOA6MXJ6U.jpg. Например location ~* \.jpg$

Дело в порядке обработки локейшанов. Ваш location /image будет обработан после:

  1. location = /image/AtYOA6MXJ6U.jpg
  2. location ^~ /image
  3. location ~* .jpg$

Чтобы увидеть весь конфиг дайте команду nginx -T

  • Отобразил весь конфиг, залил его в текстовый документ, прошелся поиском .jpg$ и нашел только тот реврайт который вынес за пределы локейшен, днугих нет. – Дмитрий Самченко Jun 16 '22 at 15:06
  • я привел регулярку для примера, вариантов может быть много и все они отработают перед. Приложили бы свой конфиг – Aleksey Vaganov Jun 17 '22 at 03:36
  • Выложил конфиг по ссылке: https://privnote.com/HIPcXnAp#4CC7JoAGS – Дмитрий Самченко Jun 17 '22 at 07:59
  • вот же отрабатывающий локейшн location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ – Aleksey Vaganov Jun 17 '22 at 08:20
  • Из-за него мой rewrite не отрабатывает внутри другого location, а работает только когда вне location? – Дмитрий Самченко Jun 18 '22 at 07:55
  • да. Для каждого запроса будет выбран только один location в порядке приоритета, указанного мной – Aleksey Vaganov Jun 18 '22 at 07:59