Ошибки NS_CORRUPTED_CONTENT при запуске приложения SvelteKit на сервере Hetzner

Вопрос или проблема

Я пытаюсь запустить приложение sveltekit, построенное с помощью адаптера node, на управляемом сервере Hetzner с konsoleH.
Веб-сервер – Apache, и в папке “public_html” у меня есть файл .htaccess со следующими правилами:

RewriteEngine On

RewriteRule ^(.*)$ http://0.0.0.0:3000/ [P,L]

Мне позволено запускать nodejs на сервере, и я поместил папку “build” sveltekit за пределы “public_html” на том же уровне,
поэтому ее путь – “/usr/home/myaccount/build”, тогда как “public_html” – “/usr/home/myaccount/public_html”

Если я запускаю “node build”, сервер node запускается, и приложение обслуживается почти корректно:
Я вижу форму входа, которую я создал, и текст главной страницы, но ни стилей, ни изображений, ни файлов js,
и я получаю много “200 OK” ошибок КРАСНЫМ цветом (NS_ERROR_CORRUPTED_CONTENT) в консоли инструментов разработчика браузера (Firefox). Несколько из них:

GET http://testdomain.com/_app/immutable/entry/start.Bdelxb9Y.js NS_ERROR_CORRUPTED_CONTENT
GET http://testdomain.com/_app/immutable/chunks/BUpY52Oh.js NS_ERROR_CORRUPTED_CONTENT

и так далее, за исключением первого вызова:

GET http://testdomain.com/_app/immutable/assets/app.DrWw3tSc.css [HTTP/1.1 200 OK 44ms] без дальнейших ошибок

Я возился с базовым путем в svelte.config.js, с относительным опциональным, с чем угодно, что смог придумать, но безуспешно, с различными результатами между ошибками 500 и 404.

Я также пробовал помещать папку “build” в “public_html”, безуспешно.

Может кто-нибудь подсказать и дать мне наводку? Я уверен, что это связано с конфигурацией пути, но в чем дело?

Большое спасибо

Ответ или решение

Ваш вопрос касается проблемы с ошибками типа NS_CORRUPTED_CONTENT при запуске приложения SvelteKit на сервере Hetzner с использованием Apache. Давайте разберем теорию, примеры и возможные применения для решения этой проблемы.

Теория

Когда браузер выводит ошибку NS_CORRUPTED_CONTENT, это обычно связано с тем, что сервер отправляет данные, которые не соответствуют ожидаемому формату. В случае веб-приложений предполагается, что содержимое, типа JavaScript, CSS, или HTML, передается в неизмененном виде. Причины таких ошибок могут быть различными: проблемы с конфигурацией сервера, неправильно настроенные заголовки HTTP или сжатие, кэширования и другие аспекты.

Одной из основных теорий может быть проблема с проксированием в конфигурации .htaccess. Правило переписывания RewriteRule ^(.*)$ http://0.0.0.0:3000/ [P,L], скорее всего, пытается проксировать все запросы на ваш Node.js сервер, что может неправильно интерпретировать запросы на статические файлы.

Пример

Рассмотрим ваш случай: SvelteKit приложение запускается, и главная страница отображается, однако стили и скрипты не подгружаются. Это указывает на то, что запросы до серверной части проходят успешно, но при обращении к статическим файлам что-то идет не так.

Один из распространенных примеров таких проблем – неверное проксирование или несоответствие путей. В контексте SvelteKit, статические файлы часто развертываются в подкаталоге, таком как /_app, и если ваше правило переписывания перенаправляет каждый запрос на корень Node.js-сервера, статические файлы могут быть неправильно обработаны.

Применение

Теперь, когда мы понимаем, что может быть причиной проблемы, давайте рассмотрим шаги для ее решения:

  1. Расположение статических файлов: Убедитесь, что статические файлы доступны по прямым путям без проксирования их на Node.js. Это можно настроить путем исключения этих путей из правил переписывания.

  2. Обновление .htaccess: Измените .htaccess, чтобы исключить проксирование запросов на статические файлы:

    RewriteEngine On
    
    # Исключите проксирование для статических файлов
    RewriteCond %{REQUEST_URI} !^/_app
    RewriteCond %{REQUEST_URI} !\.(css|js|png|jpg|jpeg|gif|ico)$
    RewriteRule ^(.*)$ http://0.0.0.0:3000/$1 [P,L]
  3. Проверка заголовков HTTP: Убедитесь, что сервер отправляет правильные заголовки Content-Type для CSS и JS файлов. Это может быть сделано с помощью настроек Apache или Node.js.

  4. Логи сервера: Проверьте журналы Apache и Node.js на наличие ошибок или предупреждений, которые могут указывать на проблемы с конфигурацией или зависимостями.

  5. Кэширование и сжатие: Если ваш сервер или прокси использует сжатие (например, gzip), убедитесь, что оно настроено правильно и не повреждает файлы.

  6. Дебаггинг: Попробуйте запустить сервер на другом порту или временно убрать проксирование, чтобы изолировать непосредственно проблему с сервера или конфигурации SvelteKit.

Следуя вышеуказанным рекомендациям, у вас должно получиться устранить NS_CORRUPTED_CONTENT ошибки и обеспечить корректную работу вашего SvelteKit приложения на сервере Hetzner. Убедитесь, что все элементы конфигурации согласованы друг с другом, чтобы минимизировать риск подобных проблем в будущем.

Оцените материал
Добавить комментарий

Капча загружается...