При загрузке PDF-файлов размером менее 4 МБ я получаю сообщение об ошибке «загрузка слишком велика, максимальный размер — 4 МБ».Вот результаты моих тестов:
PDF размером 68 КБ загружается нормально, как и ожидалось.
JPG размером 2,3 МБ загружается нормально, как и ожидалось.
Я проверил это на своём тестовом сайте (4b561277a9) без изменений в настройках max или ограничениях на файлы. У меня загрузка работает корректно, если добавить pdf в authorized extensions, и выводится правильное сообщение об ошибке «Извините, файл, который вы пытаетесь загрузить, не разрешён», когда настройки возвращены к значениям по умолчанию.
Есть ли что-то ещё, что я мог бы попробовать, чтобы воспроизвести проблему?
Нет, так как размер этого файла меньше стандартного лимита nginx. Однако это хорошая подсказка.
На сайте, который @Julien_Palard размещает самостоятельно, между Discourse и браузером работает кастомный обратный прокси-сервер, поэтому эта ошибка, вероятно, вызвана неправильной конфигурацией обратного прокси.
Я получаю ошибку 413 Request Entity Too Large от nginx, так что мне явно нужно копнуть глубже, чтобы понять, почему «большое» изображение проходит, а «не такое уж большое» PDF-файл — нет…
JPG размером 3,0 МБ имеет Content-Length 557215, то есть неожиданно всего 0,5 МБ!
PDF размером 2,3 МБ имеет Content-Length 2460137, то есть ожидаемо 2,3 МБ.
Перед загрузкой Discourse изменяет размер JPG?
На моих JPEG-изображениях я вижу, что после загрузки в Discourse ширина и высота изображения меняются (попробовал с https://apod.nasa.gov/apod/image/2209/DSCF4968_PS_Lioce.jpg — это картинка 5703×3892 пикселей, 3,6 МБ, но после загрузки она стала 1920×1310 пикселей и весит всего 153 КБ.
По умолчанию в nginx параметр client_max_body_size установлен на 1 МБ, все клиентские рескейленные JPEG-изображения имеют размер менее 1 МБ, и теперь всё стало ясно.