Невозможно загрузить изображения с сайта WordPress – ответ неверный

Я пытаюсь развернуть Wordpress за Traefik в Azure, используя PersistentVolume, поддерживаемый файлами Azure. По большей части это работает. Я мог настроить WordPress, настроить его, получить к нему внешний доступ, редактировать контент и т. д.

Образ докера является официальным на Hub (https://hub.docker.com/_/wordpress). Единственное изменение, которое я сделал, — это указать клиенту MYSQL использовать SSL, в противном случае все остальное — ваниль.

Странно то, что ни одно изображение не отображается корректно. Apache считает, что это им подходит, но Траефик отвергает этот ответ как неверный. В частности, он получает «байты» вместо кода ответа и разрывает соединение, возвращая 500 обратно в браузер.

Я проследил его до самого сервера Apache и оказался в тупике. Вот что я вижу — опять же только изображения.

Это запускается изнутри контейнера, находящегося на AKS.

      root@wordpress-7bd5ccfd77-drm96:/var/www/html# curl --http0.9 -iv --raw http://localhost:80/wp-includes/images/spinner.gif
*   Trying ::1:80...
* Connected to localhost (::1) port 80 (#0)
> GET /wp-includes/images/spinner.gif HTTP/1.1
> Host: localhost
> User-Agent: curl/7.74.0
> Accept: */*
>
ges: bytes
Content-Length: 3656
Content-Type: image/gif

GIF89a...

Как видите, часть HTTP-ответа обрезана .

Если я сделаю то же самое, но запрошу содержимое страницы, у меня не возникнет никаких проблем.

      root@wordpress-7bd5ccfd77-drm96:/var/www/html# curl --http0.9 -iv --raw http://localhost:80/
*   Trying ::1:80...
* Connected to localhost (::1) port 80 (#0)
> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.74.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Date: Mon, 17 Jan 2022 09:15:33 GMT
...

Если я удаленно скопирую тот же файл из модуля или через файловый ресурс Azure Files, он будет выполнен так, как ожидалось, поэтому он не будет поврежден ни на томе, ни в том, как том смонтирован.

      kubectl cp it-scribe-wordpress/wordpress-794cbff687-ts6q9:/var/www/html/wp-includes/images/spinner.gif ./spinner.gif
tar: Removing leading `/' from member names

Я получаю очень полезный spinner.gif.

AFAICT, это происходит только с изображениями. Любые мысли будут высоко оценены.

Ян

Изменить: причина, по которой я использую --http0.9, заключается в том, что завиток выходит из строя раньше и не позволяет мне увидеть ответ. Флаг влияет только на обработку Curl, а не на тело запроса. Вот пример без флага.

      root@wordpress-7bd5ccfd77-drm96:/var/www/html# curl -iv --raw http://localhost:80/wp-includes/images/spinner.gif
*   Trying ::1:80...
* Connected to localhost (::1) port 80 (#0)
> GET /wp-includes/images/spinner.gif HTTP/1.1
> Host: localhost
> User-Agent: curl/7.74.0
> Accept: */*
>
* Received HTTP/0.9 when not allowed

* Closing connection 0
curl: (1) Received HTTP/0.9 when not allowed

2 ответа

Вероятно, проблема связана не с WordPress, а скорее с Apache и Azure Files.

Проблема не возникает при использовании NGINX. Я бы предложил перейти на NGINX и PHP-FPM.

В любом случае, поскольку модули подключены к файлам Azure через SMB, быстрый поиск в Google покажет, что у многих людей такая же проблема с Apache и SMB.

Быстрое и простое решение — включить EnableSendFile.

См. - https://httpd.apache.org/docs/current/mod/core.html#EnableSendfile .

Вы можете сделать это, добавив следующую строку в .htaccess, основную конфигурацию Apache или конфигурацию vhost.

      EnableSendFile On

Я считаю, что существует проблема во взаимодействии между файлами Azure, AKS CSI и Apache. Я могу воспроизвести это поведение только с помощью файлов Azure — все другие формы подключения тома (диск, файлы контейнера, NFS) работают должным образом.

Есть некоторые свидетельства того, что другие люди столкнулись с этим: https://github.com/Azure/AKS/issues/2614.

Я работал с использованием монтирования NFS.

Другие вопросы по тегам